Hosted MCP server · #130 most used on Smithery

Paper Search (arXiv + Semantic Scholar + OpenAlex)

kangletian/paper-mcp

Unified academic paper search for AI agents. search_all queries arXiv, Semantic Scholar and OpenAlex at once, de-duplicates the same work across corpora (by DOI/title) and re-ranks with Reciprocal Rank Fusion so papers found by several sources rank highest. read_paper returns full arXiv text with formulas as LaTeX. Plus citation graphs, author metrics (h-index), recommendations and full-text snippet search across 220M+ papers. Remote streamable-HTTP, no auth required.

Uses
4.1k
Tools
41
Runs
Hosted
Listed
5mo ago

Get started

Add it to your agent

npx -y @smithery/cli@latest install kangletian/paper-mcp --client claude

Swap --client claude for cursor, vscode, windsurf or another client. The CLI asks for any required settings.

What it can do

41 tools

search_papers5 paramsSearch academic papers. Returns normalized hits with a short abstract preview; call get_paper for the full record.
ParameterTypeDescription
querystring
startinteger
sourcestring
sort_bystring
max_resultsinteger
search_all4 paramsAggregated search across arXiv, Semantic Scholar and OpenAlex at once. Fans out concurrently, de-duplicates the same work across corpora …

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.

ParameterTypeDescription
querystring
sourcesstring
per_sourceinteger
max_resultsinteger
search_medical5 paramsEvidence-graded MEDICAL literature search (PubMed + Europe PMC). Unlike search_all (generic, ranks high-cited reviews/guidelines above tr…

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/multilingua

ParameterTypeDescription
querystring
year_frominteger
max_resultsinteger
study_typesstring
fetch_fulltextboolean
get_paper2 paramsFetch one paper by id, with full abstract and PDF link.
ParameterTypeDescription
sourcestring
paper_idstring
search_by_author4 paramsFind papers by a specific author, newest first.
ParameterTypeDescription
startinteger
authorstring
sourcestring
max_resultsinteger
list_recent4 paramsList the latest papers in a subject category, newest first.
ParameterTypeDescription
startinteger
sourcestring
categorystring
max_resultsinteger
list_categories1 paramList common subject category codes for filtering/recent.
ParameterTypeDescription
sourcestring
read_paper3 paramsRead a paper's full text. format='markdown' (default, body with formulas as $LaTeX$), 'html' (raw LaTeXML HTML), or 'latex' (the original…

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.

ParameterTypeDescription
formatstring
sourcestring
paper_idstring
list_paper_sourcesList available paper corpora.
recognize_formula3 paramsRecognize a math formula from an image and return LaTeX. Provide image_url (downloaded server-side) OR image_base64. model: deepseek-ocr …

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

ParameterTypeDescription
modelstring
image_urlstring
image_base64string
recognize_table3 paramsRecognize a table from an image and return LaTeX tabular code. Provide image_url OR image_base64. model: deepseek-ocr (default), paddleoc…

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

ParameterTypeDescription
modelstring
image_urlstring
image_base64string
list_ocr_modelsList the OCR models available for recognize_formula / recognize_table.
lint_latex1 paramLint a LaTeX snippet: report errors and return an auto-fixed version. Input `code` (the LaTeX source). Returns {errors, fixed_code, summa…

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

ParameterTypeDescription
codestring
extract_pdf4 paramsExtract 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 rea…

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

ParameterTypeDescription
tableboolean
formulaboolean
pdf_urlstring
pdf_base64string
extract_pdf_result1 paramFetch the result of an extract_pdf job by task_id. Returns {task_id, status, content, chars}: `content` is the extracted text once status…

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.

ParameterTypeDescription
task_idstring
get_paper_citations3 paramsSemantic Scholar: papers that CITE this one (forward citation graph). id accepts S2 id / DOI: / ARXIV: / CorpusId:.
ParameterTypeDescription
startinteger
paper_idstring
max_resultsinteger
get_paper_references3 paramsSemantic Scholar: papers this one REFERENCES (its bibliography). id accepts S2 id / DOI: / ARXIV: / CorpusId:.
ParameterTypeDescription
startinteger
paper_idstring
max_resultsinteger
get_paper_authors3 paramsSemantic Scholar: the authors of a paper (with h-index, paper/citation counts).
ParameterTypeDescription
startinteger
paper_idstring
max_resultsinteger
match_paper_title1 paramSemantic Scholar: find the single paper whose title best matches the given text (exact-match lookup).
ParameterTypeDescription
titlestring
autocomplete_papers1 paramSemantic Scholar: autocomplete paper titles for a partial query (fast type-ahead).
ParameterTypeDescription
querystring
search_papers_bulk9 paramsSemantic Scholar: bulk paper search (up to 1000 hits, sortable e.g. 'citationCount:desc' or 'publicationDate:desc', with a continuation t…

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.

ParameterTypeDescription
sortstring
yearstring
querystring
tokenstring
venuestring
max_resultsinteger
fields_of_studystring
open_access_pdfboolean
publication_typesstring
get_papers_batch1 paramSemantic Scholar: fetch many papers at once by id (S2/DOI:/ARXIV:/CorpusId:), up to ~500 per call.
ParameterTypeDescription
idsarray
search_authors3 paramsSemantic Scholar: search for authors by name; returns profiles with h-index and paper/citation counts.
ParameterTypeDescription
querystring
startinteger
max_resultsinteger
get_author1 paramSemantic Scholar: a single author's profile by id.
ParameterTypeDescription
author_idstring
get_author_papers3 paramsSemantic Scholar: all papers by a given author id, newest first.
ParameterTypeDescription
startinteger
author_idstring
max_resultsinteger
get_authors_batch1 paramSemantic Scholar: fetch many authors at once by id.
ParameterTypeDescription
idsarray
search_snippets2 paramsSemantic Scholar: search INSIDE paper full text and return matching text snippets (not just titles/abstracts).
ParameterTypeDescription
querystring
max_resultsinteger
recommend_papers_for_paper3 paramsSemantic Scholar: recommend papers similar to one paper. pool='recent' (last open corpus) or 'all-cs' (all of CS). If the 'recent' pool y…

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.

ParameterTypeDescription
poolstring
paper_idstring
max_resultsinteger
recommend_papers_from_examples3 paramsSemantic Scholar: recommend papers from positive (and optional negative) example paper ids.
ParameterTypeDescription
max_resultsinteger
negative_ids
positive_idsarray
list_dataset_releasesSemantic Scholar Datasets: list all available release ids (dated snapshots of the full corpus).
get_dataset_release1 paramSemantic Scholar Datasets: which datasets a release contains (papers, abstracts, citations, embeddings, s2orc, tldrs…). release_id defaul…

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

ParameterTypeDescription
release_idstring
get_dataset_download_links2 paramsSemantic Scholar Datasets: get download links (presigned URLs) for one dataset in a release. Needs the API key.
ParameterTypeDescription
release_idstring
dataset_namestring
get_dataset_diffs3 paramsSemantic Scholar Datasets: incremental diff (added/updated/deleted) for a dataset between two releases. Needs the key.
ParameterTypeDescription
end_releasestring
dataset_namestring
start_releasestring
get_openalex_work1 paramOpenAlex: fetch one work's full record (316M-work, all-field corpus). id accepts OpenAlex Wxxxx, a DOI, or an arXiv id.
ParameterTypeDescription
work_idstring
get_openalex_citations3 paramsOpenAlex: papers that CITE this work (forward citation graph), most-cited first.
ParameterTypeDescription
startinteger
work_idstring
max_resultsinteger
get_openalex_references2 paramsOpenAlex: the works this one REFERENCES (its bibliography).
ParameterTypeDescription
work_idstring
max_resultsinteger
search_openalex_authors3 paramsOpenAlex: search authors; returns profiles with h-index, i10-index, works/citation counts and institutions.
ParameterTypeDescription
querystring
startinteger
max_resultsinteger
search_openalex_institutions2 paramsOpenAlex: search institutions (universities, labs) with ROR id, country, works/citation counts.
ParameterTypeDescription
querystring
max_resultsinteger
search_openalex_works8 paramsOpenAlex: advanced filtered work search. Filters: from_year, to_year, is_oa (open access only), min_citations, institution_id. sort_by: r…

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

ParameterTypeDescription
is_oaboolean
querystring
sort_bystring
to_yearinteger
from_yearinteger
max_resultsinteger
min_citationsinteger
institution_idstring
get_openalex_trends2 paramsOpenAlex: publication-trend analytics for a query — counts grouped by year (default), or by 'institutions.id', 'authorships.author.id', '…

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

ParameterTypeDescription
querystring
group_bystring
list_openalex_topics2 paramsOpenAlex: search the topic taxonomy (~4500 topics) to find the right subject term for filtering or recent-work queries.
ParameterTypeDescription
querystring
max_resultsinteger