Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

PyEuropePMC

PYPI · PYEUROPEPMC

Europe PMC search, search analytics, full text, enrichment, PICO, MeSH, data links, export, auth

Available components

0 this week 74 Trust /100

Last scanned (18 hours ago)

Scores higher than 70% of PyPI servers

Category Education and Research

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security32
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to JonasHeinickeBio/pyEuropePMC). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 1 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability79
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 7151 tokens (~152/item across 47 items; 47 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "bib_merge" implies "merge" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Fail
  • An AI judge read all 48 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 2 Nov 26 0
    • Security disclosure: unverified → fail ▼ functional
    • Package version: 4.6.0 → 4.6.1 functional
  • 1 Nov 26 0
    • Security disclosure: fail → unverified ▼ functional
  • 31 Oct 26 +1
    • Stability: 0.97 → pass security
  • 30 Oct 26 −16
    • Malware scan: pass → unverified ▼ security
    • Stability: pass → 0.97 functional
  • 29 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 28 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
    • Package version: 4.5.0 → 4.6.0 functional
  • 27 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 26 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
    • Package version: 4.2.0 → 4.5.0 functional
    • Package version: 4.2.0 → 4.4.0 functional
    • Package version: 4.2.0 → 4.3.0 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 4 Nov 2026 · Analysed pypi/pyeuropepmc@4.6.1

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo JonasHeinickeBio/pyEuropePMC
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/JonasHeinickeBio/pyEuropePMC/.github/workflows/release.yml@refs/tags/v4.6.1
Rekor log index 3641302145
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:6880f27222123fe2e53bf6d032ef7a5ccda6c876cbcf86ddc5c1e61f618c04e5

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted poetry.core.masonry.api

Background: Why install scripts are a supply-chain risk →

Vulnerabilities 2 findings
ID CVE Severity Vector Fix available
GHSA-w8v5-vhqr-4h9v CVE-2025-69872 medium no
PYSEC-2026-2447 CVE-2025-69872 none no

Background: What a vulnerability scan can and cannot prove →

Dependencies 57 packages
Packages resolved 57
Stale 7
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 47 exposed · ~6,996 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
analyze_citations ~57

Analyze citation context for a paper using an LLM (requires an LLM provider).

NameTypeReqDescription
contextstring–Citation context description
pmidstringyesPubMed ID
taskstring–Analysis task description

Structured output declared, but exposes no named fields.

No examples provided.

analyze_search ~416

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

NameTypeReqDescription
date_fromstring–First publication date, from (YYYY, YYYY-MM or YYYY-MM-DD)
date_tostring–First publication date, to (YYYY, YYYY-MM or YYYY-MM-DD)
has_fulltextboolean–Only articles with full text
limitinteger–Records read for the metrics that cannot be counted (citations statistics, journals, authors, types, countries, funders)
metrics––What to compute, any of: by_year, citations, journals, authors, types, countries, open_access, funders. Default: all of them.
open_accessboolean–Only open-access articles
querystringyesSearch query
sortstring–Order of the records read, e.g. 'CITED desc' (default: relevance)
sourcestring–Restrict to one source, e.g. MED, PMC or PPR (preprints)
top_ninteger–Entries in each ranking (journals, authors, ...)
year_windowinteger–Years `by_year` counts, ending with the current one, one request each (30 take a few seconds on a large search, 60 about twice that). Older records are one `before` bucket, so the total stays exact

Structured output declared, but exposes no named fields.

No examples provided.

bib_merge ~36

Merge multiple BibTeX libraries, deduplicating by DOI.

NameTypeReqDescription
librariesarrayyesBibTeX-formatted strings to merge

Structured output declared, but exposes no named fields.

No examples provided.

bib_parse_string ~32

Parse a BibTeX string into structured entries.

NameTypeReqDescription
contentstringyesBibTeX-formatted string

Structured output declared, but exposes no named fields.

No examples provided.

bib_to_csl ~34

Convert BibTeX entries to CSL-JSON format.

NameTypeReqDescription
contentstringyesBibTeX-formatted string
NameTypeReqDescription
resultarrayyes–

No examples provided.

bib_to_ris ~32

Convert BibTeX entries to RIS format.

NameTypeReqDescription
contentstringyesBibTeX-formatted string
NameTypeReqDescription
resultstringyes–

No examples provided.

bib_validate ~31

Validate BibTeX entries for completeness and correctness.

NameTypeReqDescription
contentstringyesBibTeX string to validate

Structured output declared, but exposes no named fields.

No examples provided.

build_query ~268

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

NameTypeReqDescription
all_of––Terms that must all match. A plain word or phrase is searched as written ('heart attack' becomes a phrase); write FIELD:value, a quoted string or a parenthesised expression to say more, e.g. 'TITLE:c…
any_of––Terms of which at least one must match
citesstring–Only records that cite this PMID
date_fromstring–First publication date, from (YYYY, YYYY-MM or YYYY-MM-DD)
date_tostring–First publication date, to (YYYY, YYYY-MM or YYYY-MM-DD)
has_fulltextboolean–Only records with full text
none_of––Terms that must not match
open_accessboolean–Only open-access records
sourcestring–Only this source, e.g. MED, PMC or PPR (preprints)

Structured output declared, but exposes no named fields.

No examples provided.

cache_status ~75

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.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

citation_snowball ~111

Walk the citation graph forward (cited-by), backward (references), or both, with configurable depth and a minimum-citation-count filter.

NameTypeReqDescription
identifierstringyesPaper ID (PMID, DOI, or Semantic Scholar ID)
max_depthinteger–Recursion depth (0 = no limit)
max_papersinteger–Max papers per level
min_citationsinteger–Minimum citation count filter
strategystring–Snowball direction

Structured output declared, but exposes no named fields.

No examples provided.

clear_cache ~127

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.

NameTypeReqDescription
scopestringyesWhich cache: search (search results, batch lookups, counts), article (citations, references), annotations, xml (downloaded full text) or all of them

Structured output declared, but exposes no named fields.

No examples provided.

clinical_trial_search ~83

Search ClinicalTrials.gov for studies by condition, intervention, or free-text query.

NameTypeReqDescription
condition––Medical condition filter
intervention––Intervention/treatment filter
limitinteger–Max results
querystring–Free-text search query
status––Recruitment status filter, e.g. ACTIVE, COMPLETED, RECRUITING

Structured output declared, but exposes no named fields.

No examples provided.

compare_citations ~65

Compare citations between two papers using an LLM (requires an LLM provider).

NameTypeReqDescription
pmid1stringyesPubMed ID of first paper
pmid2stringyesPubMed ID of second paper
taskstring–Comparison task description

Structured output declared, but exposes no named fields.

No examples provided.

count_papers ~158

Number of Europe PMC records matching a query, without fetching them. Use it to size a search before choosing ``limit`` for `search_papers`.

NameTypeReqDescription
date_fromstring–First publication date, from (YYYY, YYYY-MM or YYYY-MM-DD)
date_tostring–First publication date, to (YYYY, YYYY-MM or YYYY-MM-DD)
has_fulltextboolean–Only articles with full text
open_accessboolean–Only open-access articles
querystringyesSearch query
sourcestring–Restrict to one source, e.g. MED, PMC or PPR (preprints)
synonymboolean–Expand the query with MeSH synonyms

Structured output declared, but exposes no named fields.

No examples provided.

enrich_paper ~357

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.

NameTypeReqDescription
doistring–DOI or doi.org URL (alternative to pmcid)
include––Only these field groups: impact, funding, affiliations, oa, updates. Default: all.
pmcidstring–PMC ID of the article, e.g. PMC1234567
pmidstring–PubMed ID (alternative to pmcid)
ror_detailsboolean–Add city, country code, website and coordinates of each institution from ROR (needs the affiliations group). One more request per institution, so slower; the time budget covers it.
sources––Only these sources besides Europe PMC: crossref, openalex, semantic_scholar, icite, unpaywall. Default: all that need no credentials (Unpaywall once UNPAYWALL_EMAIL is set).
time_budgetnumber–Seconds to wait for the sources together; one that is still running is reported as a timeout and left out

Structured output declared, but exposes no named fields.

No examples provided.

epmc_status ~135

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.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

evaluate_query ~156

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

NameTypeReqDescription
excluded_pmids––PMIDs the query should not find
included_pmidsarrayyesPMIDs the query should find
querystringyesA Europe PMC search query

Structured output declared, but exposes no named fields.

No examples provided.

export_papers ~395

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.

NameTypeReqDescription
fields––csv, json and markdown only: columns, from id, source, pmid, pmcid, doi, title, authors, journal, year, cited_by, is_open_access, pub_types, abstract. Default: id, source, pmid, pmcid, doi, title, au…
formatstring–Output format
ids––PMIDs, PMCIDs and DOIs (mixed) to export, in this order; give this or query, not both
include_abstractboolean–bibtex, ris and csl-json only: include the abstract
limitinteger–Most records to export
max_charsinteger–Cut the export at a record boundary after this many characters
querystring–A Europe PMC search query; give this or ids, not both
skipinteger–Query only: results to skip, for the next part

Structured output declared, but exposes no named fields.

No examples provided.

find_open_access ~151

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.

NameTypeReqDescription
doistring–DOI, e.g. 10.1038/s41586-020-2649-2
pmcidstring–PMC ID (alternative to doi)
pmidstring–PubMed ID (alternative to doi)

Structured output declared, but exposes no named fields.

No examples provided.

find_papers_by_entity ~215

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

NameTypeReqDescription
annotation_typestring–Only count mentions of this type, e.g. Chemicals, Diseases
cursorstring–next_cursor of the previous page; empty for the first page
entitystringyesEntity identifier or name, e.g. 'CHEBI:16236', 'ethanol', 'BRCA1'
limitinteger–Articles per page (Europe PMC allows 1 to 8)
providerstring–Only count mentions from this provider
sectionstring–Only count mentions in this section, e.g. Abstract, Results

Structured output declared, but exposes no named fields.

No examples provided.

fulltext_index_query ~103

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.

NameTypeReqDescription
index_path––Path to the SQLite index file (optional)
limitinteger–Max results
querystringyesFull-text search query

Structured output declared, but exposes no named fields.

No examples provided.

get_paper_annotations ~209

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.

NameTypeReqDescription
annotation_typestring–Only this entity type, e.g. Gene_Proteins, Chemicals, Diseases, Organisms, 'Gene Ontology'. Case-insensitive; the result lists available_types when nothing matches.
doistring–DOI (alternative to pmcid)
limitinteger–Max entities to return, most mentioned first
pmcidstring–PMC ID of the article, e.g. PMC1234567
pmidstring–PubMed ID (alternative to pmcid)
providerstring–Only this annotation provider, e.g. 'Europe PMC'
sectionstring–Only mentions in this section, e.g. Abstract, Results, Methods

Structured output declared, but exposes no named fields.

No examples provided.

get_paper_citations ~74

Get papers that cite a given paper (Europe PMC).

NameTypeReqDescription
limitinteger–Max citing papers to return
pmidstringyesArticle ID, usually a PubMed ID
sourcestring–Europe PMC source code of the ID: MED (PMID), PMC or PPR
NameTypeReqDescription
resultarrayyes–

No examples provided.

get_paper_data_links ~264

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.

NameTypeReqDescription
categorystring–Only this category, e.g. 'Data Citations', SNPs, RefSeq, 'Clinical Trials', Diseases, Altmetric. Case-insensitive; `categories` in the result lists what exists.
doistring–DOI (alternative to pmcid)
limitinteger–Max links to return
pmcidstring–PMC ID of the article, e.g. PMC1234567
pmidstring–PubMed ID (alternative to pmcid)
schemestring–Only this identifier scheme, e.g. dbSNP, RefSeq, DOI, OMIM

Structured output declared, but exposes no named fields.

No examples provided.

get_paper_details ~55

Get detailed paper information by PMID, PMCID, or DOI (Europe PMC).

NameTypeReqDescription
doistring–DOI
pmcidstring–PMCID
pmidstring–PubMed ID

Structured output declared, but exposes no named fields.

No examples provided.

get_paper_fulltext ~281

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.

NameTypeReqDescription
doistring–DOI (alternative to pmcid)
formatstring–markdown: readable text with tables (default). sections: typed blocks (paragraph, heading, list, figure, table) for programmatic use. outline: only section titles, block counts and sizes - use it fir…
include_referencesboolean–Also return the parsed reference list (DOI/PMID per entry)
max_charsinteger–Cut the content at a block boundary after this many characters
pmcidstring–PMC ID of the article, e.g. PMC1234567
pmidstring–PubMed ID (alternative to pmcid)
sections––Only these sections: case-insensitive substrings of a section title, e.g. ['methods', 'results']. Default: all sections.

Structured output declared, but exposes no named fields.

No examples provided.

get_paper_lab_links ~157

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.

NameTypeReqDescription
doistring–DOI (alternative to pmcid)
pmcidstring–PMC ID of the article, e.g. PMC1234567
pmidstring–PubMed ID (alternative to pmcid)
providerstring–Only this provider: part of its name (e.g. biostudies) or its numeric id. Europe PMC ignores a provider filter, so this is applied here.

Structured output declared, but exposes no named fields.

No examples provided.

get_paper_references ~81

Get the reference list of a paper (backward citations, Europe PMC).

NameTypeReqDescription
article_idstringyesArticle ID, e.g. a PMID or PMCID
limitinteger–Max references to return
sourcestring–Europe PMC source code: MED (PMID), PMC (PMCID) or PPR

Structured output declared, but exposes no named fields.

No examples provided.

get_papers_batch ~204

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.

NameTypeReqDescription
fields––Fields to return per paper, from: id, source, pmid, pmcid, doi, title, authors, journal, year, cited_by, is_open_access, pub_types, abstract. Default: id, source, pmid, pmcid, doi, title, authors, jo…
idsarrayyesPMIDs, PMCIDs and DOIs, mixed allowed (bare digits are a PMID; 'doi:' and https://doi.org/ prefixes are accepted)

Structured output declared, but exposes no named fields.

No examples provided.

get_papers_fulltext_batch ~237

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.

NameTypeReqDescription
idsarrayyesPMIDs, PMCIDs and DOIs, mixed allowed. Only open-access papers have full text
max_chars_per_paperinteger–Cap on the content of one paper
max_total_charsinteger–Cap on the content of the whole response
sections––Only these sections of every paper: case-insensitive substrings of a title, e.g. ['methods', 'results']. Default: all sections.

Structured output declared, but exposes no named fields.

No examples provided.

knowledge_graph ~51

Build a knowledge graph from research literature using an LLM (requires an LLM provider).

NameTypeReqDescription
entities––Key entities
relationships––Known relationships
research_domainstringyesResearch domain

Structured output declared, but exposes no named fields.

No examples provided.

literature_review ~70

Generate a comprehensive literature review using an LLM (requires an LLM provider).

NameTypeReqDescription
excluded_topics––Topics to exclude from the review
key_conceptsarrayyesKey concepts to cover
research_topicstringyesResearch topic
time_framestring–Time frame

Structured output declared, but exposes no named fields.

No examples provided.

mesh_expand ~336

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.

NameTypeReqDescription
combinestring–How the terms' fragments are joined into `query`: 'and' (one concept per term, the usual structure) or 'or'
max_entry_termsinteger–Entry terms added to each fragment
termsarrayyesSearch terms to expand, e.g. ['type 2 diabetes', 'metformin']
time_budgetnumber–With use_api: seconds for all lookups together; terms not reached are reported as skipped. Ignored offline.
use_apiboolean–Ask the NLM MeSH service (id.nlm.nih.gov, a network request, up to four per term) instead of the bundled snapshot. Default: offline.

Structured output declared, but exposes no named fields.

No examples provided.

paper_figures ~132

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.

NameTypeReqDescription
doistring–DOI (alternative to pmcid)
include_supplementsboolean–Include supplementary material
include_tablesboolean–Include <table-wrap> elements
pmcidstring–PMC ID of the article, e.g. PMC1234567
pmidstring–PubMed ID (alternative to pmcid)

Structured output declared, but exposes no named fields.

No examples provided.

paper_screening ~74

Automated paper screening with PRISMA-compliant criteria, using an LLM (requires an LLM provider).

NameTypeReqDescription
exclusion_criteriaarrayyesExclusion criteria
inclusion_criteriaarrayyesInclusion criteria
limitinteger–Papers to screen
querystringyesSearch query

Structured output declared, but exposes no named fields.

No examples provided.

pico_decompose ~325

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

NameTypeReqDescription
frameworkstring–PICO, PICOS (adds study design), PICOT (adds time frame) or SPIDER (qualitative questions: sample, phenomenon of interest, design, evaluation, research type)
meshboolean–Expand each term with MeSH headings and entry terms from the bundled snapshot (offline). Terms it does not know stay as written.
query_elements––Elements to build the query from. Default: population and intervention (sample and phenomenon_of_interest for SPIDER); outcome terms are rarely indexed and cut recall.
questionstringyesThe research or clinical question

Structured output declared, but exposes no named fields.

No examples provided.

preprint_analysis ~59

Preprint-specific quality assessment using an LLM (requires an LLM provider).

NameTypeReqDescription
pmidstringyesPubMed ID
preprint_serverstring–Preprint server, e.g. bioRxiv, medRxiv

Structured output declared, but exposes no named fields.

No examples provided.

ref_resolve_doi ~29

Resolve a DOI to bibliographic metadata.

NameTypeReqDescription
doistringyesDOI to resolve

Structured output declared, but exposes no named fields.

No examples provided.

ref_resolve_pmid ~32

Resolve a PubMed ID to bibliographic metadata.

NameTypeReqDescription
pmidstringyesPubMed ID

Structured output declared, but exposes no named fields.

No examples provided.

research_question_analysis ~49

Expand and analyze a research question using an LLM (requires an LLM provider).

NameTypeReqDescription
research_questionstringyesResearch question
time_framestring–Time frame for literature search

Structured output declared, but exposes no named fields.

No examples provided.

search_authors ~37

Search for authors in Europe PMC.

NameTypeReqDescription
limitinteger–Number of results
querystringyesAuthor name or affiliation
NameTypeReqDescription
resultarrayyes–

No examples provided.

search_papers ~218

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.

NameTypeReqDescription
date_fromstring–First publication date, from (YYYY, YYYY-MM or YYYY-MM-DD)
date_tostring–First publication date, to (YYYY, YYYY-MM or YYYY-MM-DD)
has_fulltextboolean–Only articles with full text
limitinteger–Number of results
open_accessboolean–Only open-access articles
querystringyesSearch query
result_typestring–Europe PMC result type
sortstring–Sort order, e.g. 'cited' or 'date'
sourcestring–Restrict to one source, e.g. MED, PMC or PPR (preprints)
synonymboolean–Expand the query with MeSH synonyms
NameTypeReqDescription
resultarrayyes–

No examples provided.

summarize_citations ~50

Summarize citation activity for a paper using an LLM (requires an LLM provider).

NameTypeReqDescription
citation_countinteger–Number of citations
pmidstringyesPubMed ID

Structured output declared, but exposes no named fields.

No examples provided.

tag_paper_sentences ~397

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.

NameTypeReqDescription
doistring–DOI (alternative to pmcid)
max_charsinteger–Stop after this many characters of sentence text, between sentences
min_confidencenumber–A sentence the rules are less sure about is 'unknown'
pmcidstring–PMC ID of the article, e.g. PMC1234567
pmidstring–PubMed ID (alternative to pmcid)
roles––Only these roles: background, motivation, method, result, claim, limitation, conclusion, unknown. Default: all.
sections––Only sentences of these sections: case-insensitive substrings of a section title, e.g. ['results', 'discussion']. Default: the whole body.
use_llmboolean–Also ask the configured LLM about up to 40 sentences the rules left 'unknown'. Needs the agentic extra and a provider, like the other LLM tools; the sentences are sent to it.

Structured output declared, but exposes no named fields.

No examples provided.

translate_query ~162

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

NameTypeReqDescription
querystringyesA Europe PMC search query
targetstring–Database to translate the query for

Structured output declared, but exposes no named fields.

No examples provided.

unified_search ~224

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.

NameTypeReqDescription
diagnosticsboolean–Also return `sources`: for each queried source whether it answered (`ok`), found nothing (`empty`), failed (`error`), was rate limited (`rate_limited`) or could not be created (`unavailable`), with i…
limitinteger–Max results per source
querystringyesSearch query
sources––Sources to query, e.g. ['europepmc', 'arxiv', 'semantic_scholar', 'openalex', 'clinicaltrials']. Defaults to the server's configured source set.

Structured output declared, but exposes no named fields.

No examples provided.

validate_query ~152

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.

NameTypeReqDescription
querystringyesA Europe PMC search query

Structured output declared, but exposes no named fields.

No examples provided.

Install

How do I install the PyEuropePMC MCP server?

PyEuropePMC runs locally as a PyPI package, launched with uvx pyeuropepmc. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · pyeuropepmc

# add to Claude Code
claude mcp add jonasheinickebio-pyeuropepmc -- uvx pyeuropepmc
Common questions

What is the PyEuropePMC MCP server?

PyEuropePMC is an MCP server listed in the public MCP registry as io.github.JonasHeinickeBio/pyeuropepmc. Europe PMC search, search analytics, full text, enrichment, PICO, MeSH, data links, export, auth. This page covers its PyPI package (pyeuropepmc).

Is the PyEuropePMC MCP server safe to use?

PyEuropePMC scores 74 out of 100 on VerifyMCP. We recorded 2 known advisories against it as of 4 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the PyEuropePMC MCP server expose?

PyEuropePMC exposes 47 tools: unified_search, search_papers, count_papers, get_paper_details, search_authors, and 42 more. Their descriptions and schemas cost roughly 6,996 tokens of context every time the server is loaded.

Is the PyEuropePMC MCP server still maintained?

PyEuropePMC is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the PyEuropePMC MCP server under?

PyEuropePMC declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.