MCP server
A stateless MCP server at https://mcp.arxivv.org/mcp (also https://arxivv.org/mcp) with seven tools for reading papers by anchor.
arXivv runs a Model Context Protocol server built on the document tree.
| Property | Value |
|---|---|
| Endpoint | https://mcp.arxivv.org/mcp |
| Alias | https://arxivv.org/mcp, proxied to the endpoint above |
| Transport | Streamable HTTP, JSON responses |
| Sessions | Stateless: every call stands alone |
| Auth | None |
| Tools | All read-only |
| Rate limit | Requests through arxivv.org/mcp share the HTTP rate limit |
Connect
{
"mcpServers": {
"arxivv": {
"type": "http",
"url": "https://mcp.arxivv.org/mcp"
}
}
}
With Claude Code:
claude mcp add --transport http arxivv https://mcp.arxivv.org/mcp
Tools
paper is any paper reference: 1706.03762, 1706.03762v7 or hep-th/9901001. Without a version, the latest is used.
| Tool | Input | Output |
|---|---|---|
outline |
{ paper, wait? } |
Outline as JSON |
read |
{ paper, anchor, maxTokens? } |
One section’s Markdown, heading included |
cite |
{ paper, anchor } |
{ text, url, anchor }: plain text of one paragraph or section, its section URL and resolved id |
references |
{ paper, id? } |
{ idv, references: Reference[] }, or one Reference when id is given |
figure |
{ paper, anchor } |
FigureJson, or TableJson for a table |
equation |
{ paper, anchor } |
{ id, number, latex }; number is null when the equation is unnumbered |
search_paper |
{ paper, query, limit? } |
[{ anchor, sectionId, snippet }]: the best-matching paragraphs |
Arguments
| Tool | Argument | Accepts |
|---|---|---|
outline |
wait |
Integer 0–60: seconds to wait for inferred fields, as Prefer: wait=N. See first request |
read |
anchor |
Section id (S3.SS2), alias (S3.2), A1 or a title slug (introduction) |
read |
maxTokens |
Integer 100–100000, default 8000 (chars/4) |
cite |
anchor |
Paragraph id (S3.SS2.p3) or section id, alias or slug |
references |
id |
Reference id (bib.bib12) or printed number (12 or [12]) |
figure |
anchor |
Figure id (S3.F1) or F<n>; table id (S6.T2) or T<n> |
equation |
anchor |
Equation id (S3.E1) or E<n> |
search_paper |
query |
Words to look for, e.g. label smoothing |
search_paper |
limit |
Integer 1–50, default 5 |
Behaviour
readtruncation: output longer thanmaxTokens × 4characters is cut and ends with…[truncated: N more tokens; fetch /1706.03762v7/sections/S3.2.md].citeURL:urlishttps://arxivv.org/<idv>/sections/<sectionId>.md, where<idv>is the resolved version and<sectionId>the enclosing section’s id.anchoris the cited node’s id. For example,S3.SS2.p1returnsurl: "https://arxivv.org/1706.03762v7/sections/S3.SS2.md"andanchor: "S3.SS2.p1". The Markdown has no in-page anchors, so the URL carries no fragment.figureresolves tables too:T<n>and table ids return aTableJsonwith its cells.search_paperranking: the query is split on whitespace into lowercase terms. Paragraphs that contain more distinct terms rank first, then those with more total occurrences. Each snippet is about 150 characters either side of the first match. It searches one paper, by substring; it is not semantic.- Errors: a failed call returns
isError: truewith text such asnot-found: Unknown paper 1706.99999(the HTTP error code and detail).
Typical flow
outline({ paper: "1706.03762" }): title, TL;DR, contributions and the section tree with token counts.read({ paper: "1706.03762", anchor: "S3.2" }): only the section you need.search_paper({ paper: "1706.03762", query: "label smoothing" }): find paragraph anchors.cite({ paper: "1706.03762", anchor: "S3.SS2.p1" }): exact text plus a stable URL to quote.figure({ paper: "1706.03762", anchor: "F1" })orequation({ paper: "1706.03762", anchor: "E1" })as needed.
A typical question costs ~3K tokens this way, against ~15K for the full paper.
Example
{
"method": "tools/call",
"params": {
"name": "equation",
"arguments": { "paper": "1706.03762", "anchor": "E1" }
}
}
{
"id": "S3.E1",
"number": "1",
"latex": "\\mathrm{Attention}(Q,K,V)=\\mathrm{softmax}\\left(\\frac{QK^{T}}{\\sqrt{d_{k}}}\\right)V"
}
Tool outputs follow schema 1.