Changelog
v0.6.0
Breaking Changes:
get_contentvalidates the ID locally and no longer contacts Jina; a missing paper or upstream failure now surfaces when thearxiv://content/...resource is read- Malformed paper IDs and non-arXiv or traversal URLs are rejected before any content request
New Tools:
read_paper: outline plus abstract by default, named sections or 10,000-character chunks, capped output (default 12,000 characters) withoffsetcontinuationget_papers: up to 50 IDs in one request, reportingmissing_idsexport_bibtex: BibTeX built from arXiv metadata only, with stable keys, version dedupe and escapingget_references/get_citations: compact citation graph via Semantic Scholar; optionalSEMANTIC_SCHOLAR_API_KEYis sent only as a request header
Improvements:
- Full text now comes from the arXiv PDF through Jina; previously only the abstract page was read
get_recentacceptssince="YYYY-MM-DD"(UTC) and returnstotal_resultsandhas_moresearch,search_advancedandget_recentacceptabstract_max_charsto shorten or drop abstracts- Papers include primary category, comment, journal reference, DOI and version when available
- Transport errors are reported clearly; HTTP 429/503/406 are retried once with capped
Retry-Afterand a total deadline per call - Query results (128 entries, 1–5 minutes) and full texts (32 papers, 1–24 hours) are cached
v0.5.0
Breaking Changes:
search,search_advanced,get_paperandget_recentnow call the official arXiv API (export.arxiv.org/api/query) instead of scraping HTML;beautifulsoup4is no longer a dependency- Dates are ISO timestamps (
2017-06-12T17:57:34Z), not12 June, 2017 - An unknown
sort_byraises instead of being ignored search_advancedid_arxivrestricts the result to that ID instead of matching a pattern
Improvements:
date_updatedis filled in, andget_recentresults include abstractssearch_advanceddate range now worksget_paperand ID parsing accept versioned (2301.00001v2), legacy (hep-th/9901001) andarXiv:-prefixed IDs- Requests are spaced 3 seconds apart per process and send a descriptive
User-Agent, as the arXiv API terms ask - Multi-word queries AND their words; a query containing a stopword is sent as a phrase because the API drops stopwords from ANDed words
v0.4.0
Breaking Changes:
- Upgraded to MCP Python SDK v2 (
mcp>=2.0.0); server now usesMCPServer(formerlyFastMCP) - Structured output: all tools declare an
outputSchemaand return typed structured content (search/search_advancedreturnSearchResult,get_paperreturnsPaper,get_recentreturnsRecentPapers) list_categoriesstructured content is wrapped as{"result": [...]}because the MCP spec requiresstructuredContentto be a JSON object- Errors no longer return
{"error": "..."}dicts or error strings; all failures (HTTP errors, invalid arXiv ID, missing search fields) now raise and surface as standard MCP tool errors
Improvements:
- New
RecentPapersmodel forget_recentresponses
v0.3.0
Breaking Changes:
- Renamed all tools to snake_case:
search_advanced,get_paper,get_content,get_recent,list_categories(existing client configurations referencing camelCase names must be updated)
Security:
- Fixed SSRF bypass in
get_content: non-arxiv.org URLs containing a valid arXiv ID in the path (e.g.https://evil.com/abs/2301.00001) are now correctly rejected
Improvements:
- All tools are now
async defusinghttpx.AsyncClient - HTTP errors return
{"error": "..."}dicts instead of raising exceptions, so the LLM can read and retry - All tools annotated with
readOnlyHint: trueandopenWorldHint: true SearchResultnow includeshas_more: boolandnext_page: int | nullfor easier paginationlist_categoriespre-computes the category list at import time instead of on every call
v0.2.0
Breaking Changes:
- Renamed entry point from
arxiv-server.pytoarxiv-mcpcommand - Renamed
gettool togetContentfor clarity
New Features:
searchAdvanced- Advanced search with title, abstract, date range filtersgetPaper- Get detailed paper metadata (authors, categories, dates, PDF URL)getRecent- Browse recent papers by categorylistCategories- List 33 common arXiv categories- Pagination support (
page,page_sizeparameters) - Sort options (
relevance,date_desc,date_asc) - Filter by author and category in basic search
Improvements:
- Migrated to
pyproject.tomlwith uv for dependency management - Replaced
requestswithhttpx(async-ready) - Added Pydantic models for type-safe data structures
- Reduced dependencies from 33 to 4 core packages
- Added proper timeout handling (30s)
- Modular project structure (
src/arxiv_mcp/)
v0.1.0
- Initial release
- Basic
searchandgettools