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
uvxdownloads, 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_KEYin the environment and add it to the httpx client headers inserver.py. - Unpaywall requires a valid contact email โ update
UNPAYWALL_EMAILinserver.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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eae09a506d0dacf4bee84bbac3427aac26f05779c687bc6ff6ca9688b38d991b
|
|
| MD5 |
eca381652696ea1b933a95fa9a1da37b
|
|
| BLAKE2b-256 |
41ac6d446cbb925951134fc192d788cfd0db53bbda8765222f9ff6ffd5ee1767
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ab1a9c14ab280fb4057195352b0d4ae2e8fa2a0ae0cc14550ac152b84b743486
|
|
| MD5 |
9fe5f706662b17fc992da99b017fc24f
|
|
| BLAKE2b-256 |
63c51a041553c42883c36114a7a024534fc3ebc7e9c4675a3911cafa4e169c36
|