Skip to main content
Glama

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-After back-off and a descriptive User-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_paper is 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, and 10.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) extraction

The 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 server

Normally 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 ... ✔ Connected

Tools 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:

  1. start_session(session_id="rlhf-review") — open a session.

  2. search_papers(title="...", category="cs.LG", session_id="rlhf-review") — discover.

  3. get_paper(paper_id="2203.02155", session_id="rlhf-review") — inspect metadata.

  4. read_paper(paper_id="2203.02155", page=1, session_id="rlhf-review") — read, page by page.

  5. 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

query

str

Raw arXiv field syntax, e.g. au:hinton AND cat:cs.LG.

category

str

Shortcut → cat:<value> (e.g. cs.LG).

author

str

Shortcut → au:<value> (quoted if it contains spaces).

title

str

Shortcut → ti:<value>.

abstract

str

Shortcut → abs:<value>.

id_list

list[str]

Fetch specific ids instead of searching.

start

int

0

Pagination offset.

max_results

int

10

Capped at 2000/call; total window 30000.

sort_by

str

relevance

or submittedDate, lastUpdatedDate.

sort_order

str

descending

or ascending.

session_id

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 unless drop_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

ARXIV_MCP_HOME

~/.arxiv-mcp

Cache root directory.

ARXIV_MCP_MAX_PAPERS

200

Max cached papers before LRU eviction.

ARXIV_MCP_MAX_DISK_MB

2048

Max cache disk (MB) before LRU eviction.

ARXIV_MCP_META_TTL_S

86400

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 taxonomy

Request 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_paperarxiv.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.py

test_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 list shows "Failed to connect". Ensure uv is on PATH and the --directory path is correct and absolute. Run uv run arxiv-mcp in 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 fast extra for better results.

  • Cache growing? It can't exceed ARXIV_MCP_MAX_PAPERS / ARXIV_MCP_MAX_DISK_MB except for papers pinned to open sessions. Call end_session when done, or clear_cache.

  • Rate-limited by arXiv. The server already spaces requests ~3 s apart; avoid launching large fan-outs of read_paper across 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 tools
cache_statsA

Report cache usage: paper count, disk usage, limits, sessions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
drop_pinnedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fmtNopdf
paper_idYes
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
paper_idYes
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
paper_idYes
page_sizeNo
session_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
startNo
titleNo
authorNo
id_listNo
sort_byNorelevance
abstractNo
categoryNo
session_idNo
sort_orderNodescending
max_resultsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 11 tool updatesv0.1.0
    • First observedcache_stats
    • First observedclear_cache
    • First observeddownload_paper
    • First observedend_session
    • First observedget_paper
    • First observedlist_cached
    • First observedlist_categories
    • First observedread_paper
    • First observedsearch_papers
    • First observedsession_status
    • First observedstart_session

TDQS

A4.2/5.0

Scored across 11 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers