arxiv-mcp
Allows AI agents to search arXiv papers, retrieve metadata, read full text page by page, and download PDFs or LaTeX source code.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@arxiv-mcpsearch for recent papers on reinforcement learning"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
arxiv-mcp
An efficient, well-behaved Model Context Protocol server for arXiv. It gives AI agents a clean interface to search papers, fetch metadata, read full text, and download PDFs/source — with rate-limiting, on-disk caching, and session pinning built in so the same paper is never fetched twice.
Built on the official MCP Python SDK (2.x). Runs over stdio.
Contents
Related MCP server: arXiv MCP Server
Why
Respects arXiv. One request every 3 s over a single connection (the Terms-of-Use floor), with 503
Retry-Afterback-off and a descriptiveUser-Agent. A single global limiter gates every outbound call, so no combination of tools can exceed the rate.Fast for repeat queries. Three-tier cache (metadata / extracted text / raw files) keyed by normalized id + version. Concurrent identical fetches collapse to one request (single-flight dedup).
Bounded disk. LRU eviction by paper count and disk size — whichever ceiling trips first. Papers pinned to an open session are exempt.
Context-safe reads.
read_paperis paginated so a 40-page paper never overflows the model's context. Extraction prefers clean arXiv HTML / LaTeX source and falls back to the PDF for older or PDF-only papers.Any id form. New (
2401.12345v2), old (hep-th/9901001),arXiv:prefix,arxiv.org/abs/...URLs, and10.48550/arXiv...DOIs all normalize.
Install
Requires Python ≥ 3.11 and uv.
git clone https://github.com/Himasnhu-AT/arxiv-mcp.git
cd arxiv-mcp
uv venv --python 3.11
uv pip install -e . # add ".[fast]" for PyMuPDF (AGPL) extractionThe default install uses pypdf (BSD) for PDF text extraction. The optional
fast extra pulls in PyMuPDF — much faster and higher quality, but AGPL-3.0, so
it is opt-in:
uv pip install -e ".[fast]"Run
uv run arxiv-mcp # starts the stdio MCP serverNormally you don't run this yourself — your MCP client launches it (below).
Wire into an agent
Add to your MCP client config (.mcp.json, Claude Desktop config, etc.). See
.mcp.json.example:
{
"mcpServers": {
"arxiv": {
"command": "uv",
"args": ["run", "--directory", "/ABSOLUTE/PATH/TO/arxiv-mcp", "arxiv-mcp"],
"env": {
"ARXIV_MCP_MAX_PAPERS": "200",
"ARXIV_MCP_MAX_DISK_MB": "2048"
}
}
}
}Claude Code, at user (global) scope:
claude mcp add arxiv --scope user -- \
uv run --directory /ABSOLUTE/PATH/TO/arxiv-mcp arxiv-mcp
claude mcp list # should show: arxiv ... ✔ ConnectedTools then appear to the agent as mcp__arxiv__search_papers, mcp__arxiv__read_paper, etc.
The skill/SKILL.md file teaches an agent how to use these
tools well (query construction, reading economically, session hygiene). Drop it
wherever your agent loads skills.
Quickstart: a research flow
The intended pattern for a multi-step task:
start_session(session_id="rlhf-review")— open a session.search_papers(title="...", category="cs.LG", session_id="rlhf-review")— discover.get_paper(paper_id="2203.02155", session_id="rlhf-review")— inspect metadata.read_paper(paper_id="2203.02155", page=1, session_id="rlhf-review")— read, page by page.end_session(session_id="rlhf-review")— release pinned papers.
Passing the same session_id throughout pins every fetched paper so nothing
refetches across calls or intervals, and protects them from eviction mid-task.
Tools reference
search_papers
Search arXiv; returns compact metadata plus total_results for paging.
Param | Type | Default | Notes |
| str | – | Raw arXiv field syntax, e.g. |
| str | – | Shortcut → |
| str | – | Shortcut → |
| str | – | Shortcut → |
| str | – | Shortcut → |
| list[str] | – | Fetch specific ids instead of searching. |
| int | 0 | Pagination offset. |
| int | 10 | Capped at 2000/call; total window 30000. |
| str |
| or |
| str |
| or |
| str | – | Pin returned papers to this session. |
Shortcuts are AND-combined with query. Booleans in raw queries are AND,
OR, ANDNOT (not NOT). For "latest N on X", use
sort_by="submittedDate".
get_paper
get_paper(paper_id, session_id=None) — full metadata for one id (any form).
Served from cache when possible. Returns normalized metadata plus derived
pdf_url / abs_url / html_url / source_url.
read_paper
read_paper(paper_id, page=1, page_size=15000, session_id=None) — paginated full
text. Extraction is HTML/source-first with a PDF fallback; the result is cached
permanently per exact version. The response includes method
(html/ar5iv/pdf/cache), page, total_pages, total_chars, and
has_more. Pin a version with 2401.12345v1; a bare id reads the latest.
download_paper
download_paper(paper_id, fmt="pdf", session_id=None) — download the raw pdf
or source (LaTeX tarball) into the cache; returns the local path.
Sessions
start_session(session_id)— open a session (pins its papers).end_session(session_id)— close it, unpinning its papers.session_status(session_id)— list the papers pinned to it.
Cache
cache_stats()— paper count, disk usage, limits, open sessions.list_cached()— cached papers (most-recent first) with size and pin state.clear_cache(drop_pinned=False)— evict papers (keeps open-session papers unlessdrop_pinned).
Categories
list_categories(group=None)— the bundled arXiv taxonomy. Pass a group prefix (cs) to narrow, or a full id (cs.AI) for its description.
Sessions & caching
Content is addressed by normalized id + version, so two sessions requesting the same paper share one copy on disk — never a double fetch. Open a session, do your research across as many tool calls / intervals as you like (nothing refetches), then close it to release its papers for eviction.
Between and during sessions the cache stays bounded automatically by two
independent ceilings — paper count and disk size — with least-recently-
accessed papers evicted first (ARXIV_MCP_MAX_PAPERS, ARXIV_MCP_MAX_DISK_MB).
Papers pinned to an open session are never evicted, so an in-flight task can't
lose a paper mid-work. When reclaiming space, a paper's heavy raw PDF/source is
dropped before its cheap extracted text and metadata.
Configuration
All via environment variables:
Var | Default | Meaning |
|
| Cache root directory. |
|
| Max cached papers before LRU eviction. |
|
| Max cache disk (MB) before LRU eviction. |
|
| TTL (s) for "latest" (unversioned) metadata. |
Architecture
src/arxiv_mcp/
server.py MCPServer + the 11 tool definitions (stdio entry point)
client.py Atom query API + content fetch; all traffic rate-limited
rate_limiter.py global ≥3s limiter + 503 back-off + single-flight dedup
cache.py 3-tier disk cache, sessions, LRU eviction (count AND size)
extract.py HTML/ar5iv-source-first text extraction, pypdf fallback
ids.py id normalization (new/old schemes, URL/DOI) + URL builders
categories.py bundled arXiv subject taxonomyRequest path. Every tool that touches the network goes through
ArxivClient, whose _get acquires the shared RateLimiter before each call,
honors Retry-After on 503, and retries transient failures. Identical
in-flight fetches are deduplicated by SingleFlight. Results land in Cache,
keyed by ArxivId.key (normalized id + version), and every write triggers a
bounded LRU eviction pass that skips session-pinned papers.
Extraction order. read_paper → arxiv.org/html (LaTeXML) →
ar5iv.labs.arxiv.org → PDF. HTML sources are accepted only when they carry a
real render; arXiv serves a 200-status stub (or 404) for papers without native
HTML, so short/stub responses are rejected and fall through to the PDF, which is
always available.
Development & testing
uv pip install -e .
# Offline unit tests (id normalization, cache eviction & pinning) — no network:
uv run python -m pytest tests/ -q
# or without pytest:
uv run python tests/test_offline.py
# Live end-to-end smoke test against arXiv (needs network, ~30s, polite 3s spacing):
uv run python tests/test_live.pytest_offline.py is deterministic and network-free. test_live.py performs a
handful of real requests (search, metadata, extraction, cache-hit) and asserts a
few well-known papers resolve correctly.
Troubleshooting
claude mcp listshows "Failed to connect". Ensureuvis on PATH and the--directorypath is correct and absolute. Runuv run arxiv-mcpin the repo to see startup errors directly (it will wait for stdio input; Ctrl-C to exit).A paper won't read / returns a short stub. Older or PDF-only papers have no arXiv HTML; the server falls back to the PDF automatically. If the PDF itself is a scan with no text layer, extraction may be sparse — install the
fastextra for better results.Cache growing? It can't exceed
ARXIV_MCP_MAX_PAPERS/ARXIV_MCP_MAX_DISK_MBexcept for papers pinned to open sessions. Callend_sessionwhen done, orclear_cache.Rate-limited by arXiv. The server already spaces requests ~3 s apart; avoid launching large fan-outs of
read_paperacross many papers at once.
License
MIT — see LICENSE. The optional fast extra (PyMuPDF) is AGPL-3.0;
the default install avoids it.
Available Tools
11 toolscache_statsA
Report cache usage: paper count, disk usage, limits, sessions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Report' accurately implies a read-only, non-destructive operation, but the description does not elaborate on additional behaviors like whether it requires an active session, the granularity of 'sessions' (active vs. historical), or any performance considerations. It meets the minimum bar but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant phrasing. It efficiently communicates the tool's purpose and the specific data points reported, earning each word's place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (zero parameters), the presence of an output schema (which covers return values), and 100% schema description coverage, the description is sufficiently complete. It enumerates the key metrics reported, providing enough context for an agent to select and invoke the tool without further ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so there are no parameter meanings to explain. Per the calibration baseline, a tool with 0 parameters receives a 4. The description's enumeration of reported metrics (paper count, disk usage, limits, sessions) adds value by elaborating on the tool's output focus.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Purpose is explicitly stated with a specific verb ('Report') and resource ('cache usage'), enumerating the key metrics (paper count, disk usage, limits, sessions). This distinguishes it from siblings like list_cached (which lists cached papers) and clear_cache (which removes them).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates the tool is for reporting cache usage, providing a clear context for use. However, it does not explicitly mention when not to use it or name alternative tools that might be more appropriate for specific tasks, such as list_cached for individual cached items.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_cacheA
Evict cached papers. By default leaves papers pinned to open sessions;
set drop_pinned to remove everything.
| Name | Required | Description | Default |
|---|---|---|---|
| drop_pinned | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It discloses a key nuance: pinned papers are retained unless drop_pinned is set. However, it does not explicitly mention whether eviction is permanent, what happens to open sessions, or any side effects on session data. The term 'evict' implies removal but could be clearer about irreversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose and then a clarifying note on the parameter. No filler or redundant information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained in the description. The tool's behavior is adequately described: it evicts cached papers, respects pinned papers by default, and provides an option to remove everything. It could add a note about checking cache state (e.g., using list_cached) before clearing, but this is not essential here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides no description for the single parameter drop_pinned. The description fully explains its effect: setting it removes everything, while the default leaves pinned papers. This is excellent compensation for 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Evict cached papers.' This clearly states the tool's function and distinguishes it from siblings like list_cached (which lists) and cache_stats (which reports statistics). The mention of pinned papers adds further specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the default behavior (leaves pinned papers) and how to override it with the drop_pinned parameter. It implicitly tells when to use the tool (to clear cache) but does not explicitly contrast with alternatives or state when not to use it. Still, the guidance is concrete and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_paperA
Download a paper's raw pdf or source (LaTeX tarball) into the cache.
Returns the local path. Use read_paper if you want extracted text rather
than the raw file.
| Name | Required | Description | Default |
|---|---|---|---|
| fmt | No | ||
| paper_id | Yes | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that the file is stored in the cache and that the local path is returned, but it does not mention potential side effects like overwriting cached files, network access requirements, or error conditions. This is a moderate level of transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of two sentences that are front-loaded with the action ('Download'). Every sentence adds value: the first specifies the resource and format, the second clarifies return value and the alternative tool. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's relative simplicity and the presence of an output schema, the description covers the core functionality well. It explains the return value explicitly, gives format options, and contrasts with a sibling tool. The only gap is the unexplained session_id parameter, which could affect session-related usage. Overall, it is nearly complete for common use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for the lack of parameter descriptions. It explains the fmt parameter by listing the allowed values (pdf or source/LaTeX tarball) and implies that paper_id is the identifier. However, session_id is not explained at all, leaving one of three parameters ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool downloads a paper's raw pdf or source tarball into the cache, which is a specific verb+resource+scope. It also distinguishes itself from the sibling tool read_paper by explicitly noting that read_paper extracts text instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent to use read_paper when extracted text is needed, providing a clear alternative and the condition for choosing that alternative over this tool. This meets the 'explicit alternatives' criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
end_sessionA
Close a session, unpinning its papers so they become eligible for eviction.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing side effects. It explicitly states that papers are unpinned and become eligible for eviction, which is important behavioral information beyond simply 'closing' a session.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that front-loads the action and adds a meaningful detail. No waste; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and an output schema, the description covers the core purpose and the key side effect. It could mention prerequisites (e.g., session must exist) but that's a minor gap given the simple nature and available output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the only parameter, session_id, is implicitly understood from the description ('Close a session'). The description does not explicitly explain the parameter, but the name is self-explanatory given the tool's purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb ('Close') and resource ('a session'), and adds the important consequence of unpinning papers. This distinguishes it from siblings like start_session and session_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: use this tool to end a session and make its papers evictable. While it doesn't explicitly name alternatives, the meaning is obvious and distinct from siblings like start_session or clear_cache.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_paperA
Fetch full metadata for one paper by arXiv id.
Accepts any id form: 2401.12345, arXiv:2401.12345v2, an
arxiv.org/abs/... URL, hep-th/9901001, or a 10.48550/arXiv... DOI.
Served from cache when possible. Returns normalized metadata plus derived
pdf / abs / html / source URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| paper_id | Yes | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility. It discloses caching behavior ('Served from cache when possible'), return contents (normalized metadata plus derived URLs), and accepted id forms. Although it does not explicitly state read-only status, the verb 'fetch' implies a non-mutating operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three focused sentences: purpose, accepted id formats, and caching/return behavior. Every sentence contributes value, and the front-loaded purpose allows quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so detailed return fields are unnecessary. The description covers the main input variants, caching behavior, and output summary. The only gap is session_id, but for a straightforward metadata fetch, the overall behavior is sufficiently specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds rich meaning to paper_id by listing multiple accepted id formats (arXiv, URL, DOI), going well beyond the schema's bare string type. However, session_id is not mentioned at all, leaving its purpose and effect undocumented. With 0% schema coverage, this is a notable omission.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Fetch'), the resource ('full metadata for one paper'), and the input method ('by arXiv id'). This distinguishes it from siblings like search_papers (search) and read_paper (content), and the enumerated id forms make the tool's scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool (to retrieve full metadata for a single paper) and details acceptable input formats. However, it does not explicitly compare with alternatives like read_paper or download_paper, so no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cachedA
List cached papers (most-recently-accessed first) with size and pin state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden. It adds useful behavioral context: ordering (most-recently-accessed first) and output fields (size, pin state). However, it does not disclose whether it is read-only, requires a session, or has other side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence conveys the action, resource, ordering, and output fields with no redundancy. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (no parameters) and the existence of an output schema, the description covers the essential aspects: what it lists, ordering, and included fields. It could optionally mention whether a session is required, but that is not critical for this simple list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema confirms this. The description adds meaning by specifying the resource ('cached papers') and the information shown, which is the baseline expectation for parameterless tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists cached papers with ordering and the fields returned (size and pin state). It distinguishes from siblings like list_categories and cache_stats through the specific resource 'cached papers', but does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. The description implies it is for viewing cached papers, but it does not mention exclusions, prerequisites, or related tools like search_papers or cache_stats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesA
List arXiv subject categories for building cat: filters.
Pass a group prefix (e.g. cs, math, astro-ph) to narrow, or a
full category id (cs.AI) to get its description.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the core behavior (listing categories) and the filtering/narrowing behavior with group prefixes or full IDs. It does not state return format, but an output schema exists, so that is covered elsewhere.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with a clear statement of what the tool does, followed by a useful example. No unnecessary verbiage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one optional parameter and an output schema provided. The description fully conveys its purpose and parameter usage, making it complete for the given complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides zero descriptions for the 'group' parameter, but the description fully compensates by explaining what prefixes and full IDs mean, with examples (cs, math, astro-ph, cs.AI). This makes the parameter totally clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('List arXiv subject categories') and its intended purpose ('for building cat: filters'), which distinguishes it from the sibling tools that handle paper retrieval and sessions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains where this fits in the workflow ('for building cat: filters') and gives concrete usage instructions (passing a group prefix or full category ID). It does not explicitly mention alternatives, but no alternative exists among siblings, so this is clear and adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_paperA
Read a paper's full text, paginated so large papers don't overflow context.
Extraction prefers arXiv HTML/LaTeX source and falls back to PDF; the result
is cached permanently per exact version. page is 1-based; page_size is
characters per page. The response reports total_pages and has_more so
you can request the next page. To read a specific version, include it in the
id (2401.12345v1); a bare id resolves to the latest.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| paper_id | Yes | ||
| page_size | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses extraction preferences (arXiv HTML/LaTeX source falls back to PDF), permanent caching per version, pagination behavior (1-based page, character-based page_size, total_pages, has_more), and version resolution. This gives the agent a thorough understanding of the tool's behavior beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and concise: the first sentence states the core purpose, followed by precise implementation details. Every sentence adds value, with important parameters and response behavior described using code formatting for clarity. No redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description adequately covers return fields (total_pages, has_more) and explains pagination, extraction, caching, and versioning. However, session_id remains unexplained, and there is no explicit guidance on when to choose this over get_paper or download_paper. Overall it is nearly complete but has minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions are absent (0% coverage), but the description explains page (1-based), page_size (characters per page), and paper_id (version inclusion and bare id resolution to latest). session_id is not explained, leaving one of four parameters undocumented. This provides substantial added meaning beyond the schema but not full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Read a paper's full text' with a specific verb and resource, and distinguishes itself from siblings like download_paper (which likely saves files) and get_paper (which might provide metadata) by focusing on full text with pagination. The extraction and version details further clarify its unique role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context on when to use this tool (to read full text, paginated to avoid context overflow) and how to handle versions via the id. However, it does not explicitly name alternative tools or state when not to use it, though the sibling list implies differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_papersA
Search arXiv and return compact paper metadata.
Provide a raw query (arXiv field syntax, e.g. au:hinton AND cat:cs.LG)
and/or the structured shortcuts category (cat:), author (au:),
title (ti:), abstract (abs:) which are AND-combined. Or pass
id_list to fetch specific papers by id.
sort_by is one of relevance, lastUpdatedDate, submittedDate;
sort_order is ascending or descending. max_results is capped
at 2000 per call — page with start for more (up to 30000 total).
If session_id is given, returned papers are pinned to that session's
cache so they won't be evicted while the session is open.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| start | No | ||
| title | No | ||
| author | No | ||
| id_list | No | ||
| sort_by | No | relevance | |
| abstract | No | ||
| category | No | ||
| session_id | No | ||
| sort_order | No | descending | |
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the 2000 result cap, 30000 total pagination limit, and the session cache-pinning side effect, which are meaningful behavioral details beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized into three focused paragraphs, front-loaded with the core purpose. Every sentence adds necessary detail, and the length is appropriate for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no annotation support, the description covers query construction, parameter semantics, limits, pagination, and side effects. An output schema exists, so return values need not be explained in prose. This is complete for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains every parameter: query syntax, category/author/title/abstract shortcuts, id_list alternative, sort_by/sort_order allowed values, max_results cap, start pagination, and session_id caching behavior. This is comprehensive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search arXiv and return compact paper metadata,' identifying the specific verb, resource, and return type. It distinguishes from siblings by emphasizing search over retrieval (e.g., id_list vs get_paper).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear guidance on using raw query syntax vs structured shortcuts vs id_list, and explains pagination with start/max_results. However, it does not explicitly contrast with sibling tools like get_paper or download_paper, so it stops short of full alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_statusB
Report the papers pinned to a session.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavioral traits. It implies a read-only operation via 'Report' but does not explicitly state it is non-destructive, nor does it describe behavior for missing/invalid session IDs or whether the session must be active. The lack of explicit safety info is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundant words, efficiently conveying the tool's core function. It is appropriately front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, has an output schema (so return values needn't be explained), and one parameter. However, the description lacks contextual completeness regarding the session lifecycle (e.g., relationship to start_session/end_session) and does not mention error conditions or prerequisites. This leaves gaps for an agent deciding to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage for the single parameter 'session_id'. The description's 'pinned to a session' provides contextual meaning that session_id identifies the session of interest, partially compensating for the schema gap. However, it does not specify format, constraints, or how to obtain a valid session_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Report the papers pinned to a session' uses a specific action (report) and target (papers pinned to a session), clearly differentiating it from sibling tools like get_paper (single paper) and start_session/end_session (session lifecycle). It is not a tautology and provides a precise scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. It does not mention prerequisites such as an active session, nor does it exclude cases where other tools (e.g., search_papers) would be more appropriate. The agent is left without selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_sessionA
Open a caching session. Papers fetched with this session_id are pinned
(never evicted) until :func:end_session, so repeated work over intervals
never refetches the same paper.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the pinning and non-eviction behavior, which is valuable. However, it does not mention idempotency, what happens if the session_id already exists, or any potential side effects, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action, and every sentence serves a purpose. There is no wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and an output schema. The description covers the main behavior and lifecycle, and it references end_session for the closing action. It is sufficiently complete for the tool's complexity, though it could mention error conditions or session re-use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only provides a string session_id, but the description adds meaning by explaining that papers fetched with this session_id are pinned. This connects the parameter to the tool's core functionality, adding value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Open a caching session.' It also specifies the unique behavior of pinning papers until end_session, which distinguishes it from sibling tools like session_status and cache_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for caching papers across intervals and mentions pairing with end_session, but it does not explicitly state when to use this tool versus alternatives or provide any exclusions. The guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v0.1.0- First observed
cache_stats - First observed
clear_cache - First observed
download_paper - First observed
end_session - First observed
get_paper - First observed
list_cached - First observed
list_categories - First observed
read_paper - First observed
search_papers - First observed
session_status - First observed
start_session
TDQS
Scored across 11 tools
Each tool has a clearly distinct purpose: categories, search, metadata fetch, full-text read, raw download, and session/cache management. There is no overlap or ambiguity between tool boundaries.
All tool names use snake_case and follow a consistent verb_noun pattern (list_categories, search_papers, get_paper, read_paper, download_paper, start_session, end_session, clear_cache), with the only slight deviations being session_status and cache_stats, which are still intuitive and consistent with the overall scheme.
Eleven tools is well-scoped for an arXiv server, covering search, retrieval, reading, downloading, and cache/session management. Each tool serves a clear need without unnecessary bloat or thinness.
The tool surface comprehensively covers the arXiv domain: category discovery, search, fetching metadata, reading full text, downloading raw files, and managing caching sessions. There are no obvious gaps for typical arXiv usage.
Maintenance
Related MCP Connectors
Search arXiv, fetch paper metadata, and read full-text content.
Search arXiv/Semantic Scholar/OpenAlex + medical evidence (PubMed/Europe PMC) + LaTeX/PDF tools.
Extract papers from ArXiv — titles, abstracts, authors, categories & PDF links. Monitor new AI, phys
Search and download academic papers from arXiv, PubMed, bioRxiv, medRxiv, Google Scholar, Semantic…
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables searching, downloading, and managing academic papers from arXiv.org through natural language interactions. Provides tools for paper discovery, PDF downloads, and local paper collection management.41MIT
- AlicenseAqualityDmaintenanceEnables interaction with arXiv.org to search scholarly articles, retrieve metadata, download PDFs, and load article content directly into LLM context for analysis.53MIT
- AlicenseAqualityDmaintenanceEnables LLMs to search, download, and read arXiv papers with automatic PDF text extraction and section filtering. Provides AI assistants direct access to scientific literature with local caching for fast re-access.31MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to search arXiv papers, retrieve metadata, browse categories, and read paper text.4MIT