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.0.0.tar.gz (94.6 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.0.0-py3-none-any.whl (3.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: paper_mcp-0.0.0.tar.gz
  • Upload date:
  • Size: 94.6 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.0.0.tar.gz
Algorithm Hash digest
SHA256 d5cb1ebe531c9c0d81891592703f678c469a7a3ec1d749cde374df5b416119a4
MD5 efc988f38f7820d058d2cb10646526da
BLAKE2b-256 460bc01a062496a283ffee03e9d92243e53ea073f427e7f43937930fb9e22f48

See more details on using hashes here.

File details

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

File metadata

  • Download URL: paper_mcp-0.0.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.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 aa84a73af654630b08dc7b4db8bedf6bd8675a66bf34ac196ed8d51aaf158ff5
MD5 5e93ad3910b05e2c768e7c21d2ec9633
BLAKE2b-256 827bf203c98e5b8c4a14f9d2e990d6f876866653d75c1e97681b654ee008e65f

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