Skip to main content

MCP server that retrieves academic papers by title โ€” metadata, PDF, full text, citations, references.

Project description

๐Ÿ“„ paper-search-mcp

An MCP server built with FastMCP that lets Claude (or any LLM) retrieve academic papers by title.
Run it in one command with uvx โ€” no manual install needed.


โœจ Features

5 tools, all taking paper_title as the only argument:

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 plain text (up to 50,000 chars)
paper_get_citations Up to 100 papers that cite this one
paper_get_references Up to 100 papers this one cites

Data sources (priority order): Semantic Scholar โ†’ arXiv โ†’ Unpaywall โ†’ Lightpanda browser via gomcp


๐Ÿš€ Quick Start

Run without installing (uvx)

# stdio mode โ€” for Claude Desktop / most MCP clients
uvx paper-search-mcp

# SSE mode โ€” for remote or multi-client setups
uvx paper-search-mcp --transport sse --port 8000

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

Install permanently

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

Local development

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

๐Ÿ–ฅ Claude Desktop Config

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "papers": {
      "command": "uvx",
      "args": ["paper-search-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-search-mcp  [FastMCP, Python]
    โ”‚
    โ”œโ”€โ”€ Semantic Scholar API  โ”€โ”€  metadata, citations, references
    โ”œโ”€โ”€ arXiv API + HTML      โ”€โ”€  preprint info + full text
    โ”œโ”€โ”€ Unpaywall API         โ”€โ”€  open-access PDF by DOI
    โ””โ”€โ”€ 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-search-mcp.


โš™๏ธ CLI Options

usage: paper-search-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

  • Semantic Scholar free tier: ~100 req/5 min. For higher throughput, set S2_API_KEY in the environment and add it to the httpx client headers in server.py.
  • Unpaywall requires a valid contact email โ€” update UNPAYWALL_EMAIL in server.py.
  • Full text is only available for arXiv papers (HTML renderer) and JS-rendered pages reachable via gomcp. Paywalled PDFs require institutional access.

๐Ÿ“ Project Structure

paper-search-mcp/
โ”œโ”€โ”€ pyproject.toml                  โ† packaging, entry point, deps
โ”œโ”€โ”€ README.md
โ””โ”€โ”€ src/
    โ””โ”€โ”€ paper_search_mcp/
        โ”œโ”€โ”€ __init__.py
        โ””โ”€โ”€ server.py               โ† all 5 FastMCP tools + main()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

paper_mcp-0.1.0.tar.gz (94.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

paper_mcp-0.1.0-py3-none-any.whl (3.3 kB view details)

Uploaded Python 3

File details

Details for the file paper_mcp-0.1.0.tar.gz.

File metadata

  • Download URL: paper_mcp-0.1.0.tar.gz
  • Upload date:
  • Size: 94.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","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}

File hashes

Hashes for paper_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 eae09a506d0dacf4bee84bbac3427aac26f05779c687bc6ff6ca9688b38d991b
MD5 eca381652696ea1b933a95fa9a1da37b
BLAKE2b-256 41ac6d446cbb925951134fc192d788cfd0db53bbda8765222f9ff6ffd5ee1767

See more details on using hashes here.

File details

Details for the file paper_mcp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: paper_mcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 3.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","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}

File hashes

Hashes for paper_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ab1a9c14ab280fb4057195352b0d4ae2e8fa2a0ae0cc14550ac152b84b743486
MD5 9fe5f706662b17fc992da99b017fc24f
BLAKE2b-256 63c51a041553c42883c36114a7a024534fc3ebc7e9c4675a3911cafa4e169c36

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page