MCP server for arXiv paper search with semantic search, citation enrichment, and PDF extraction
Project description
arXiv MCP Server
MCP (Model Context Protocol) server for searching, downloading, and analyzing arXiv papers. Supports keyword search, Semantic Scholar-backed semantic search, PDF text extraction, and SQLite caching.
Features
- Keyword Search — full arXiv API query syntax (
ti:,au:,cat:,all:) - Semantic Search — server-side semantic search via the Semantic Scholar API
- Hybrid Search — arXiv keyword results enriched with Semantic Scholar citation counts
- PDF Download — download and extract full text via PyMuPDF
- Smart Caching — SQLite cache with configurable TTL (24h metadata, 30-day PDFs)
- Categories — built-in taxonomy of ~150 arXiv categories
- Graceful Degradation — semantic/hybrid fall back to keyword when Semantic Scholar is unavailable
- Lightweight — no local ML model; depends only on
mcpandpymupdf
Install
pip install arxiv-mcp-server
No model download — the server starts instantly.
Claude Code Integration
Add to ~/.claude/settings.json or .claude/settings.local.json:
{
"mcpServers": {
"arxiv": {
"command": "arxiv-mcp-server"
}
}
}
Or from a virtual environment:
{
"mcpServers": {
"arxiv": {
"command": "python",
"args": ["-m", "arxiv_mcp_server.server"]
}
}
}
Configuration
All via environment variables:
| Variable | Default | Description |
|---|---|---|
ARXIV_CACHE_DIR |
~/.arxiv-mcp-server |
Cache root (DB + PDFs) |
ARXIV_CACHE_TTL_HOURS |
24 |
Metadata cache lifetime |
ARXIV_PDF_TTL_DAYS |
30 |
PDF retention period |
ARXIV_RATE_LIMIT_SEC |
1.0 |
Min seconds between API calls |
ARXIV_REQUEST_TIMEOUT |
30 |
API request timeout (seconds) |
ARXIV_MAX_RESULTS |
50 |
Max results per search |
ARXIV_LOG_LEVEL |
INFO |
Python log level |
Tools
search_papers
Search arXiv papers.
query: string (required) — search query
max_results: int (default 10, max 50)
start: int (default 0) — pagination offset
search_mode: "keyword" | "semantic" | "hybrid" (default "hybrid")
get_paper
Get a single paper by arXiv ID.
arxiv_id: string (required) — e.g. "1706.03762" or "1706.03762v7"
get_recent
Get recent papers in a category.
category: string (default "cs.AI")
max_results: int (default 20)
list_categories
List arXiv categories.
parent: string (optional) — filter by parent, e.g. "cs"
download_pdf
Download a paper PDF and extract text.
arxiv_id: string (required)
output_dir: string (optional) — defaults to ARXIV_CACHE_DIR/pdfs
get_cached_papers
List cached papers (diagnostic). No arguments.
Development
git clone <repo-url>
cd arxiv-mcp-server
pip install -e ".[dev]"
pytest
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file arxiv_mcp_search-0.1.0.tar.gz.
File metadata
- Download URL: arxiv_mcp_search-0.1.0.tar.gz
- Upload date:
- Size: 17.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
06a2e943769f118099d22cc531cab19d356266f19de1da0a05537bce4e5bd66b
|
|
| MD5 |
76fe2556cba0c4691ea5d74fc5ebb010
|
|
| BLAKE2b-256 |
ee7d1fee692d42035215abf90f6bccdb5f53a670fccc1f5a6911b5db0d4396e1
|
File details
Details for the file arxiv_mcp_search-0.1.0-py3-none-any.whl.
File metadata
- Download URL: arxiv_mcp_search-0.1.0-py3-none-any.whl
- Upload date:
- Size: 22.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c9a22f18c8185d8c61c111c0a3db4fcc9acd45b949832a85586eff6f8e6b50a6
|
|
| MD5 |
3334c7643f7f5be16cdf58954c564acd
|
|
| BLAKE2b-256 |
4cb0b0110ddfad403c5941b39fe8275d5ef1b4a03c40229ac9d5d492c4763650
|