mcpservings avatar

Paper Mcp

mcpservings/paper-mcp

Three academic search engines behind one MCP interface. You get arXiv with full-text retrieval in markdown, HTML, or raw LaTeX source; Semantic Scholar's citation graph, author lookup, and recommendations; and OpenAlex's 316M cross-discipline catalog with institution and topic filters. The unified search_all tool fans out to all three, deduplicates by DOI, and re-ranks with reciprocal rank fusion. Bonus: image to LaTeX OCR for turning formula or table screenshots back into source code, backed by DeepSeek-OCR and texify models. Reach for this when you need programmatic paper discovery plus the actual manuscript text, not just metadata. Hosted at latex-tools.online or run locally with FastMCP.

GitHub stars
1
tools
41
transport
HTTP
last updated
Jun 17, 2026

Install

From registry metadata
$ npx add-mcp https://latex-tools.online/mcp --name paper-mcp

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http paper-mcp https://latex-tools.online/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 41 tools

Verified live against the running server on Nov 6, 2026.

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

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

Parameters* required
max_resultsinteger
default: 10
query*string
sort_bystring
default: relevance
sourcestring
default: arxiv
startinteger
default: 0
search_allAggregated 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`...4 params

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

Parameters* required
max_resultsinteger
default: 10
per_sourceinteger
default: 0
query*string
sourcesstring
default: arxiv,semanticscholar,openalex
search_medicalEvidence-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 revie...5 params

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

Parameters* required
fetch_fulltextboolean
default: true
max_resultsinteger
default: 10
query*string
study_typesstring
default: rct,meta-analysis,systematic-review
year_frominteger
default: 0
get_paperFetch one paper by id, with full abstract and PDF link.2 params

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

Parameters* required
paper_id*string
sourcestring
default: arxiv
search_by_authorFind papers by a specific author, newest first.4 params

Find papers by a specific author, newest first.

Parameters* required
author*string
max_resultsinteger
default: 10
sourcestring
default: arxiv
startinteger
default: 0
list_recentList the latest papers in a subject category, newest first.4 params

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

Parameters* required
category*string
max_resultsinteger
default: 10
sourcestring
default: arxiv
startinteger
default: 0
list_categoriesList common subject category codes for filtering/recent.1 params

List common subject category codes for filtering/recent.

Parameters* required
sourcestring
default: arxiv
read_paperRead 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.3 params

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.

Parameters* required
formatstring
default: markdown
paper_id*string
sourcestring
default: arxiv
list_paper_sourcesList available paper corpora.

List available paper corpora.

No parameters. Call it with no arguments.

recognize_formulaRecognize 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}.3 params

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

Parameters* required
image_base64string
default:
image_urlstring
default:
modelstring
default: deepseek-ocr
recognize_tableRecognize 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}.3 params

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

Parameters* required
image_base64string
default:
image_urlstring
default:
modelstring
default: deepseek-ocr
list_ocr_modelsList the OCR models available for recognize_formula / recognize_table.

List the OCR models available for recognize_formula / recognize_table.

No parameters. Call it with no arguments.

lint_latexLint 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}.1 params

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

Parameters* required
code*string
extract_pdfExtract 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. Retu...4 params

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

Parameters* required
formulaboolean
default: true
pdf_base64string
default:
pdf_urlstring
default:
tableboolean
default: true
extract_pdf_resultFetch 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.1 params

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.

Parameters* required
task_id*string
get_paper_citationsSemantic Scholar: papers that CITE this one (forward citation graph). id accepts S2 id / DOI: / ARXIV: / CorpusId:.3 params

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

Parameters* required
max_resultsinteger
default: 10
paper_id*string
startinteger
default: 0
get_paper_referencesSemantic Scholar: papers this one REFERENCES (its bibliography). id accepts S2 id / DOI: / ARXIV: / CorpusId:.3 params

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

Parameters* required
max_resultsinteger
default: 10
paper_id*string
startinteger
default: 0
get_paper_authorsSemantic Scholar: the authors of a paper (with h-index, paper/citation counts).3 params

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

Parameters* required
max_resultsinteger
default: 100
paper_id*string
startinteger
default: 0
match_paper_titleSemantic Scholar: find the single paper whose title best matches the given text (exact-match lookup).1 params

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

Parameters* required
title*string
autocomplete_papersSemantic Scholar: autocomplete paper titles for a partial query (fast type-ahead).1 params

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

Parameters* required
query*string
search_papers_bulkSemantic 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.9 params

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.

Parameters* required
fields_of_studystring
default:
max_resultsinteger
default: 100
open_access_pdfboolean
default: false
publication_typesstring
default:
query*string
sortstring
default:
tokenstring
default:
venuestring
default:
yearstring
default:
get_papers_batchSemantic Scholar: fetch many papers at once by id (S2/DOI:/ARXIV:/CorpusId:), up to ~500 per call.1 params

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

Parameters* required
ids*array
search_authorsSemantic Scholar: search for authors by name; returns profiles with h-index and paper/citation counts.3 params

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

Parameters* required
max_resultsinteger
default: 10
query*string
startinteger
default: 0
get_authorSemantic Scholar: a single author's profile by id.1 params

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

Parameters* required
author_id*string
get_author_papersSemantic Scholar: all papers by a given author id, newest first.3 params

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

Parameters* required
author_id*string
max_resultsinteger
default: 20
startinteger
default: 0
get_authors_batchSemantic Scholar: fetch many authors at once by id.1 params

Semantic Scholar: fetch many authors at once by id.

Parameters* required
ids*array
search_snippetsSemantic Scholar: search INSIDE paper full text and return matching text snippets (not just titles/abstracts).2 params

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

Parameters* required
max_resultsinteger
default: 10
query*string
recommend_papers_for_paperSemantic 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.3 params

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.

Parameters* required
max_resultsinteger
default: 10
paper_id*string
poolstring
default: recent
recommend_papers_from_examplesSemantic Scholar: recommend papers from positive (and optional negative) example paper ids.3 params

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

Parameters* required
max_resultsinteger
default: 10
negative_idsvalue
positive_ids*array
list_dataset_releasesSemantic Scholar Datasets: list all available release ids (dated snapshots of the full corpus).

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

No parameters. Call it with no arguments.

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

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

Parameters* required
release_idstring
default: latest
get_dataset_download_linksSemantic Scholar Datasets: get download links (presigned URLs) for one dataset in a release. Needs the API key.2 params

Semantic Scholar Datasets: get download links (presigned URLs) for one dataset in a release. Needs the API key.

Parameters* required
dataset_name*string
release_idstring
default: latest
get_dataset_diffsSemantic Scholar Datasets: incremental diff (added/updated/deleted) for a dataset between two releases. Needs the key.3 params

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

Parameters* required
dataset_name*string
end_releasestring
default: latest
start_release*string
get_openalex_workOpenAlex: fetch one work's full record (316M-work, all-field corpus). id accepts OpenAlex Wxxxx, a DOI, or an arXiv id.1 params

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

Parameters* required
work_id*string
get_openalex_citationsOpenAlex: papers that CITE this work (forward citation graph), most-cited first.3 params

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

Parameters* required
max_resultsinteger
default: 10
startinteger
default: 0
work_id*string
get_openalex_referencesOpenAlex: the works this one REFERENCES (its bibliography).2 params

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

Parameters* required
max_resultsinteger
default: 25
work_id*string
search_openalex_authorsOpenAlex: search authors; returns profiles with h-index, i10-index, works/citation counts and institutions.3 params

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

Parameters* required
max_resultsinteger
default: 10
query*string
startinteger
default: 0
search_openalex_institutionsOpenAlex: search institutions (universities, labs) with ROR id, country, works/citation counts.2 params

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

Parameters* required
max_resultsinteger
default: 10
query*string
search_openalex_worksOpenAlex: advanced filtered work search. Filters: from_year, to_year, is_oa (open access only), min_citations, institution_id. sort_by: relevance|newest|cited.8 params

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

Parameters* required
from_yearinteger
default: 0
institution_idstring
default:
is_oaboolean
default: false
max_resultsinteger
default: 25
min_citationsinteger
default: 0
querystring
default:
sort_bystring
default: relevance
to_yearinteger
default: 0
get_openalex_trendsOpenAlex: publication-trend analytics for a query — counts grouped by year (default), or by 'institutions.id', 'authorships.author.id', 'open_access.is_oa', 'type', 'language'. Returns aggregate counts only (cheap, no rows).2 params

OpenAlex: publication-trend analytics for a query — counts grouped by year (default), or by 'institutions.id', 'authorships.author.id', 'open_access.is_oa', 'type', 'language'. Returns aggregate counts only (cheap, no rows).

Parameters* required
group_bystring
default: publication_year
query*string
list_openalex_topicsOpenAlex: search the topic taxonomy (~4500 topics) to find the right subject term for filtering or recent-work queries.2 params

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

Parameters* required
max_resultsinteger
default: 15
query*string

Sponsors

Readme

paper-mcp

Remotely-callable MCP server for academic paper search, full-text retrieval & image→LaTeX, served at https://latex-tools.online/mcp.

Four 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
  • yongleji (alias yl) — Yongleji, ~465M works; relevance search is semantic and understands questions in Chinese or English

Plus a unified search_all that fuses all four corpora, image→LaTeX OCR, and LaTeX lint + PDF→text tooling.


Tools (41)


View the full README on GitHub

Details

Repository
github.com/mcpservings/paper-mcp
Website
latex-tools.online/mcp
Categories
Documents & Knowledge, Search & Web Crawling
Transport
HTTP
Registry
MCP registry, active
Tools verified
Nov 6, 2026

Related Documents & Knowledge MCP servers

View all
1oborchers avatarTablestakesoborchers/tablestakesRead and edit HTML/Markdown tables in GitBook-synced documents via MCP tools.1stars
2ovden13 avatarTriliumNext (trilium-mcp)ovden13/trilium-mcpRead and write a self-hosted TriliumNext knowledge base over its ETAPI.1stars
3adelaidasofia avatarFastMCP seed raise pipeline tracker — syncs from Obsidian CRM, generates meetingadelaidasofia/investor-relations-mcpFastMCP seed raise pipeline tracker — syncs from Obsidian CRM, generates meeting prep, tracks…0stars
4adelaidasofia avatarFastMCP server for bidirectional sync between personal and team Obsidian vaultsadelaidasofia/vault-sync-mcpFastMCP server for bidirectional sync between personal and team Obsidian vaults.0stars
5carrasquelalex1 avatarWebscrape Mcpcarrasquelalex1/webscrape-mcpFetch any URL and get clean Markdown. Web scraping for AI agents.0stars
6clichefactory avatarClicheFactory Document Intelligenceclichefactory/clichefactory-mcpExtract structured JSON from PDFs, images, DOCX, XLSX, CSV, EML attachments, and DSPy pipelines.0stars