paper-mcp
paper-mcp
Remotely-callable MCP server for academic paper search, full-text retrieval & image→LaTeX, served at https://latex-tools.online/mcp.
Three corpora behind one normalized interface:
arxiv(default) — search, metadata, and full-text (HTML / markdown / LaTeX source)semanticscholar(aliass2) — the full S2 API surface: citation graph, authors, recommendations, full-text snippets, bulk datasetsopenalex(aliasoa) — 316M all-field works: citation graph, authors with h-index, institutions, topics, influence metrics
Plus a unified search_all that fuses all three corpora, image→LaTeX OCR, and LaTeX lint + PDF→text tooling.
Tools (41)
Generic / source-agnostic (8)
Tool | Purpose |
| Unified search. Fans out to all three corpora concurrently, de-duplicates the same work (by DOI/title) and re-ranks with Reciprocal Rank Fusion. Each hit carries |
| Single-corpus search. arXiv |
| One paper's full record. S2 id accepts S2 id / |
| Papers by author, newest first. |
| Latest in a category (arXiv code or S2 field of study). |
| Common category codes. |
| FULL text (arXiv). |
| Available corpora. |
read_paper fetch chain: arxiv.org/html/{id} → ar5iv fallback (markdown/html), or arxiv.org/e-print/{id} tarball main .tex (latex). Formulas are recovered from the LaTeXML alttext invariant.
Medical / evidence-graded (1)
Tool | Purpose |
| Clinical literature search. Queries PubMed, filters by research type via Publication-Type tags and re-ranks by the evidence pyramid (meta-analysis / systematic review > RCT > cohort > ...), so real trials surface above high-cited reviews/guidelines that pure-citation ranking floats up. Open-access full text is attached from Europe PMC by PMID. If the type filter yields nothing it auto-relaxes (flagged |
Image → LaTeX (3)
Turn a formula or table image back into LaTeX (e.g. a figure cropped from a paper) without needing your own vision model. Backed by the co-located recognize service (PaddleOCR-VL / DeepSeek-OCR / texify).
Tool | Purpose |
| Formula image → LaTeX. |
| Table image → LaTeX |
| Available OCR models ( |
LaTeX tooling (3)
Companions to the LaTeX/PDF web tools at latex-tools.online — same backends, exposed over MCP.
Tool | Purpose |
| Check a LaTeX snippet for errors and return an auto-fixed version. Returns |
| PDF → clean Markdown/LaTeX text via MinerU (useful for papers with no open-access full text). |
| Fetch an |
OpenAlex (8)
Works:
get_openalex_work·get_openalex_citations·get_openalex_references·search_openalex_works(filters: year range, open-access, min-citations, institution)Authors/Institutions:
search_openalex_authors·search_openalex_institutionsAnalytics:
get_openalex_trends·list_openalex_topics
Semantic Scholar (18)
Graph:
get_paper_citations·get_paper_references·get_paper_authorsLookup:
match_paper_title·autocomplete_papersBulk:
search_papers_bulk(≤1000, sortable, token paging) ·get_papers_batchAuthors:
search_authors·get_author·get_author_papers·get_authors_batchFull-text:
search_snippets(search inside paper body)Recommend:
recommend_papers_for_paper·recommend_papers_from_examplesDatasets:
list_dataset_releases·get_dataset_release·get_dataset_download_links·get_dataset_diffs
Layout
paper_mcp/
server.py FastMCP server (tool registrations + instructions)
models.py normalized Paper model
aggregate.py cross-source fusion (dedup + Reciprocal Rank Fusion)
sources/
base.py source registry (get_source / list_sources)
arxiv.py arXiv Atom API + read_paper (HTML/markdown/latex)
semanticscholar.py Semantic Scholar full API surface
openalex.py OpenAlex REST API (works/authors/institutions/topics)
recognize.py image→LaTeX client over the co-located recognize service
latextools.py lint + PDF-extract clients over the latex-tools services
pyproject.tomlRun locally
cd paper-mcp
python -m venv .venv && . .venv/bin/activate
pip install -e .
PAPER_MCP_PORT=9400 python -m paper_mcp.server
# MCP endpoint at http://127.0.0.1:9400/mcp (JSON-RPC; a plain GET returns 406)Env
Var | Default | Notes |
|
| |
|
| |
|
| |
| — | optional; raises S2 rate limit. Set via |
|
| Direct-client JSON-RPC POST budget per IP. |
|
| Trusted reverse-proxy Worker budget per HMAC-derived connection key. Raw keys are not retained. |
|
| Shared ceiling across all trusted Worker connections. |
|
| Minimum fast-rejection cooldown after a bucket reaches its limit. |
Deployment (latex-tools.online)
Runs as
paper-mcp.serviceontencent-us(43.130.32.180), WorkingDirectory/opt/paper-mcp, loopback port 9400.nginx reverse-proxies
https://latex-tools.online/mcp→127.0.0.1:9400/mcp.Worker-aware buckets activate only when a trusted reverse proxy overwrites
X-MCP-Workerafter validating the upstream platform. Never pass through a client-supplied value.uvicorn access logging is disabled because legacy MCP clients may put connection keys and profiles in the endpoint URL. The reverse proxy must also log
$uri, not$request, for the MCP route.Secrets in
/etc/paper-mcp.env(SEMANTIC_SCHOLAR_API_KEY).Runtime systemd/nginx/env files are managed by the
tencent-usoperations backup, not by this source repository; never commit/etc/paper-mcp.env.
Update flow
This repo is the source of truth. The server runs an independent copy under /opt/paper-mcp (not auto-synced):
# edit here → push → deploy the complete canonical Python package
rsync -a --delete paper_mcp/ tencent-us:/opt/paper-mcp/paper_mcp/
ssh tencent-us 'systemctl restart paper-mcp'
ssh tencent-us 'curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:9400/mcp' # 406 = healthy (needs JSON-RPC handshake)Production parity verified on 2026-07-23: main@07f6bbe8622aa063f56ee222a40d19c5d4264048 matches all 12 deployed Python source files byte-for-byte. The older copy embedded in latex-tools-deploy/paper-mcp/ is not a deployment source.
Notes
arXiv calls are politely rate-limited + retried (
_USER_AGENT, backoff).read_papercovers ~80%+ of papers via official HTML; older scan-only papers may have no full text.Moved here from the
docsrepo on 2026-06-07; that copy is gone.
License
MIT © MCPServings. See LICENSE.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/MCPServings/paper-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server