Skip to main content

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), or ambiguous / 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 honest downloadable=false with 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=... (optional ELSERVIER_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 with PAPER_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_pdf pops 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)

Source distribution for paper-tools-mcp 0.1.5
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)

Table of built distributions (wheels) for paper-tools-mcp 0.1.5
File Interpreter ABI Platform Actions
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 log

Release 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 log

Security 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.

Select from 2 files

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 log

A 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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page