PyEuropePMC

io.github.JonasHeinickeBio由 GitHub 帳號 JonasHeinickeBio 發布v4.7.1更新於 Nov 7, 2026

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

概覽

AI 產生的概覽

讓 AI 助理跨 Europe PMC 等來源檢索生物醫學與科學文獻、閱讀開放取用全文並匯出參考文獻。

可以做什麼
  • 在 Europe PMC、PubMed、arXiv、Semantic Scholar、OpenAlex 與 ClinicalTrials.gov 中檢索與計數論文,並支援作者檢索及查詢語句的建構、驗證與轉換
  • 批次查詢論文詳情與中繼資料,補充引用影響力、資助與撤稿資訊,並沿引用關係向前或向後追溯
  • 以 Markdown 或分節形式閱讀開放取用全文,依作用標註句子,並列出圖、表與補充資料
  • 查找文字探勘出的實體與資料連結,定位免費副本,並把 PDF 下載到伺服器磁碟
  • 將參考文獻匯出為 BibTeX、RIS、CSL-JSON、CSV、JSON 或 Markdown,並以彙總統計概述檢索結果
  • 可選的大型語言模型工具用於引用分析、論文篩選、研究問題分析與文獻回顧
適用情境
適合需要尋找、篩選或閱讀科學論文、追溯引用、以 PICO 或 MeSH 詞彙規劃系統性回顧檢索,或直接在對話中產生參考文獻清單的情境。
執行需求
以本機 Python 套件執行(Python 3.10 至 3.13),可透過 uvx 或 pip 安裝,核心安裝即包含 MCP 伺服器。Europe PMC 不需金鑰。選用:OPENAI_API_KEY(搭配 OPENAI_BASE_URL 與 OPENAI_MODEL)供大型語言模型工具使用,SEMANTIC_SCHOLAR_API_KEY 提高速率上限,UNPAYWALL_EMAIL 用於開放取用查詢,PYEUROPEPMC_MCP_DOWNLOAD_DIR 指定 PDF 資料夾。需要能連線各文獻來源的網路。
安裝前請注意
大型語言模型工具會把論文內容送到 OpenAI 相容介面,可能產生費用。download_papers_pdf 會把 PDF 寫入執行伺服器機器上的固定資料夾。UNPAYWALL_EMAIL 會把你的聯絡電子郵件隨每次 Unpaywall 請求送出。clear_cache 會改變伺服器狀態。選用的 HTTP 傳輸預設不驗證身分,除非設定 bearer token,應只綁定本機或加上權杖。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 PyEuropePMC,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

PyEuropePMC

[PyPI version] [Python versions] [CI] [codecov] [License: MIT] [MCP server]

[PyEuropePMC MCP server]

PyEuropePMC is a Python client for Europe PMC. It searches the literature, downloads open-access full text, and parses JATS XML into metadata, plain text and structured sections. It also ships a command-line tool and an MCP server for AI agents.

✨ Features

  • Europe PMC search with plain queries or a fluent QueryBuilder, pagination, and results as JSON, XML or Dublin Core. Search guide
  • Ten more sources in one search, with duplicates merged: PubMed, arXiv, ClinicalTrials.gov, OpenAlex, Semantic Scholar, CORE, DBLP, DOAJ, HAL and Zenodo. Semantic Scholar needs the semanticscholar extra and CORE an API key. Multi-source search
  • Full text: XML (Europe PMC first, then other open sources), PDF and HTML, plus bulk PDF downloads from the Europe PMC FTP server at EBI. PDFs also come from NCBI's open-access copy and, by DOI, from arXiv, Unpaywall, OpenAlex and Semantic Scholar, each with its source and licence (PDF download). Full-text retrieval
  • JATS XML parsing: metadata, authors, tables, figures and references; plain text and Markdown; typed sections for retrieval-augmented generation (RAG); JATS normalization and BioC export. XML parsing, JATS normalization
  • Text-mining annotations for genes, diseases, chemicals and their relationships. Examples
  • Citations and metadata: walk citation graphs, and enrich records from Crossref, Unpaywall, OpenAlex, Semantic Scholar, DataCite, ORCID, ROR and iCite. Citation walking, Enrichment
  • Analysis: pandas DataFrames, citation statistics, duplicate detection, plots, and PRISMA-style search logs for systematic reviews. Analytics, Review tracking
  • RDF knowledge graphs from parsed articles, mapped by the rdf_map.yml that ships with the package; pass RDFMapper(config_path=...) or PipelineConfig(rdf_config_path=...) to use your own. Data models and RDF
  • A command line and an MCP server, described below.

📦 Installation

bash
pip install pyeuropepmc                              # corepip install "pyeuropepmc[analytics,visualization]"   # add extras (quote the brackets)pip install "pyeuropepmc[all]"                       # every optional feature

PyEuropePMC supports Python 3.10 to 3.13. The core install covers search, full-text download, XML parsing, RDF, the command line and the MCP server. The extras add:

ExtraInstallsAdds
analyticspandas, numpyto_dataframe, citation_statistics, quality_metrics, remove_duplicates and CSV export
visualizationmatplotlib, seaborn, pandas, numpyThe plot_* functions and create_summary_dashboard
exportpandas, tabulate, xlsxwriterExcel and Markdown-table export (pyeuropepmc.utils.export)
semanticscholarsemanticscholarSemanticScholarClient and the semantic_scholar search source
enrichmentsemanticscholarSemantic Scholar data in PaperEnricher
bibliographybibtexparserBibTeX parsing, validation and RIS/CSL conversion, including the bib_* MCP tools
zoteropyzoteroThe Zotero client
agenticopenai, langchain, langchain-openai, langgraph, jinja2LLM analysis, the LLM MCP tools and pyeuropepmc claim
uiflask, tornadoThe web UI (pyeuropepmc claim serve)
signingcryptographySigned search logs for systematic reviews
benchmarkhuggingface-hubDownloading the published benchmark datasets (pyeuropepmc benchmark download)
rdfnothingKept so existing installs keep working; the core rdflib writes JSON-LD itself
standardjupyterlab, notebook, ipykernel, ipython, ipywidgets, matplotlib, seaborn, pandas, numpy, tabulate, xlsxwriter, requests-cache, richJupyter plus the analytics, plotting and export packages
allall of the aboveEvery optional feature

Upgrading from 1.x? The migration guide lists what moved into extras.

🚀 Quick start

python
from pyeuropepmc import FullTextClient, FullTextXMLParser, QueryBuilder, SearchClient
# 1. Search Europe PMC for open-access articles ("CRISPR AND OPEN_ACCESS:y")query = QueryBuilder().keyword("CRISPR").and_().field("open_access", True).build()with SearchClient() as search:    hits = search.search_and_parse(query, pageSize=10)pmcid = next(hit["pmcid"] for hit in hits if hit.get("pmcid"))
# 2. Download the article's JATS XML (raises an error if no source has it)with FullTextClient() as fulltext:    xml_path = fulltext.download_xml_by_pmcid(pmcid, output_path=f"articles/{pmcid}.xml")
# 3. Parse itparser = FullTextXMLParser(xml_path.read_text(encoding="utf-8"))metadata = parser.extract_metadata()print(metadata["title"])print(", ".join(metadata["authors"][:3]))text = parser.to_plaintext()  # or parser.to_markdown()
# 4. Collect text blocks with their section path, ready to chunk and embed for RAGchunks = []for section in parser.get_full_text_sections_structured():    if section["section_type"] not in ("front", "body"):  # skip back matter and appendices        continue    for block in section["content"]:        if block.get("text"):            path = section.get("section_path", section["title"])            chunks.append({"section": path, "type": block["type"], "text": block["text"]})print(f"{len(chunks)} text blocks")

section_type is front for the title and abstract, then body, back or appendix. Each block has a type such as paragraph, list, table or figure. Tables and figures carry label and caption, and tables also carry rows. The XML parsing guide covers the other extractors.

🔒 Safe XML parsing

PyEuropePMC parses every XML document it reads with defusedxml: full-text articles, Europe PMC search results, arXiv and PubMed responses, and local files. A DOCTYPE declaration is accepted, but a document that declares entities, internal or external, is refused rather than expanded; FullTextXMLParser raises ParsingError. lxml is not used and does not need to be installed.

💻 Command line

CommandWhat it does
pyeuropepmc unified_searchsearch several sources with deduplication, or compare-sources to see each source's results
pyeuropepmc normalizeTurn JATS XML into clean text (text), sections (sections) or BioC JSON (bioc); classify a heading; batch a directory
pyeuropepmc benchmarkScore and profile the XML parser on a local folder or a published dataset
pyeuropepmc claimCheck the claims in a text against Europe PMC literature with LLM agents (needs the agentic extra and an API key)
bash
pyeuropepmc unified_search search "CRISPR base editing" --limit 10 --output results.jsonpyeuropepmc benchmark list-datasets

unified_search search queries Europe PMC, PubMed and arXiv unless you pass --source. Add --help to any command for its options.

🤖 MCP server

pyeuropepmc-mcp serves 48 tools over the Model Context Protocol, so an AI agent can search the literature, read papers and export references. The server is part of the core install.

JobWhat the tools do
SearchEurope PMC and ten more sources with duplicates merged, hit counts, author search, ClinicalTrials.gov
Summarise a searchPapers per year, citation thresholds and open-access share counted by Europe PMC over the whole result set, plus journals, authors, publication types, countries, funders and citation statistics from the first records, each labelled exact or sample, without returning the records
Check a queryA linter for the mistakes Europe PMC silently accepts (it answers a different query instead of an error), a query builder, a PubMed translator, and a recall check against papers you already know
Plan a searchA research question split into PICO, PICOS, PICOT or SPIDER elements (verbatim, missing ones reported, never invented) with a checked query, and MeSH headings, tree numbers and entry terms for search terms, offline from a bundled snapshot or from NLM on request
Look up papersMetadata for up to 100 papers by PMID, PMCID or DOI in one call; enrich one paper with citation impact, funders, institutions, open-access status and retractions from Europe PMC, Crossref, OpenAlex, Semantic Scholar and iCite
ReadOpen-access full text as Markdown or typed sections, with a section filter and a size cap, or its sentences tagged as background, method, result, limitation and so on whatever the headings are called; figures, tables and supplementary files; free copies of other papers through Unpaywall
Entities and dataGenes, chemicals and diseases text-mined from a paper, papers that mention an entity, and the data a paper links to (accession numbers, BioStudies, model-organism databases)
DownloadPDFs of up to 20 papers saved on the server's disk (download_papers_pdf), from Europe PMC, NCBI's PMC Open Access Subset, or for papers outside PubMed Central the open copies arXiv, Unpaywall, OpenAlex and Semantic Scholar know; each file's source and licence go into manifest.jsonl (guide)
CitationsCiting papers, references and citation-graph walking
ExportBibTeX, RIS, CSL-JSON, CSV, JSON or Markdown for a search or a list of papers
Resources and promptsepmc://paper/{pmcid} (full text), /references and /outline as attachable resources, and ready workflows for a literature review, a critical appraisal and a citation trace
DiagnoseA service-status probe and cache controls
Local and LLM toolsA local full-text index, bibliography conversion, and LLM-powered analysis

pip install "pyeuropepmc[all]" enables every tool; otherwise the bib_* tools need bibliography, and the LLM tools need agentic plus an OpenAI-compatible API key (see Configuration below).

bash
pyeuropepmc-mcp                                # stdio, for Claude Desktop and similar clientspyeuropepmc mcp                                # the same server, through the CLIpyeuropepmc-mcp --transport streamable-http    # HTTP at http://127.0.0.1:8000/mcp

For Claude Desktop and other clients that start the server themselves:

json
{  "mcpServers": {    "pyeuropepmc": {      "command": "pyeuropepmc-mcp"    }  }}

Without an install, "command": "uvx" with "args": ["pyeuropepmc", "mcp"] does the same; this is what the MCP Registry entry tells clients to run. For Claude Code, one command adds it:

bash
claude mcp add pyeuropepmc -- uvx pyeuropepmc mcp

Cursor (.cursor/mcp.json) and VS Code (.vscode/mcp.json, under "servers" instead of "mcpServers") take the same command and args.

The HTTP transport is open unless you set a bearer token (PYEUROPEPMC_MCP_AUTH_TOKEN or --auth-token-file; pyeuropepmc-mcp --generate-token makes one), so keep it on 127.0.0.1, set a token, or put an authenticating proxy in front of it; behind a proxy that forwards its public host name, add --allowed-host mcp.example.org. The MCP server guide walks through the common workflows, and the tool reference lists every tool. The server is listed in the MCP Registry as io.github.JonasHeinickeBio/pyeuropepmc.

⚙️ Configuration

Europe PMC needs no API key. Other services read these environment variables. A value passed in code, such as FullTextClient(email=...) or EnrichmentConfig(unpaywall_email=...), takes precedence.

VariableUsed for
UNPAYWALL_EMAIL, CROSSREF_EMAILContact e-mail for Unpaywall and Crossref. FullTextClient needs one of them for its Unpaywall fallback, and so does the MCP tool find_open_access.
PYEUROPEPMC_MCP_DOWNLOAD_DIRFolder the MCP tool download_papers_pdf saves PDFs in (default ~/Downloads/pyeuropepmc).
OPENALEX_EMAIL, DATACITE_EMAIL, ROR_EMAIL, ROR_CLIENT_IDThe other enrichment sources
SEMANTIC_SCHOLAR_API_KEYSemantic Scholar, with higher rate limits
CORE_API_KEYThe core search source
OPENAI_API_KEY, OPENAI_BASE_URL, OPENAI_MODELLLM features, with any OpenAI-compatible API; the model defaults to gpt-4o-mini
ZOTERO_API_KEY, ZOTERO_LIBRARY_ID, ZOTERO_LOCALThe Zotero client
PYEUROPEPMC_MCP_TRANSPORT, PYEUROPEPMC_MCP_HOST, PYEUROPEPMC_MCP_PORT, PYEUROPEPMC_MCP_LOG_LEVELDefaults for the pyeuropepmc-mcp options

The pyeuropepmc command also loads the first .env file it finds in the current directory, one of its parents, or ~/.config/pyeuropepmc/. Variables that are already set keep their values.

📚 Documentation

The guides are in docs/. Start with installation and the quick start, or go straight to the API reference, caching, the example scripts and the changelog.

Parser benchmark. On the 55 JATS articles in benchmark_xmls/xml, the parser's mean composite quality score is 0.998 (measured on 2026-09-15). The benchmarking guide explains the metrics. To reproduce the score from a source checkout, or to score a published dataset:

bash
pyeuropepmc benchmark run local --local-path benchmark_xmls/xml --limit 55pyeuropepmc benchmark download PLOS_1000   # 1,000 articles, 1.3 GBpyeuropepmc benchmark run PLOS_1000

The weekly benchmark workflow times the API clients and opens a pull request that refreshes the section below.

📊 Performance

Last updated: 2026-09-14

MetricValue
Benchmarked methods10
Total requests224
Mean call time0.871s
Success rate100.0%
📈 View full benchmark report

🚀 pyEuropePMC Benchmark Suite

Generated: 2026-09-14 07:45:39

📊 Summary

  • Total Benchmarks: 6
  • Total Methods: 10
  • Successful Runs: 10
  • Failed Runs: 0
  • Cache Enabled: 5

ArticleClient_NoCache

MethodMean TimeStd DevMean MemoryCacheRequestsErrors
get_article_details1.707s0.212s0.0MB❌310
p50: 1.620s · p95: 2.235s · ops: 0.59/s · runs: 30
get_citations1.789s0.318s0.0MB❌310
p50: 1.666s · p95: 2.851s · ops: 0.56/s · runs: 30

ArticleClient_Cached

MethodMean TimeStd DevMean MemoryCacheRequestsErrors
get_article_details<1ms<1ms0.0MB✅10
p50: 17µs · p95: 29µs · ops: 53390.19/s · runs: 30
get_citations<1ms<1ms0.0MB✅10
p50: 19µs · p95: 30µs · ops: 48437.33/s · runs: 30

SearchClient_NoCache

MethodMean TimeStd DevMean MemoryCacheRequestsErrors
search2.074s0.262s0.1MB❌310
p50: 1.964s · p95: 2.673s · ops: 0.48/s · runs: 30
get_hit_count2.085s0.562s0.0MB❌310
p50: 1.933s · p95: 3.668s · ops: 0.48/s · runs: 30

SearchClient_Cached

MethodMean TimeStd DevMean MemoryCacheRequestsErrors
search<1ms<1ms0.0MB✅10
p50: 109µs · p95: 134µs · ops: 8795.90/s · runs: 30
get_hit_count<1ms<1ms0.0MB✅10
p50: 111µs · p95: 137µs · ops: 8603.62/s · runs: 30

FullTextClient_NoCache

MethodMean TimeStd DevMean MemoryCacheRequestsErrors
check_fulltext_availability1.050s0.148s0.1MB❌930
p50: 0.998s · p95: 1.388s · ops: 0.95/s · runs: 30

FullTextClient_Cached

MethodMean TimeStd DevMean MemoryCacheRequestsErrors
check_fulltext_availability<1ms<1ms0.0MB✅30
p50: 20µs · p95: 21µs · ops: 48496.45/s · runs: 30

🔁 Cache vs No-Cache Comparison

ArticleClient — cached vs no-cache

MethodNo-Cache MeanCached MeanSpeedup (no/cache)
get_article_details1.707s<1ms>17074.4x
get_citations1.789s<1ms>17888.5x

FullTextClient — cached vs no-cache

MethodNo-Cache MeanCached MeanSpeedup (no/cache)
check_fulltext_availability1.050s<1ms>10504.7x

SearchClient — cached vs no-cache

MethodNo-Cache MeanCached MeanSpeedup (no/cache)
get_hit_count2.085s<1ms17941.89x
search2.074s<1ms18245.92x
  • Average speedup for SearchClient (no-cache / cached): 18093.91x

Notes: Means are computed over measured iterations; '-' indicates missing data. Values like '<1ms' indicate very fast cached responses. Speedups shown as lower-bounds when cached times are too small to measure precisely.

⚙️ How to reproduce

Run the modular benchmark locally and regenerate these artifacts:

bash
pytest tests/benchmark_article_client.py::test_modular_benchmark_system -m benchmark --force-enable-socket --timeout=3600
  • Detailed JSON results: MODULAR_BENCHMARK_RESULTS.json

🤝 Contributing

Contributions are welcome. The development guide covers setup, testing, code quality and the release process. Report bugs and suggest features in the issue tracker.

📝 Citation

If PyEuropePMC supports your research, please cite it and give the version you used (pip show pyeuropepmc prints it):

bibtex
@software{pyeuropepmc,  author = {Heinicke, Jonas},  title  = {{PyEuropePMC}: a Python toolkit for Europe PMC},  url    = {https://github.com/JonasHeinickeBio/pyEuropePMC}}

The literature itself comes from Europe PMC; please acknowledge it as your data source.

📄 License

PyEuropePMC is released under the MIT License. Articles you retrieve keep their own licences, which FullTextXMLParser.extract_license() reads from the XML.

來源:README.md,提交 034b655

工具

48

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

count_papers

Count papers

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

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.

無需輸入參數。

cache_status

Cache status

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

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_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必填

版本歷史

15
  1. v4.7.1最新Nov 7, 2026
  2. v4.6.1Nov 3, 2026
  3. v4.6.0Oct 29, 2026
  4. v4.4.0Oct 26, 2026
  5. v4.3.0Oct 26, 2026
  6. v4.2.0Oct 22, 2026
  7. v4.1.0Oct 22, 2026
  8. v4.0.1Oct 21, 2026
  9. v3.9.0Oct 21, 2026
  10. v3.8.0Oct 19, 2026
  11. v3.6.0Oct 19, 2026
  12. v3.2.0Oct 19, 2026
  13. v3.1.0Oct 18, 2026
  14. v3.0.0Sep 17, 2026
  15. v2.2.1Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分