unified_search
Unified literature search
Search across multiple literature sources (PubMed, arXiv, Semantic Scholar, OpenAlex,
ClinicalTrials.gov) in parallel, with automatic cross-source deduplication. A source that
fails does not fail the call; set `diagnostics` to see which one did and why, and to tell
an empty source from an unavailable one.
输入参数limitquery必填sourcesdiagnostics
search_papers
[Legacy] Search Europe PMC
Search Europe PMC for papers (single source — prefer `unified_search` for
multi-source coverage). At most ``limit`` records are fetched; optional filters
narrow the query by date, open access, full text availability and source.
输入参数sortlimitquery必填sourcedate_tosynonymdate_fromopen_accessresult_typehas_fulltext
Number of Europe PMC records matching a query, without fetching them. Use it to
size a search before choosing ``limit`` for `search_papers`.
输入参数query必填sourcedate_tosynonymdate_fromopen_accesshas_fulltext
get_paper_details
Get paper details
Get detailed paper information by PMID, PMCID, or DOI (Europe PMC).
输入参数doipmidpmcid
search_authors
Search authors
Search for authors in Europe PMC.
输入参数limitquery必填
get_paper_citations
Get paper citations
Get papers that cite a given paper (Europe PMC).
输入参数pmid必填limitsource
get_paper_references
Get paper references
Get the reference list of a paper (backward citations, Europe PMC).
输入参数limitsourcearticle_id必填
citation_snowball
Citation snowball walk
Walk the citation graph forward (cited-by), backward (references), or both, with
configurable depth and a minimum-citation-count filter.
输入参数strategymax_depthidentifier必填max_papersmin_citations
clinical_trial_search
Search ClinicalTrials.gov
Search ClinicalTrials.gov for studies by condition, intervention, or free-text query.
输入参数limitquerystatusconditionintervention
fulltext_index_query
Query local full-text index
Search the local SQLite FTS5 full-text index for papers whose full text matches
a query.
A fresh index handle is opened per call rather than cached: SQLite connections are
only safe to use from the thread that created them, and each call may run on a
different worker thread.
输入参数limitquery必填index_path
get_paper_fulltext
Get paper full text
Fetch the structured full text of an open-access paper from Europe PMC.
Returns metadata, the list of available section titles, and the content in the
requested format. When the content is longer than ``max_chars`` it is cut at a block
boundary and ``truncated`` is true: ask again with ``sections`` for the part you need.
Only open-access articles have full text; anything else fails with the reason.
输入参数doipmidpmcidformatsectionsmax_charsinclude_references
paper_figures
Extract paper figures
Extract figures, tables and supplementary files from a PMC Open Access article.
Each item carries its label, caption and the Europe PMC URL its file can be
downloaded from. A figure supplement also names the figure it belongs to.
输入参数doipmidpmcidinclude_tablesinclude_supplements
tag_paper_sentences
Tag paper sentences by role
The sentences of an open-access paper's body, grouped by what they do: background,
motivation, method, result, claim (the authors' interpretation), limitation, conclusion.
Front matter, the reference list and administrative sections (acknowledgments, funding,
conflicts) are left out. Rule-based and offline apart from the download: the section a
sentence is in sets its default role and cues in the sentence correct it. Where no rule is
sure the sentence is `unknown` instead of a guess; in a paper without recognisable headings
only background, method and conclusion sentences are recognised. Measured precision per
role is in the guide; discussion sections are the hardest part. Sentences come in reading
order and are never cut: `truncated` says whether some were left out. Use it to pull the
methods or the results of a paper without knowing what its sections are called.
输入参数doipmidpmcidrolesuse_llmsectionsmax_charsmin_confidence
epmc_status
Europe PMC service status
Is Europe PMC up right now? Probes the endpoints this server depends on (search, full
text, citations, annotations) and returns ok, degraded (some fail), down (none answers) or
unknown (only 4xx answers: a blocked probe or a moved endpoint), with the HTTP status and
the time in milliseconds of each. Use it before retrying a tool that failed with a network
error, a timeout or a 5xx. The answer is kept for 30 seconds, so asking again does not
probe again (`cached` says so), and it contains no URLs or response bodies.
无需输入参数。
How full are the server's caches and how often do they help? For the search, article and
annotation clients and for the full-text XML cache: entries, capacity, size, hits, misses
and hit rate. Counts only: no cache keys (they can contain query text), no cached content
and no file paths.
无需输入参数。
clear_cache
Clear a server cache
Empty one of the server's in-memory caches, so that the next call asks Europe PMC again.
Only worth doing when you suspect a cached answer is stale (the caches hold results for a
day); every cleared entry has to be fetched again, which is load on Europe PMC. It changes
server state, so a client may ask for approval. It never touches files on disk.
输入参数scope必填
validate_query
Validate a Europe PMC query
Check a Europe PMC query before running it. Europe PMC does not reject a malformed query,
it answers a different one: an unclosed parenthesis or a dangling operator is dropped
silently, an unknown field, a flag that is not y/n and a date range with a missing or
reversed bound match nothing, and AND mixed with OR without parentheses is not read as
either grouping. Each problem comes with its position. `valid` is false when there are
errors; warnings are things worth a second look. `normalized` is the cleaned-up query
(capital operators, explicit AND) and is only given for a query without errors.
输入参数query必填
build_query
Build a Europe PMC query
Build a Europe PMC query from structured input instead of writing syntax by hand, and
check the result. Returns the query, a plain-language explanation of what it asks for, and
any warnings. At least one of all_of, any_of or a filter is needed (none_of alone would
match almost everything). The same filters are available on `search_papers`.
输入参数citesall_ofany_ofsourcedate_tonone_ofdate_fromopen_accesshas_fulltext
translate_query
Translate a Europe PMC query
Rewrite a Europe PMC query for another database. For PubMed the field codes map where
they have an equivalent (TITLE[ti], AUTH[au], JOURNAL[ta], dates[dp], ...); a construct
that does not map (CITES, HAS_*, CITED, ...) is left out and named in `warnings` and
`dropped`, and `exact` is false whenever the translation is narrower, broader or only
approximate. The other targets search free text, so field codes and operators are stripped
and `exact` is always false. A query with errors is refused; see `validate_query`.
输入参数query必填target
evaluate_query
Evaluate a query against known papers
Score a Europe PMC query against papers you already know, for systematic-review work:
recall (how many of the included PMIDs it finds) and how many excluded ones it still
finds, with the PMIDs it misses. This runs the query on Europe PMC itself, so it measures
what the search really returns, not a local reading of the syntax. PMIDs that Europe PMC
does not know are reported apart and left out of the scores. A query with errors is
refused; see `validate_query`.
输入参数query必填excluded_pmidsincluded_pmids必填
export_papers
Export papers
Export papers as a file's worth of text to hand to a reference manager or a spreadsheet:
BibTeX, RIS or CSL-JSON (Zotero, Mendeley, EndNote, Pandoc) or CSV, JSON or Markdown.
Give a search `query` or a list of `ids`. BibTeX keys look like `vasiliou2005analysis`,
are unique within the export and do not change when it is cut to size; text that LaTeX
reads as syntax (& % # _ $) is escaped. A paper with more than 100 authors lists the first
100 (BibTeX adds `and others`). The export is never cut in the middle of a record:
`truncated` says that records were left out; `next_skip` (query) or `remaining` (ids) say
where to continue. Nothing is written to disk.
输入参数idsskiplimitqueryfieldsformatmax_charsinclude_abstract
get_papers_batch
Get papers in batch
Look up many papers at once: one combined Europe PMC query per 50 identifiers instead of
one call per paper. Every input gets a result in the order given, with a status: ok,
not_found, invalid (malformed identifier) or error (that request failed). One bad
identifier never fails the batch; a repeated identifier repeats its result.
输入参数ids必填fields
get_papers_fulltext_batch
Get full text of several papers
Markdown full text of several open-access papers in one call, within a size budget.
The identifiers are resolved with one query, papers that are not open access are reported
without being downloaded, and the rest are fetched four at a time. The total budget is
handed out in the order given: once it is used up, the remaining papers are reported as
skipped_budget and not downloaded. Each result has a status: ok, not_found, invalid,
not_in_pmc, not_open_access, no_matching_section, duplicate, error or skipped_budget.
Use `get_paper_fulltext` for one paper at a larger size.
输入参数ids必填sectionsmax_total_charsmax_chars_per_paper
download_papers_pdf
Download PDFs
Save the PDFs of several papers on the machine the server runs on.
Files go to PYEUROPEPMC_MCP_DOWNLOAD_DIR (default ~/Downloads/pyeuropepmc) as
<PMCID>.pdf, or <DOI>-<hash>.pdf for a paper outside PubMed Central; the caller cannot
choose a path. A PMC paper is looked for at NCBI's open-access copy and Europe PMC; any
paper with a DOI also at arXiv, OpenAlex, Semantic Scholar and, with UNPAYWALL_EMAIL
set in the server's environment, at the open copy Unpaywall knows. Only open copies are
fetched; a paper that has none comes back as no_pdf.
It is checked to be a PDF and under 100 MB, or discarded. Returns the path, size and
SHA-256 of every file, the source that supplied it and the licence that source (or, failing
that, Europe PMC) reported; each saved file also gets a line in manifest.jsonl in the
same folder. The PDFs stay on the server's
disk: with a remote HTTP server they are not sent to the caller. Each result has a
status: ok, exists (already saved, not fetched again), not_found, invalid, not_in_pmc,
duplicate, no_pdf or error.
Use `get_paper_fulltext` to read a paper instead of saving it.
输入参数ids必填overwrite
find_open_access
Find open-access copies
Where can this paper be read for free? Looks the DOI up in Unpaywall and returns the
open-access status (gold, green, hybrid, bronze, closed), the best copy with its PDF
link and licence, and a few alternatives. ``europepmc_fulltext`` says whether
`get_paper_fulltext` will work for it. Needs UNPAYWALL_EMAIL in the server's environment.
输入参数doipmidpmcid
get_paper_annotations
Get paper annotations
Genes, proteins, chemicals, diseases, organisms and other entities that Europe PMC
text-mined from a paper, grouped by entity with mention counts, sections and example
mentions. A review with hundreds of mentions comes back as a short entity list.
输入参数doipmidlimitpmcidsectionproviderannotation_type
find_papers_by_entity
Find papers by entity
Articles in which Europe PMC found a given entity, with how often and where it is
mentioned. One page per call: pass ``next_cursor`` back as ``cursor`` for the next.
Europe PMC's entity search ignores type, section and provider, so the three filters
here apply to the mentions it returns: an article without a matching mention is left
out and counted in ``articles_filtered_out``.
输入参数limitcursorentity必填sectionproviderannotation_type
get_paper_data_links
Get paper data links
Where is the data of this paper? Accession numbers Europe PMC text-mined from the full
text (dbSNP, RefSeq, OMIM, ClinicalTrials.gov, cited DOIs) and records that providers link
to the paper (BioStudies supplementary data, model-organism databases, Altmetric), as one
flat list. `kind` separates supporting_data and related_data from altmetrics and
recommended_reviews; `origin` says whether a link was text_mined or supplied by a
provider. A paper without links gives an empty list, which is a valid answer.
输入参数doipmidlimitpmcidschemecategory
get_paper_lab_links
Get paper lab links
Links that third parties publish for a paper, grouped by provider with the provider's
description: BioStudies supplementary material, model-organism databases, GO annotations,
Faculty Opinions recommendations, Altmetric. Use get_paper_data_links for the data
accessions mentioned in the text.
输入参数doipmidpmcidprovider
enrich_paper
Enrich a paper from several sources
One compact record for a paper from Europe PMC, Crossref, OpenAlex, Semantic Scholar,
iCite and Unpaywall, merged: citation impact, funders and grants, authors with their
institutions, open-access status and licence, and corrections and retractions. The
sources are asked at the same time; `sources` in the answer says for each whether it
answered (ok), had nothing (empty), failed (error, with the reason), or was still running
when `time_budget` ended (timeout). A failed source gives a partial record, not an error.
Institutions come with name, country and ROR ID; `ror_details` adds their place and website.
Nothing is written to disk.
输入参数doipmidpmcidincludesourcesror_detailstime_budget
pico_decompose
Decompose a research question
Split a research question into PICO, PICOS, PICOT or SPIDER elements and build a Europe
PMC query from them. Rule-based and offline: no model, no key, no request. Every element
is a verbatim piece of the question, given with its position; an element the question does
not state is listed in `missing`, never filled in. The rules cover the usual clinical
phrasings ("In P, does I reduce O compared with C?", "What is the effect of I on O in P?",
"Is I more effective than C for O?", "Is I associated with O?", "Effectiveness of I for O
in P", "P treated with I"). A question phrased differently is only partly understood:
check `elements` and `missing` before using the query, and ask for clarification when the
question is incomplete. The query is checked with the same linter as `validate_query`.
输入参数meshquestion必填frameworkquery_elements
mesh_expand
Expand terms with MeSH
MeSH headings for search terms: the descriptor (ID, heading, tree numbers), its entry
terms and a ready Europe PMC fragment `(MESH:"Heading" OR "entry term" OR ...)` for each
term, and the fragments joined into one query that is checked like `validate_query`. By
default it works offline from a bundled snapshot of 244 common clinical headings taken
from NLM's published MeSH (heading, entry terms and tree numbers as published): a term
that is not in it comes back with `matched: false` and is searched as written, never
guessed. `use_api` asks NLM instead, which covers all of MeSH and needs the network (the
terms are sent to id.nlm.nih.gov); a failed or skipped request is reported for that term
and does not fail the call, and `time_budget` bounds the whole call.
输入参数terms必填combineuse_apitime_budgetmax_entry_terms
analyze_search
Analyze a search
Aggregate statistics about a search without returning its records. Every metric says
where it comes from in `basis`: `exact` is counted by Europe PMC over all `hit_count`
records (`by_year`: one count per year; `open_access`; the `thresholds` of `citations`),
`sample` is computed from the first `limit` records of the search and describes only those
(`journals`, `authors`, `types`, `countries`, `funders` and the `citations` statistics).
When `limit` covers the whole result, those are `exact` too. The sample metrics need
`pip install pyeuropepmc[analytics]`.
输入参数sortlimitquery必填top_nsourcedate_tometricsdate_fromopen_accessyear_windowhas_fulltext
analyze_citations
Analyze citation context
Analyze citation context for a paper using an LLM (requires an LLM provider).
输入参数pmid必填taskcontext
compare_citations
Compare two papers' citations
Compare citations between two papers using an LLM (requires an LLM provider).
输入参数taskpmid1必填pmid2必填
summarize_citations
Summarize citation activity
Summarize citation activity for a paper using an LLM (requires an LLM provider).
输入参数pmid必填citation_count
paper_screening
PRISMA paper screening
Automated paper screening with PRISMA-compliant criteria, using an LLM (requires
an LLM provider).
输入参数limitquery必填exclusion_criteria必填inclusion_criteria必填
research_question_analysis
Analyze a research question
Expand and analyze a research question using an LLM (requires an LLM provider).
输入参数time_frameresearch_question必填
preprint_analysis
Preprint quality assessment
Preprint-specific quality assessment using an LLM (requires an LLM provider).
输入参数pmid必填preprint_server
literature_review
Generate a literature review
Generate a comprehensive literature review using an LLM (requires an LLM
provider).
输入参数time_framekey_concepts必填research_topic必填excluded_topics
knowledge_graph
Build a knowledge graph
Build a knowledge graph from research literature using an LLM (requires an LLM
provider).
输入参数entitiesrelationshipsresearch_domain必填
bib_parse_string
Parse BibTeX
Parse a BibTeX string into structured entries.
输入参数content必填
bib_validate
Validate BibTeX
Validate BibTeX entries for completeness and correctness.
输入参数content必填
bib_to_ris
Convert BibTeX to RIS
Convert BibTeX entries to RIS format.
输入参数content必填
bib_to_csl
Convert BibTeX to CSL-JSON
Convert BibTeX entries to CSL-JSON format.
输入参数content必填
ref_resolve_doi
Resolve a DOI
Resolve a DOI to bibliographic metadata.
输入参数doi必填
ref_resolve_pmid
Resolve a PMID
Resolve a PubMed ID to bibliographic metadata.
输入参数pmid必填
bib_merge
Merge BibTeX libraries
Merge multiple BibTeX libraries, deduplicating by DOI.
输入参数libraries必填