paper-tools (MCP)
A standalone MCP server that turns "find a paper" into a deterministic capability. Two tools:
resolve_paper(query)— any input (DOI, arXiv id/URL, SSRN, a bare title, a messy citation string) → decide whether it points to one real paper and return that paper's unique identifier (DOI, else OpenAlex Work ID), orambiguous/not_found. Never guesses a binding.get_pdf(ids)— that identifier → actually downloads the open-access PDF, trying arXiv → Unpaywall → OpenAlex OA/green/SSRN. Returns the saved path, or an honestdownloadable=falsewith human follow-up leads (SSRN, OA Button) when no open-access copy exists.
Built by an unattended Ralph loop from GOAL.md. Status and
remaining work live in PROGRESS.md. This project is fully
independent — it has no dependency on any other repository.
Setup
conda env create -f environment.yml
conda activate paper-tools-mcp
pytest -q # offline golden-set suite
pytest -q -m live # live smoke (hits real APIs)
Institutional access (your own subscription)
When a paper has no open-access copy, get_pdf tries the caller's own subscription
(disable with institutional=False). Two legitimate mechanisms:
-
Elsevier full-text API (covers
10.1016/...): export your own key —export ELSERVIER_API_KEY=...(optionalELSERVIER_INSTTOKEN=...). Uses the Elsevier Article Retrieval API, entitled via your institutional network/token. -
Publisher fetch (curl_cffi): follows the DOI to the publisher and grabs the PDF; works for publishers that grant access by IP when run on campus/VPN.
-
Your Chrome login cookies (curl_cffi): the publisher fetch reuses your existing Chrome session via
browser_cookie3— stay logged into the publishers in Chrome. Works for publishers without a JS bot-wall. Disable withPAPER_TOOLS_NO_BROWSER_COOKIES=1. -
Strong layer (ON by default): one-click institutional fetch for publishers behind a Cloudflare human-check + SSO (SAGE → POMS/JMR/JM, OUP → JCR, INFORMS). Runs whenever a desktop display is present (chromium auto-installs on first use); opt out with
PAPER_TOOLS_NONINTERACTIVE=1(e.g. on headless servers, where it degrades to leads). When the automated cascade can't get a gated paper,get_pdfpops ONE browser window — already seeded with your Chrome login cookies — you clear the one-time "are you human" check (and sign in if needed) once per publisher, and the tool downloads that paper and reuses the session for every later paper from the same publisher. The human check is solved by you (never auto-defeated); everything else is automatic.
Install = environment solved (no manual setup)
Installing the package pulls all Python dependencies; the chromium browser for
the strong layer auto-installs on first use — no separate conda/pip/
patchright install steps.
Zero-setup registration (uv creates an isolated env and installs on first run):
// .mcp.json
{
"mcpServers": {
"paper-tools": {
"command": "uvx",
"args": ["--from", "git+https://github.com/<you>/paper-tools-mcp", "paper-tools-mcp"],
"env": { "PAPER_TOOLS_INTERACTIVE": "1", "ELSERVIER_API_KEY": "<optional>" }
}
}
}
Or with pip: pip install git+https://github.com/<you>/paper-tools-mcp then use
"command": "paper-tools-mcp". (A desktop display is required only for the strong
interactive layer; the OA/API layers run anywhere.)
Cross-platform: Linux, macOS, and Windows. The OA/API layers run anywhere. The
strong interactive layer uses your local Chrome cookies (browser_cookie3 decrypts
per-OS: Linux keyring / macOS Keychain / Windows DPAPI) and pops a desktop window, so
it needs a logged-in Chrome + a desktop session. Launch flags are auto-selected per
OS (--no-sandbox only on Linux). Note: very recent Chrome on Windows uses app-bound
cookie encryption that browser_cookie3 may not read — sign in once in the popped
window if cookie reuse misses.
Register with Claude Code (dev / conda)
// .mcp.json / Claude Code MCP config
{
"mcpServers": {
"paper-tools": {
"command": "conda",
"args": ["run", "-n", "paper-tools-mcp", "python", "-m", "paper_tools.server"]
}
}
}
Metadata
Release files for paper-tools-mcp 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| paper_tools_mcp-0.1.5.tar.gz | 23.2 kB | With provenance | Details for paper_tools_mcp-0.1.5.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| paper_tools_mcp-0.1.5-py3-none-any.whl | Python 3 | none | any | Details for paper_tools_mcp-0.1.5-py3-none-any.whl |
Total release size: 43.8 kB
Release files / paper_tools_mcp-0.1.5.tar.gz
| Download URL | paper_tools_mcp-0.1.5.tar.gz |
|---|---|
| Size | 23.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c16812090d4f3219dade1f2bfa61675523755997363004e66dbbd328f9ef026f
|
|
BLAKE2b-256 checksum How to use checksums |
c8d971f8a47902e24bff245f48baf78bf6de75f3ef54ce86674b5ae142995849
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 27, 2026.
Transparency logRelease files / paper_tools_mcp-0.1.5-py3-none-any.whl
| Download URL | paper_tools_mcp-0.1.5-py3-none-any.whl |
|---|---|
| Size | 20.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
26f2b57e375be5dbe953d3d9b08d8041864c90043ec25781dbfa0bcc1ca3bbe2
|
|
BLAKE2b-256 checksum How to use checksums |
7515aa371609808037a731fa45978416d59dd3361d72013f5d077c8c58a57d66
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 27, 2026.
Transparency logSecurity for paper-tools-mcp 0.1.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for paper_tools_mcp-0.1.5.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 27, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.