Skip to main content

📄 paper-mcp

An MCP server built with FastMCP for paper, citation, author, and bibliography search. Run it in one command with uvx — no manual install needed.


✨ Features

Paper tools

Tool Returns
paper_get_metadata Title, authors, abstract, DOI, arXiv ID, citation count, TL;DR, OA status, fields of study
paper_get_pdf Best open-access PDF URL
paper_get_fulltext Full text plus structured pages, sections, and extracted tables
paper_get_citations Up to 100 papers that cite this one
paper_get_references Up to 100 papers this one cites
paper_search Filtered, deduplicated search across S2, OpenAlex, PubMed, and DBLP
paper_get_publication_status Venue, publisher, version of record, and preprint status
paper_get_bibtex BibTeX citation from Semantic Scholar or Crossref
paper_get_similar Related-paper recommendations
paper_batch_lookup Up to 500 paper IDs in one Semantic Scholar request
doi_get_metadata DOI metadata merged from Crossref, Semantic Scholar, and Unpaywall

Author and source tools

Tool Returns
author_search Disambiguated Semantic Scholar author matches
author_get_profile h-index, affiliations, paper and citation counts
author_get_papers A researcher's bibliography
openalex_search Broad OpenAlex work search with institutions and topics
pubmed_search PubMed biomedical article summaries
dblp_search Curated DBLP computer-science bibliography results

paper_search accepts sources, year range, venue, author, publication type, minimum citations, open-access-only, and relevance/year/citation sorting. Full text uses arXiv HTML → structured open-access PDF extraction → Lightpanda → abstract. Responses from repeated Semantic Scholar searches and batch lookups are cached in memory.


🚀 Quick Start

Run without installing (uvx)

# stdio mode — for Claude Desktop / most MCP clients
uvx paper-mcp

# SSE mode — for remote or multi-client setups
uvx paper-mcp --transport sse --port 8000

uvx downloads, installs (in an isolated env), and runs the package — zero setup.

Install permanently

uv tool install paper-mcp
paper-mcp                        # now available globally
paper-mcp --transport sse

Local development

git clone https://github.com/imnotdev25/paper-search
cd paper-search
uv sync                                 # install all deps from pyproject.toml
uv run paper-mcp                 # run directly
uv run paper-mcp --transport sse

🖥 Claude Desktop Config

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "papers": {
      "command": "uvx",
      "args": ["paper-mcp"]
    }
  }
}

No Python paths, no venv activation — uvx handles everything.


🌐 Browser Fallback (gomcp / Lightpanda)

For JS-rendered publisher pages, the server automatically starts a Lightpanda headless browser via gomcp.

One-time setup:

# Download gomcp binary from GitHub releases:
# https://github.com/lightpanda-io/gomcp/releases

# Then download the Lightpanda browser binary:
gomcp download

If gomcp is not installed, the server still works — browser-dependent paths fall back to abstract/metadata gracefully.


🏗 Architecture

Claude (LLM)
    │  MCP (stdio or SSE)
    ▼
paper-mcp  [FastMCP, Python]
    │
    ├── Semantic Scholar API  ──  metadata, citations, references
    ├── arXiv API + HTML      ──  preprint info + full text
    ├── Crossref + Unpaywall  ──  DOI metadata, BibTeX, OA PDFs
    ├── OpenAlex / PubMed / DBLP ── corpus-specific search
    └── gomcp SSE  ───────────── Lightpanda browser (JS fallback)
             │  CDP
             └── Lightpanda Browser (headless)

📦 Publishing to PyPI

# Build
uv build

# Publish (needs PyPI token)
uv publish --token $PYPI_TOKEN

Once on PyPI, anyone can run it with uvx paper-mcp.


⚙️ CLI Options

usage: paper-mcp [-h] [--transport {stdio,sse}] [--port PORT] [--host HOST]

options:
  --transport  stdio (default) or sse
  --port       SSE port (default: 8000)
  --host       SSE host (default: 127.0.0.1)

🔑 Notes

  • Set S2_API_KEY for authenticated Semantic Scholar requests.
  • Set UNPAYWALL_EMAIL to a real contact address to enable Unpaywall. Requests are skipped when it is unset; no placeholder identity is sent.
  • Optionally set OPENALEX_EMAIL for the OpenAlex polite pool.
  • PAPER_CACHE_TTL controls the in-memory cache in seconds (default 3600; 0 disables it).
  • PDF extraction is limited to open PDFs up to 25 MB and 50,000 extracted characters. Paywalled PDFs still require institutional access.

📁 Project Structure

paper-mcp/
├── pyproject.toml                  ← packaging, entry point, deps
├── README.md
├── src/
    └── paper_mcp/
        ├── __init__.py
        └── server.py               ← FastMCP tools + main()
└── tests/
    └── test_server.py              ← focused HTTP, PDF, cache, and config tests

Release files for paper-mcp 0.7.0

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-mcp 0.7.0
File Size Uploaded
paper_mcp-0.7.0.tar.gz 105.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for paper-mcp 0.7.0
File Interpreter ABI Platform
paper_mcp-0.7.0-py3-none-any.whl Python 3 none any Details

Total release size: 126.3 kB

Release files / paper_mcp-0.7.0.tar.gz

Download URL paper_mcp-0.7.0.tar.gz
Size 105.3 kB
Tags Source
SHA-256 checksum
How to use checksums
9c962ddea668e8460fbca14523c2b022086e484872ac994baf6af8b4a17c446f
BLAKE2b-256 checksum
How to use checksums
d0a404020aee3d943385716edb18f0adb5d3e6aa9b0593c26ac5bf76583dd386
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / paper_mcp-0.7.0-py3-none-any.whl

Download URL paper_mcp-0.7.0-py3-none-any.whl
Size 21.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f1c5a8aad1e8ee14876ab6e00e5a65c6a402b99c9d0232d99e2230c53578ea9c
BLAKE2b-256 checksum
How to use checksums
982c4da8f384e9c40efafd25045e5c6bdab85c9aa3767f8082ca61b22be978be
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.7.0 This release

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

0.0.1

2 release files

0.0.0

2 release files

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