arXiv MCP for Cursor
Small MCP server in Python that connects Cursor (or any MCP client) to the public arXiv API — no API key required.
Cursor → MCP → arXiv MCP Server → arXiv API
- GitHub: https://github.com/easimawen/mcp-arxiv
- PyPI: https://pypi.org/project/mcp-arxiv/ (after the first publish)
The PyPI name
arxiv-mcpis already taken by another project. This package is published asmcp-arxiv.
Tools
| Tool | Purpose |
|---|---|
search_papers |
Search arXiv; return structured metadata |
get_paper |
Fetch one paper by arXiv ID |
get_recent_papers |
Recent papers in a category (cs.AI, cs.LG, …) |
Design docs: RFC-0001 · architecture
Requirements
- Python 3.14+
- uv (recommended)
Quick usage (after PyPI publish)
{
"mcpServers": {
"arxiv": {
"command": "uvx",
"args": ["mcp-arxiv"]
}
}
}
Install from the repository
git clone https://github.com/easimawen/mcp-arxiv.git
cd mcp-arxiv
uv sync
Cursor MCP config (use the absolute path to your clone):
{
"mcpServers": {
"arxiv": {
"command": "uv",
"args": ["--directory", "/ABSOLUTE/PATH/TO/mcp-arxiv", "run", "mcp-arxiv"]
}
}
}
CLI smoke test
uv run python -c "
import asyncio
from arxiv_mcp.arxiv_client import ArxivClient
async def main():
async with ArxivClient() as c:
p = await c.get_paper('2510.16079')
print(p.title, p.url)
asyncio.run(main())
"
Development
uv sync --group dev
uv run pytest
uv run mcp-arxiv
Publish (maintainers)
- Create a PyPI account if needed.
- Add a pending trusted publisher: PyPI → Publishing
- Owner:
easimawen - Repository:
mcp-arxiv - Workflow:
publish.yml - Environment:
pypi - Project name:
mcp-arxiv
- Owner:
- On GitHub: Settings → Environments → create
pypi(optional: require reviewers). - Commit + push, then create a GitHub Release
v0.1.0(tagv0.1.0). - The workflow
.github/workflows/publish.ymlpublishes via OIDC (no long-lived token).
Local build check:
uv build
# manual publish (fallback):
# export UV_PUBLISH_TOKEN=pypi-...
# uv publish
See also docs/publishing.md.
License
MIT — see LICENSE.
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 mcp_arxiv-0.1.0.tar.gz.
File metadata
- Download URL: mcp_arxiv-0.1.0.tar.gz
- Upload date:
- Size: 5.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f8fce529d25f8082843254c36f0dc305f0308ad4eef279045ced5d8fd2713ef6
|
|
| MD5 |
855042039ada5a69ad2b812f710e4993
|
|
| BLAKE2b-256 |
b1c2a547d4983d147acc4d0249ff4e9b088d1b46e2b68fa0700216a35617e64e
|
File details
Details for the file mcp_arxiv-0.1.0-py3-none-any.whl.
File metadata
- Download URL: mcp_arxiv-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bd7e0f802ca7b8c256a02b7e105c475350ff52180b20c1d4e5a87e8c34e0a8e0
|
|
| MD5 |
031f3486929f40682271c8823cad1dbe
|
|
| BLAKE2b-256 |
97371bcc246d79b47484c244c33b4fdf7fd94ce42b3a8642b8e340dd18da7a4c
|