ARES MCP
Local Model Context Protocol server for academic literature search and writing. It talks to open catalogs (OpenAlex, arXiv, Crossref), downloads open-access PDFs (PDF files only), extracts IMRaD sections on demand, and appends BibTeX — designed to run next to Cursor or any MCP host.
License: MIT. Free to use locally. Contributions: CONTRIBUTING.md.
ARES does not bypass publisher paywalls. If no OA PDF exists, tools return
no_open_pdfinstead of scraping HTML.
This project is a literature helper, not a PRISMA screening/audit
workbench. It is also not the Czech business-registry MCP
(ares-mcp-server).
Install (PyPI)
Python 3.11+. uv is recommended.
Cursor / MCP host (uvx downloads the published wheel, no clone):
{
"mcpServers": {
"ares": {
"command": "uvx",
"args": ["ares-mcp"]
}
}
}
Optional identity for the OpenAlex / Unpaywall polite pool (still no .env):
{
"mcpServers": {
"ares": {
"command": "uvx",
"args": ["ares-mcp", "--mailto", "you@university.edu"]
}
}
}
Or install into an environment:
pip install ares-mcp
# or: uv tool install ares-mcp
ares-mcp --mailto you@university.edu
A .env file is not required. Contact email is resolved in this order:
ares-mcp --mailto you@university.eduARES_MAILTOin the process environment (Cursormcp.jsonenvblock)- Optional cwd
.env(ARES_MAILTO=...) — local checkouts only git config user.email- Placeholder
ares-mcp@localhost(server still starts)
After publish, confirm the package at pypi.org/project/ares-mcp.
Tools
| Tool | Purpose |
|---|---|
search_papers |
Query OpenAlex + arXiv; sort=cited_by or relevance; optional DOI/arXiv lookup |
download_and_parse_paper |
DOI or arXiv id → PDF only in papers/ |
get_bibtex |
Crossref BibTeX → append references.bib (no duplicates) |
extract_sections |
Heuristic IMRaD headings from a local PDF |
list_local_papers |
Inventory PDFs under papers/ (or another dir) |
screen_papers_for_rqs |
Heuristic include/maybe/exclude of local PDFs vs research questions + snippets |
query_local_papers |
Ranked excerpts from the local corpus for a free-form question |
Typical agent flow: search (sort=cited_by for famous papers) → download an OA
hit → extract Abstract/Methods → get_bibtex. For RQ screening over downloads:
list_local_papers → screen_papers_for_rqs (host agent narrates justifications
from the evidence pack; ARES does not call an external LLM).
Install (development)
git clone https://github.com/benetche/ares-mcp.git
cd ares-mcp
uv sync
Run tests:
uv run pytest
uv run ruff check src tests
Live API checks (optional):
uv run pytest -m integration
Configure Cursor (local checkout)
Copy .cursor/mcp.json and replace the --project path
with your clone. Email is optional; git user.email is used when unset.
Recommended — uv run:
{
"mcpServers": {
"ares": {
"command": "uv",
"args": [
"run",
"--project",
"/absolute/path/to/ares-mcp",
"ares-mcp"
]
}
}
}
venv Python:
{
"mcpServers": {
"ares": {
"command": "/absolute/path/to/ares-mcp/.venv/bin/python",
"args": ["-m", "ares_mcp"]
}
}
}
On Windows, use .venv/Scripts/python.exe instead of .venv/bin/python.
uvx from a local checkout (no PyPI install required):
{
"mcpServers": {
"ares": {
"command": "uvx",
"args": ["--from", "/absolute/path/to/ares-mcp", "ares-mcp"]
}
}
}
Reload MCP servers in Cursor, then ask: “Search open-access papers on graph neural networks since 2022.”
Inspector (outside Cursor):
uv run fastmcp dev src/ares_mcp/server.py
Environment
| Variable / flag | Default | Meaning |
|---|---|---|
--mailto / ARES_MAILTO |
git user.email, else ares-mcp@localhost |
Contact in User-Agent / OpenAlex mailto / Unpaywall email |
ARES_METADATA_TIMEOUT_S |
20 |
Metadata HTTP timeout |
ARES_PDF_TIMEOUT_S |
60 |
PDF download timeout |
ARES_MAX_PDF_BYTES |
52428800 |
Max PDF size (~50 MiB) |
Writes are jailed to the server current working directory (the project Cursor opened). Path traversal is rejected. PDF candidate URLs that point at loopback or private IPs are rejected.
API notes
- OpenAlex:
GET /workswithsearch+filter. Abstracts are stored as inverted indexes and reconstructed locally. Download uses alllocationswith apdf_url, plus arXiv/PMC ids when present. - Unpaywall:
GET /v2/{doi}for legal OA copies (preprints, accepted manuscripts, repositories). This is how many IEEE/Elsevier papers become downloadable without touching the paywall HTML. - arXiv: Atom API at
export.arxiv.org. All hits are OA. - Crossref: DOI content negotiation
Accept: application/x-bibtex. - Identify your process with
--mailtoorARES_MAILTOwhen you can. Do not hammer the APIs; each tool call is a handful of requests with one retry on 429/5xx.
If every OA candidate 403s or returns HTML, the tool reports download_failed
or no_open_pdf. Pass an arXiv id when you know a preprint exists. ARES
will not scrape publisher HTML.
License alternative
MIT is the project license. Apache-2.0 may be considered later if a patent grant is required; discuss that in an issue before relicensing.
Status
0.2.0. Releases are built in CI and uploaded to PyPI with
Trusted Publishing (OIDC, no
long-lived API tokens). After a GitHub Release tag v0.2.0 (and matching
publisher config on PyPI), Cursor can run uvx ares-mcp with no .env.
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 ares_mcp-0.2.0.tar.gz.
File metadata
- Download URL: ares_mcp-0.2.0.tar.gz
- Upload date:
- Size: 162.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","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 |
3b812c30110ee19adac55decf82850cdbadde8a3e35d890c10da3204618cfed6
|
|
| MD5 |
7c0689119713f5294052dfcae765a297
|
|
| BLAKE2b-256 |
ce3d8aafa4bf6ff1788f0f5e393c07703dec42fc75da787cc3064099efed16f9
|
File details
Details for the file ares_mcp-0.2.0-py3-none-any.whl.
File metadata
- Download URL: ares_mcp-0.2.0-py3-none-any.whl
- Upload date:
- Size: 51.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","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 |
6aef2589b08766c3a396ec02f8d66d075fa9349fcbd7e7aa595c9241bf253880
|
|
| MD5 |
d49f78a9770ddad802625984db0e7392
|
|
| BLAKE2b-256 |
23e33bfd0d0a6923a2996c1e3f52ab8c652eb98f8d0a5e116c4017e48a102f0e
|