arxiv_read_paper falls through native HTML, then ar5iv, then the PDF, and the source field says which one you got. That matters: PDF-extracted bodies read fine as prose but flatten math, tables and heading structure, so an agent summarising equations out of one is on thin ice.
A read-only arXiv client. It searches using arXiv's own field prefixes and boolean operators, batches metadata for known IDs, and fetches paper bodies — trying arXiv's native HTML render first, then ar5iv, then text extracted from the PDF.
- arxiv_search with ti:, au:, abs:, cat: and all: prefixes and AND/OR/ANDNOT, a leaf-category or whole-archive filter, sorting and pagination — and it echoes the query back as actually searched
- submitted_from and submitted_to bound the submission date, which is how to reach results past the 10,000 pagination ceiling
- arxiv_get_metadata fetches up to 10 papers at once, versioned or unversioned, legacy ID formats included, and reports not-found IDs separately
- arxiv_read_paper returns the body with a source field naming which render answered; max_characters defaults to 100,000 and start pages through longer papers
- arxiv_list_categories lists the category taxonomy so a filter can be built from real codes
- Two resources: arxiv://paper/{paperId} and arxiv://categories
No account and no key — the arXiv API is free and the metadata is CC0. A public instance runs at https://arxiv.caseyjhand.com/mcp over Streamable HTTP, or install @cyanheads/arxiv-mcp-server and run it yourself over stdio or HTTP; the registry entry launches it under bun. ARXIV_REQUEST_DELAY_MS defaults to 3000 to honour arXiv's crawl delay, ARXIV_API_TIMEOUT_MS to 15000 and ARXIV_CONTENT_TIMEOUT_MS to 30000. Self-hosted HTTP binds 127.0.0.1 on port 3010 at /mcp, with MCP_AUTH_MODE none by default.
One command — npx -y @cyanheads/arxiv-mcp-server
