Skip to main content
Glama
vivek-viswam-rv

arxiv-researcher

arxiv-researcher

An MCP server that lets an LLM search arXiv and pull down papers as PDFs.

It exposes two tools over the Model Context Protocol: one to search arXiv by free-text query, and one to download a specific paper by its arXiv ID. Point Claude Desktop, Claude Code, Cursor, or any other MCP client at it and you can ask things like "find recent work on speculative decoding and download the top result".

How it works

The server is about 60 lines of Python. There isn't much to it, by design.

  • FastMCP handles the protocol. Each tool is a plain function decorated with @mcp.tool(); FastMCP reads the signature and docstring to build the tool schema the client sees, and takes care of transport, serialisation, and error reporting.

  • Pydantic defines the return types (models.py). Article, SearchResponse, and DownloadResponse are BaseModel subclasses, so every response has a fixed, typed shape rather than an ad-hoc dict. FastMCP uses the same models to generate the output schema, which means the client knows exactly what fields to expect before it ever calls the tool.

  • arxiv wraps the arXiv API. A single shared arxiv.Client() is reused across calls so the library's built-in rate limiting is respected.

Related MCP server: arXiv MCP Server

Tools

Parameter

Type

Default

Description

query

str

Free-text query, passed straight to arXiv

count

int

5

Maximum number of results

Results are sorted by relevance. Each entry includes the short arXiv ID (e.g. 2411.11095v3), title, authors, abstract, publication date, and a direct PDF URL.

download_article

Parameter

Type

Default

Description

article_id

str

arXiv ID, with or without version suffix

directory

str

DEFAULT_DOWNLOAD_PATH

Where to save the PDF

filename

str | None

<article_id>.pdf

Override the output filename

The directory is created if it doesn't exist. Raises a ValueError if the ID doesn't resolve to a paper.

Setup

Requires Python 3.13 or newer and uv.

git clone https://github.com/vivek-viswam-rv/arxiv-researcher.git
cd arxiv-researcher
uv sync

Before running, open constants.py and set DEFAULT_DOWNLOAD_PATH to wherever you want PDFs to land. It ships with a hardcoded path that almost certainly isn't right for your machine. Use an absolute path; ~ is not expanded.

Running

The server speaks stdio, which is what most MCP clients expect:

uv run main.py

For interactive testing, FastMCP bundles the MCP Inspector:

uv run fastmcp dev inspector main.py

Connecting a client

FastMCP can write the client configuration for you:

uv run fastmcp install claude-desktop main.py
uv run fastmcp install claude-code main.py
uv run fastmcp install cursor main.py

Or add the server by hand. For Claude Desktop, that means adding an entry to claude_desktop_config.json:

{
  "mcpServers": {
    "arxiv-researcher": {
      "command": "uv",
      "args": ["run", "--directory", "/absolute/path/to/arxiv-researcher", "main.py"]
    }
  }
}

Restart the client and the search and download_article tools should show up.

Project layout

main.py        FastMCP server and the two tool definitions
models.py      Pydantic response models
constants.py   Download path and default result count

License

MIT. See LICENSE.

Available Tools

2 tools
download_articleDownload ArticleA

Download an arXiv article PDF and return its saved path.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameNo
directoryNo/Users/vivek/Downloads/arxiv-researcher
article_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
titleYes
pdf_urlYes
article_idYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so the description carries the full burden. It discloses the return value type (saved path) and implicitly signals a side effect (writing a file). However, it omits behavioral details an agent likely needs: whether the file is overwritten, whether the parent directory must exist, whether authentication is required, and rate-limit or retry behavior.

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 tight sentence, front-loaded with the action and ending with the outcome. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter file-writing tool with zero schema coverage and no annotations, this one-liner is too thin. An output schema exists so return details are partly covered, but the gaps around the directory default, filename null handling, and write/overwrite semantics leave the description incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/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 three undocumented parameters. It names none of them: 'article_id', 'directory' (with a hardcoded default path), and 'filename' (nullable) are left without explanation, especially the default directory behavior and the null filename semantics.

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?

States the specific verb (Download), the specific resource (arXiv article PDF), and the outcome (returns saved path). Clearly distinguishable from the sibling 'search', which finds articles rather than downloading them.

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?

Implied usage from the verb 'download', but no explicit when-to-use or when-not-to guidance, and no mention of the 'search' sibling that precedes it in the typical workflow.

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. 2 tool updatesv0.1.0
    • First observeddownload_article
    • First observedsearch

TDQS

B3.2/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: search retrieves article listings, while download_article fetches a PDF. There is no overlap or ambiguity between them.

Naming Consistency4/5

Tool names are readable and follow a verb-based convention, but 'search' is a bare verb while 'download_article' uses a verb_noun pattern, creating a minor inconsistency.

Tool Count3/5

Two tools is thin for an arXiv researcher server, covering only basic discovery and retrieval. It is borderline rather than clearly inappropriate.

Completeness3/5

Core actions (search, download) are covered, but notable gaps remain such as fetching article metadata or abstracts without downloading, browsing by category/author, or citation export.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    Not graded
    maintenance
    Enables AI assistants to search and retrieve academic papers from arXiv through MCP tools, supporting search by various criteria, detailed paper information, category browsing, and PDF content extraction.
    4
    62 npm
    2
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables searching and retrieving arXiv papers by topic, fetching abstracts by paper ID, and saving markdown content to files. Includes examples of integrating MCP tools with Google Gemini for AI-powered paper research.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables searching arXiv, fetching metadata, reading papers as section-aware Markdown, listing recent papers, and downloading PDFs via five MCP tools.
    10 npm
    2
    MIT