PubMed
One-line summary: PubMed MCP is a read-only MCP server that gives an AI assistant 17 tools for medical/biomedical literature search, full-text retrieval, citations, drug safety and clinical trial research across PubMed, Europe PMC, PMC, MeSH, ClinicalTrials.gov, Semantic Scholar, OpenFDA and DrugBank.
Search literature —
pubmed_search(year, free-fulltext, abstract filters, sortable) andpubmed_europepmc_search(preprints, patents, Agricola);pubmed_spell_checkcleans up queries first.Retrieve article data —
pubmed_fetch(full metadata: abstract, authors, DOI, grants, optional MeSH),pubmed_summary(fast batch summaries, up to 50 PMIDs),pubmed_convert_ids(DOI ↔ PMID ↔ PMCID).Explore citation networks —
pubmed_find_related(similar / cited-by / references),pubmed_citation_search(partial citation → PMID),pubmed_semantic_scholar(citation counts, influence, OA PDF links).Get full text —
pubmed_fetch_fulltext, chaining PMC → Europe PMC → Unpaywall and returning structured sections (Introduction, Methods, Results, ...) with section filtering.Vocabulary & formatting —
pubmed_lookup_meshfor Medical Subject Headings;pubmed_format_citationsfor APA, MLA, BibTeX, RIS and Vancouver styles.Clinical trials —
pubmed_clinical_trialssearches ClinicalTrials.gov by condition, intervention and status.Drug safety & pharmacology —
openfda_adverse_events(FAERS side effects),openfda_drug_label(indications, warnings, dosage, mechanism),openfda_drug_enforcement(recalls, withdrawals),drugbank_search(targets, enzymes, interactions).Operational notes — works with no API keys (all optional; NCBI/S2/DrugBank keys only raise rate limits or unlock extras), read-only, self-throttled for shared public APIs, and installable in any MCP client via
uvxfrom GitHub.
Provides tools for biomedical literature research: searching PubMed with filters, fetching article metadata and summaries by PMID, finding related and citing articles, resolving partial citations, spell-checking queries, looking up MeSH terms, converting between DOI/PMID/PMCID, retrieving full texts from PMC/Europe PMC/Unpaywall, formatting citations, and searching clinical trials.
Provides access to Semantic Scholar data, including citation counts, influence metrics, and open-access PDF links for academic papers.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@PubMed search for recent articles on mRNA vaccines and cancer therapy"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
pubmed-mcp
An MCP server for medical and biomedical literature research — 17 tools covering PubMed, Europe PMC, full-text retrieval, MeSH, citations, clinical trials, Semantic Scholar, OpenFDA and DrugBank.
One file, deps: FastMCP + httpx only. Works out of the box — all API keys are optional (they raise rate limits and enable a couple of extras). Read-only: it never writes to upstream services.
17 tools · optional API keys · read-only · works with any MCP client (Claude Desktop, Claude Code, Cursor, Windsurf, Hermes, ...).
The server itself is a single Python file: server.py — everything else in this repo is documentation, packaging and tests.
What it gives your assistant
# | Tool | Source | What it does |
1 |
| PubMed | Search with year / free-fulltext / abstract filters |
2 |
| PubMed | Full metadata by PMID (abstract, authors, DOI, grants) |
3 |
| PubMed | Fast summaries for many PMIDs at once |
4 |
| PubMed | Similar / citing / reference articles |
5 |
| PubMed | Partial citation → PMID resolution |
6 |
| Europe PMC | Broader corpus: preprints, patents, Agricola |
7 |
| NCBI ESpell | Medical and biomedical query spell check |
8 |
| MeSH | Medical Subject Headings vocabulary |
9 |
| PMC ID Converter | DOI ↔ PMID ↔ PMCID conversion |
10 |
| PMC / Europe PMC / Unpaywall | Full text as structured sections |
11 |
| Local | APA, MLA, BibTeX, RIS, Vancouver |
12 |
| ClinicalTrials.gov | Search studies by condition / drug / status |
13 |
| Semantic Scholar | Citation counts, influence, OA PDF links |
14 |
| FDA FAERS | Drug side-effect reports |
15 |
| FDA labels | Indications, warnings, mechanism, PK |
16 |
| FDA | Recalls and market withdrawals |
17 |
| DrugBank | Drug targets / interactions (needs free key) |
Related MCP server: pubmed-evidence
Quick start
No installation needed — run it straight from GitHub with uv:
uvx --from git+https://github.com/BerkayCelk/pubmed-mcp pubmed-mcpor from a clone:
pip install -r requirements.txt
python server.pyClient setup
Claude Desktop — merge into claude_desktop_config.json:
{
"mcpServers": {
"pubmed": {
"command": "uvx",
"args": ["--from", "git+https://github.com/BerkayCelk/pubmed-mcp", "pubmed-mcp"]
}
}
}Claude Code:
claude mcp add pubmed -- uvx --from git+https://github.com/BerkayCelk/pubmed-mcp pubmed-mcpCursor (~/.cursor/mcp.json) and Windsurf: same JSON shape as Claude Desktop.
Hermes: add to your config.yaml under mcp_servers (see examples/hermes_config.yaml).
Ready-made config files live in examples/.
For AI agents (automated setup)
Written so an AI coding agent (Claude Code, Codex, Cursor, Hermes, ...) can install and verify this server on its own.
1. Install command (no clone needed):
uvx --from git+https://github.com/BerkayCelk/pubmed-mcp pubmed-mcp2. Register with a client:
Claude Code:
claude mcp add pubmed -- uvx --from git+https://github.com/BerkayCelk/pubmed-mcp pubmed-mcpClaude Desktop — merge into
claude_desktop_config.json(~/Library/Application Support/Claude/on macOS,%APPDATA%\Claude\on Windows,~/.config/Claude/on Linux):{"mcpServers": {"pubmed": {"command": "uvx", "args": ["--from", "git+https://github.com/BerkayCelk/pubmed-mcp", "pubmed-mcp"]}}}Cursor — same JSON in
~/.cursor/mcp.json(project scope:.cursor/mcp.json).Hermes — see
examples/hermes_config.yaml.Any other MCP client — register this stdio command:
uvx --from git+https://github.com/BerkayCelk/pubmed-mcp pubmed-mcp
3. Verify (no client needed):
printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"probe","version":"0"}}}' | uvx --from git+https://github.com/BerkayCelk/pubmed-mcp pubmed-mcp | head -c 400Expect JSON containing "serverInfo":{"name":"PubMed".
4. Usage notes for agents:
Literature questions ->
pubmed_search, thenpubmed_fetch/pubmed_summaryfor the hits; usepubmed_europepmc_searchfor preprints and grey literature.Full text ->
pubmed_fetch_fulltext(chain: PMC → Europe PMC → Unpaywall; setUNPAYWALL_EMAILto enable the last step).Drug safety ->
openfda_*tools (no key needed);drugbank_searchrequires a freeDRUGBANK_API_KEY.Batch PMIDs whenever possible (up to 50 per call) and don't remove the built-in throttles — these are shared public APIs.
5. Copy-paste prompt for users:
Set up the PubMed MCP server for me: register
uvx --from git+https://github.com/BerkayCelk/pubmed-mcp pubmed-mcpas a stdio MCP server namedpubmedin my client config, restart/reload the client, then verify by calling thepubmed_searchtool with a small test query.
Optional API keys
Everything works without keys. Keys only raise rate limits or enable extras:
Env var | Effect | Where to get it |
| 3 → 10 requests/sec on NCBI | |
| Enables the Unpaywall fallback in | — |
| Relaxes Semantic Scholar rate limits | |
| Polite-pool identifier for Europe PMC | — |
| Enables |
Full text chain & rate limits
pubmed_fetch_fulltext tries, in order: NCBI PMC → Europe PMC → Unpaywall,
returning structured sections (Introduction, Methods, Results, ...) when available.
The server throttles itself: 0.35 s between NCBI calls (0.1 s with a key) and 3 s for Semantic Scholar. This wraps shared public APIs — please keep the throttles. Data sources: NCBI, Europe PMC, OpenFDA, ClinicalTrials.gov, Semantic Scholar, Unpaywall, DrugBank.
Development
Run from a clone:
uv run --with fastmcp --with httpx python server.pySmoke test (spawns the server over stdio, a few live calls — keep it gentle):
uv run --with fastmcp --with httpx python smoke_test.pyPackaging check:
uv build
Disclaimer
Unofficial community project — not affiliated with or endorsed by NCBI/NLM, Europe PMC, the FDA, ClinicalTrials.gov, Semantic Scholar, OurResearch, or DrugBank. For research assistance only; not medical advice.
License
MIT — see LICENSE.
Available Tools
17 toolsdrugbank_searchDrugbank SearchB
Search DrugBank for drug information: targets, enzymes, interactions.
Requires DRUGBANK_API_KEY env var (free key at https://go.drugbank.com).
Inputs: query (required), max_results. Returns: object
openfda_adverse_eventsOpenfda Adverse EventsB
Query FDA Adverse Event Reporting System (FAERS) for drug side effects.
Inputs: drug_name (required), limit. Returns: object
openfda_drug_enforcementOpenfda Drug EnforcementC
Query FDA enforcement reports (recalls, warnings, market withdrawals).
Inputs: limit, drug_name. Returns: object
openfda_drug_labelOpenfda Drug LabelC
Get FDA drug label information: indications, warnings, dosage, mechanism.
Inputs: drug_name (required). Returns: object
pubmed_citation_searchPubmed Citation SearchB
Resolve partial citation to PMID using NCBI's citation matcher. At least one field required. More fields = better match.
Inputs: page, year, author, volume, +1 more. Returns: object
pubmed_clinical_trialsPubmed Clinical TrialsC
Search ClinicalTrials.gov for clinical studies.
Inputs: status, condition, max_results, intervention. Returns: object
pubmed_convert_idsPubmed Convert IdsA
Convert between DOI, PMID, and PMCID. Only resolves articles indexed in PubMed Central.
Inputs: ids (required), input_type. Returns: object
pubmed_europepmc_searchPubmed Europepmc SearchA
Search Europe PMC — broader than PubMed: includes preprints, patents, Agricola.
Inputs: query (required), sort, sources, min_year, +1 more. Returns: object
pubmed_fetchPubmed FetchA
Fetch detailed article metadata by PubMed IDs.
Inputs: pmids (required), include_mesh. Returns: object
pubmed_fetch_fulltextPubmed Fetch FulltextB
Fetch full-text articles via PMC → Europe PMC → Unpaywall chain.
Inputs: pmids (required), max_sections, sections_filter. Returns: object
pubmed_format_citationsPubmed Format CitationsC
Generate formatted citations for articles.
Inputs: pmids (required), style. Returns: object
pubmed_lookup_meshPubmed Lookup MeshB
Search and explore MeSH (Medical Subject Headings) vocabulary.
Inputs: term (required), max_results. Returns: object
pubmed_searchPubmed SearchC
Search PubMed for biomedical articles.
Inputs: query (required), sort, max_year, min_year, +3 more. Returns: object
pubmed_semantic_scholarPubmed Semantic ScholarA
Search or analyze papers via Semantic Scholar API (citations, influence, references).
Use search_mode='search' for keyword search, or 'paper' with paper_id (DOI, PMID prefixed with 'PMID:', or Semantic Scholar ID) for deep analysis.
Inputs: query, paper_id, max_results, search_mode. Returns: object
pubmed_spell_checkPubmed Spell CheckA
Spell-check a biomedical query using NCBI's ESpell service. Useful for query refinement before searching.
Inputs: query (required). Returns: object
pubmed_summaryPubmed SummaryA
Get concise summaries of articles — faster than pubmed_fetch. Up to 50 PMIDs per request.
Inputs: pmids (required). Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 17 tools
Each tool targets a distinct source, action, or resource: search vs. summary vs. fetch vs. full-text vs. citation matching vs. ID conversion, with separate tools for Europe PMC, ClinicalTrials.gov, Semantic Scholar, FDA, and DrugBank. Overlaps are minimal and well-clarified by descriptions.
All names use snake_case with a source prefix (pubmed_, openfda_, drugbank_), which is predictable. However, the pubmed_ group mostly follows verb_noun while openfda_ tools use noun phrases, a minor deviation.
17 tools is slightly above the ideal 3–15 range but reasonable for a broad biomedical literature and drug information server spanning multiple APIs and workflows. Each tool appears to earn its place.
The surface covers the full literature research lifecycle: query refinement, search across multiple databases, summaries, metadata, full text, citation resolution, ID conversion, formatting, related articles, MeSH lookup, clinical trials, and drug safety/label data. No obvious gaps for the stated domain.
Maintenance
Related MCP Connectors
Search biomedical literature, get article details, find related articles, and explore MeSH terms
Search biomedical papers, inspect publication records, and traverse citation or semantic graphs.
Search PubMed/Europe PMC, fetch articles and full text (PMC/EPMC/Unpaywall), citations, MeSH terms.
Search 36M+ PubMed biomedical articles and ClinicalTrials.gov studies.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables comprehensive biomedical literature research through PubMed database access with advanced search, full-text retrieval, citation analysis, and batch processing capabilities. Supports both local deployment and cloud hosting for seamless integration with AI assistants.1MIT
- AlicenseNot gradedqualityCmaintenanceEnables PubMed literature search, metadata retrieval, BibTeX export, and evidence table generation for biomedical research agents.2MIT
- AlicenseNot gradedqualityAmaintenanceEnables searching biomedical literature across PubMed, PubMed Central, and Europe PMC, fetching article metadata and full text, resolving citations and identifiers, and grounding queries in MeSH vocabulary. Runs over stdio or Streamable HTTP, exposing 11 tools, a database-info resource, and a research-plan prompt.9 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables searching PubMed, PubMed Central, and Europe PMC and fetching article metadata, full text, citations, related works, MeSH terms, and identifier conversions. Runs over STDIO or Streamable HTTP and exposes 11 tools, a database info resource, and a research-planning prompt.9 npmMIT