Paper Mcp

io.github.MCPServingsPublished by GitHub account MCPServingsv0.5.0Updated Nov 2, 2026

Search arXiv/Semantic Scholar/OpenAlex + medical evidence (PubMed/Europe PMC) + LaTeX/PDF tools.

VerifiedStreamable HTTPWeb executableWeb Search & ScrapingKnowledge & MemoryAI & ML

Overview

AI-generated overview

Remote MCP server for academic paper search across arXiv, Semantic Scholar and OpenAlex, plus medical literature search, full-text reading and LaTeX/PDF tools.

What you can do
  • Search papers across arXiv, Semantic Scholar and OpenAlex, or fuse all three with de-duplication and re-ranking
  • Search evidence-graded medical literature from PubMed and Europe PMC, filtered by study type
  • Fetch paper records, authors, citations, references, recommendations and full-text snippets
  • Read arXiv full text as markdown, HTML or original LaTeX source
  • Convert formula or table images to LaTeX and lint LaTeX snippets
  • Extract PDFs to Markdown/LaTeX text and browse Semantic Scholar dataset releases
When to use it
Useful when an assistant needs to find, read or cite academic literature, check citation graphs and author metrics, or turn paper figures and PDFs into LaTeX-ready text. Also fits clinical evidence lookups where study type matters.
Requirements
A remote MCP endpoint at latex-tools.online over streamable HTTP; no account or key is declared. Optionally a Semantic Scholar API key for higher rate limits and dataset download links. Self-hosting needs Python and the listed environment variables.
Before you install
Image and PDF inputs given by URL are downloaded server-side, and base64 uploads are sent to the operator's OCR and PDF services, so avoid confidential documents. Dataset download-link tools need an API key. Requests are rate-limited per IP. Writing actions are limited to server-side job creation and caching.

Installation

In SourceWeft

  1. Open Paper Mcp in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.MCPServings%2Fpaper-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "paper": {
      "type": "http",
      "url": "https://latex-tools.online/mcp"
    }
  }
}

README

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 (alias s2) — the full S2 API surface: citation graph, authors, recommendations, full-text snippets, bulk datasets
  • openalex (alias oa) — 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)

ToolPurpose
search_all(query, max_results=10, sources='arxiv,semanticscholar,openalex')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 sources (who found it) + an ids map for follow-up calls. Prefer this for broad lookups.
search_papers(query, source='arxiv', max_results=10, sort_by='relevance')Single-corpus search. arXiv query accepts plain text or field syntax (ti: au: cat:cs.CL abs: + AND/OR).
get_paper(paper_id, source='arxiv')One paper's full record. S2 id accepts S2 id / DOI: / ARXIV: / CorpusId:.
search_by_author(author, source='arxiv')Papers by author, newest first.
list_recent(category, source='arxiv')Latest in a category (arXiv code or S2 field of study).
list_categories(source='arxiv')Common category codes.
read_paper(paper_id, format='markdown')FULL text (arXiv). markdown = body with formulas as $LaTeX$; html = raw LaTeXML page; latex = original manuscript .tex source.
list_paper_sources()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)

ToolPurpose
search_medical(query, study_types='rct,meta-analysis,systematic-review', year_from=0, max_results=10, fetch_fulltext=True)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 filter_relaxed). query is English keyword/boolean text — do NL/multilingual query understanding upstream. Backed by NCBI E-utilities + Europe PMC (both free, no key required).

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).

ToolPurpose
recognize_formula(image_url=... or image_base64=..., model='deepseek-ocr')Formula image → LaTeX. image_url is downloaded server-side (with SSRF guards). Returns {latex, model, elapsed_ms}.
recognize_table(image_url=... or image_base64=..., model='deepseek-ocr')Table image → LaTeX tabular.
list_ocr_models()Available OCR models (deepseek-ocr, paddleocr-vl, texify).

LaTeX tooling (3)

Companions to the LaTeX/PDF web tools at latex-tools.online — same backends, exposed over MCP.

ToolPurpose
lint_latex(code)Check a LaTeX snippet for errors and return an auto-fixed version. Returns {errors, fixed_code, summary_en, summary_zh, elapsed_ms}.
extract_pdf(pdf_url=... or pdf_base64=..., formula=True, table=True)PDF → clean Markdown/LaTeX text via MinerU (useful for papers with no open-access full text). pdf_url is downloaded server-side (SSRF-guarded). Content-addressed + cached: a recently-seen or small PDF returns content in one call; a fresh PDF (MinerU is GPU-heavy, minutes) returns status='running' + a task_id.
extract_pdf_result(task_id)Fetch an extract_pdf job by task_id. Returns content once status='done'; while 'running', content is null — call again shortly.

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_institutions
  • Analytics: get_openalex_trends · list_openalex_topics

Semantic Scholar (18)

  • Graph: get_paper_citations · get_paper_references · get_paper_authors
  • Lookup: match_paper_title · autocomplete_papers
  • Bulk: search_papers_bulk (≤1000, sortable, token paging) · get_papers_batch
  • Authors: search_authors · get_author · get_author_papers · get_authors_batch
  • Full-text: search_snippets (search inside paper body)
  • Recommend: recommend_papers_for_paper · recommend_papers_from_examples
  • Datasets: 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.online servicespyproject.toml

Run locally

bash
cd paper-mcppython -m venv .venv && . .venv/bin/activatepip 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

VarDefaultNotes
PAPER_MCP_HOST127.0.0.1
PAPER_MCP_PORT9400
PAPER_MCP_PATH/mcp
SEMANTIC_SCHOLAR_API_KEY—optional; raises S2 rate limit.
MCP_MAX_PER_HOUR300Direct-client JSON-RPC POST budget per IP.
MCP_WORKER_MAX_PER_HOUR300Trusted reverse-proxy Worker budget per HMAC-derived connection key. Raw keys are not retained.
MCP_WORKER_SHARED_MAX_PER_HOUR2400Shared ceiling across all trusted Worker connections.
MCP_RATE_COOLDOWN_SEC300Minimum fast-rejection cooldown after a bucket reaches its limit.

Notes

  • arXiv calls are politely rate-limited + retried (_USER_AGENT, backoff).
  • read_paper covers ~80%+ of papers via official HTML; older scan-only papers may have no full text.
  • Moved here from the docs repo on 2026-06-07; that copy is gone.

License

MIT © MCPServings. See LICENSE.

Source: README.md at commit c6c8290

Tools

41

search_papers

Search academic papers. Returns normalized hits with a short abstract preview; call get_paper for the full record.

Parametersqueryrequiredstartsourcesort_bymax_results

search_all

Aggregated search across arXiv, Semantic Scholar and OpenAlex at once. Fans out concurrently, de-duplicates the same work across corpora (by DOI or title) and re-ranks with Reciprocal Rank Fusion, so papers found by several sources rank highest. Each hit lists which `sources` found it and an `ids` map ({source: id}) you can pass to get_paper / read_paper / the citation tools. Prefer this over search_papers for a broad lookup.

Parametersqueryrequiredsourcesper_sourcemax_results

search_medical

Evidence-graded MEDICAL literature search (PubMed + Europe PMC). Unlike search_all (generic, ranks high-cited reviews/guidelines above trials), this filters by research type via PubMed Publication-Type tags and re-ranks by the evidence pyramid (meta-analysis / systematic review > RCT > cohort > ...), so the actual clinical trials surface first. Open-access full text is pulled from Europe PMC by PMID. `query` should be English keyword/boolean text (PubMed maps it); do natural-language/multilingual understanding upstream. Returns hits with pmid/doi/study_type/evidence_level/citations/abstract and, when open-access, fulltext.

Parametersqueryrequiredyear_frommax_resultsstudy_typesfetch_fulltext

get_paper

Fetch one paper by id, with full abstract and PDF link.

Parameterssourcepaper_idrequired

search_by_author

Find papers by a specific author, newest first.

Parametersstartauthorrequiredsourcemax_results

list_recent

List the latest papers in a subject category, newest first.

Parametersstartsourcecategoryrequiredmax_results

list_categories

List common subject category codes for filtering/recent.

Parameterssource

read_paper

Read a paper's full text. format='markdown' (default, body with formulas as $LaTeX$), 'html' (raw LaTeXML HTML), or 'latex' (the original LaTeX manuscript from the e-print source). arXiv only; id like 2401.01234.

Parametersformatsourcepaper_idrequired

list_paper_sources

List available paper corpora.

Takes no parameters.

recognize_formula

Recognize a math formula from an image and return LaTeX. Provide image_url (downloaded server-side) OR image_base64. model: deepseek-ocr (default), paddleocr-vl, or texify. Returns {latex, model, elapsed_ms}.

Parametersmodelimage_urlimage_base64

recognize_table

Recognize a table from an image and return LaTeX tabular code. Provide image_url OR image_base64. model: deepseek-ocr (default), paddleocr-vl, or texify. Returns {latex, model, elapsed_ms}.

Parametersmodelimage_urlimage_base64

list_ocr_models

List the OCR models available for recognize_formula / recognize_table.

Takes no parameters.

lint_latex

Lint a LaTeX snippet: report errors and return an auto-fixed version. Input `code` (the LaTeX source). Returns {errors, fixed_code, summary_en, summary_zh, elapsed_ms}.

Parameterscoderequired

extract_pdf

Extract a PDF to clean Markdown/LaTeX text via MinerU (great for papers behind no open-access full text — give the user's PDF and get readable text back). Provide pdf_url (downloaded server-side, SSRF-guarded) OR pdf_base64. formula/table toggle math/table reconstruction. Returns {task_id, status, cached, content, chars}: a recently-seen (cached) or small PDF comes back with `content` in one call; a fresh PDF (MinerU is GPU-heavy, minutes) returns status='running' + a task_id — then call extract_pdf_result(task_id) to fetch the text.

Parameterstableformulapdf_urlpdf_base64

extract_pdf_result

Fetch the result of an extract_pdf job by task_id. Returns {task_id, status, content, chars}: `content` is the extracted text once status='done'; while still 'running' content is null — call again shortly. Results expire server-side, so fetch reasonably soon.

Parameterstask_idrequired

get_paper_citations

Semantic Scholar: papers that CITE this one (forward citation graph). id accepts S2 id / DOI: / ARXIV: / CorpusId:.

Parametersstartpaper_idrequiredmax_results

get_paper_references

Semantic Scholar: papers this one REFERENCES (its bibliography). id accepts S2 id / DOI: / ARXIV: / CorpusId:.

Parametersstartpaper_idrequiredmax_results

get_paper_authors

Semantic Scholar: the authors of a paper (with h-index, paper/citation counts).

Parametersstartpaper_idrequiredmax_results

match_paper_title

Semantic Scholar: find the single paper whose title best matches the given text (exact-match lookup).

Parameterstitlerequired

autocomplete_papers

Semantic Scholar: autocomplete paper titles for a partial query (fast type-ahead).

Parametersqueryrequired

search_papers_bulk

Semantic Scholar: bulk paper search (up to 1000 hits, sortable e.g. 'citationCount:desc' or 'publicationDate:desc', with a continuation token). Filters: fields_of_study, year (e.g. '2020-2024'), venue, publication_types, open_access_pdf.

Parameterssortyearqueryrequiredtokenvenuemax_resultsfields_of_studyopen_access_pdfpublication_types

get_papers_batch

Semantic Scholar: fetch many papers at once by id (S2/DOI:/ARXIV:/CorpusId:), up to ~500 per call.

Parametersidsrequired

search_authors

Semantic Scholar: search for authors by name; returns profiles with h-index and paper/citation counts.

Parametersqueryrequiredstartmax_results

get_author

Semantic Scholar: a single author's profile by id.

Parametersauthor_idrequired

get_author_papers

Semantic Scholar: all papers by a given author id, newest first.

Parametersstartauthor_idrequiredmax_results

get_authors_batch

Semantic Scholar: fetch many authors at once by id.

Parametersidsrequired

search_snippets

Semantic Scholar: search INSIDE paper full text and return matching text snippets (not just titles/abstracts).

Parametersqueryrequiredmax_results

recommend_papers_for_paper

Semantic Scholar: recommend papers similar to one paper. pool='recent' (last open corpus) or 'all-cs' (all of CS). If the 'recent' pool yields nothing (common for older papers), it automatically retries the 'all-cs' pool.

Parameterspoolpaper_idrequiredmax_results

recommend_papers_from_examples

Semantic Scholar: recommend papers from positive (and optional negative) example paper ids.

Parametersmax_resultsnegative_idspositive_idsrequired

list_dataset_releases

Semantic Scholar Datasets: list all available release ids (dated snapshots of the full corpus).

Takes no parameters.

get_dataset_release

Semantic Scholar Datasets: which datasets a release contains (papers, abstracts, citations, embeddings, s2orc, tldrs…). release_id defaults to 'latest'.

Parametersrelease_id

get_dataset_diffs

Semantic Scholar Datasets: incremental diff (added/updated/deleted) for a dataset between two releases. Needs the key.

Parametersend_releasedataset_namerequiredstart_releaserequired

get_openalex_work

OpenAlex: fetch one work's full record (316M-work, all-field corpus). id accepts OpenAlex Wxxxx, a DOI, or an arXiv id.

Parameterswork_idrequired

get_openalex_citations

OpenAlex: papers that CITE this work (forward citation graph), most-cited first.

Parametersstartwork_idrequiredmax_results

get_openalex_references

OpenAlex: the works this one REFERENCES (its bibliography).

Parameterswork_idrequiredmax_results

search_openalex_authors

OpenAlex: search authors; returns profiles with h-index, i10-index, works/citation counts and institutions.

Parametersqueryrequiredstartmax_results

search_openalex_institutions

OpenAlex: search institutions (universities, labs) with ROR id, country, works/citation counts.

Parametersqueryrequiredmax_results

search_openalex_works

OpenAlex: advanced filtered work search. Filters: from_year, to_year, is_oa (open access only), min_citations, institution_id. sort_by: relevance|newest|cited.

Parametersis_oaquerysort_byto_yearfrom_yearmax_resultsmin_citationsinstitution_id

list_openalex_topics

OpenAlex: search the topic taxonomy (~4500 topics) to find the right subject term for filtering or recent-work queries.

Parametersqueryrequiredmax_results

Version history

1
  1. v0.5.0LatestSep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts