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/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-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_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.3.0.tar.gz (95.0 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.3.0-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: paper_mcp-0.3.0.tar.gz
  • Upload date:
  • Size: 95.0 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.3.0.tar.gz
Algorithm Hash digest
SHA256 49a688e1ce8b20af4a0798b0a9a16a800fffc753533b649ad05f26df95c6df2d
MD5 6c415617060e4d85a4741b3db7c87986
BLAKE2b-256 8ec8b487fcff157dae1ca068cb1d6b5f9ec84a8fb3c577f5fc1bc834f898c2e3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: paper_mcp-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 11.7 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.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ef1a95e2f5cd5feca1993953f8025fbc86235f64255545cb96a98afc52058f13
MD5 42361c804efefbc876467c68f0718611
BLAKE2b-256 ec95ebf4a4afccc0d9e9b0802673aad08fe0324b877b4ebf077ac2b04c5c6bff

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