pubmed-mcp-server
This server gives an AI client programmatic access to biomedical literature across PubMed, PubMed Central, Europe PMC, and NIH iCite — searching, fetching metadata and full text, resolving citations, and formatting references.
Search PubMed (
pubmed_search_articles) with full NCBI query syntax, plus filters for author, journal, MeSH terms, publication type, language, species, abstract availability, free full text, and date ranges.Fetch article metadata (
pubmed_fetch_articles) by PMID — abstracts, authors, journal info, MeSH terms, grants, databank accessions (e.g. trial registrations), collective-author investigators, and linked retraction/erratum/comment notices.Fetch full text (
pubmed_fetch_fulltext) by PMID, PMCID, or DOI, as structured JATS sections/tables/figures from PMC, falling back to Europe PMC, then Unpaywall; supports section filtering and character budgets.Search and fetch Europe PMC records (
pubmed_europepmc_search,pubmed_europepmc_fetch) to reach preprints, patents, Agricola, and EPMC-only open-access items, including complete untruncated abstracts.Get citation metrics (
pubmed_fetch_citation_metrics) from NIH iCite — Relative Citation Ratio, NIH percentile, citation counts/rates, Approximate Potential to Translate, and MeSH category shares.Format citations (
pubmed_format_citations) in APA 7th, MLA 9th, BibTeX, RIS, or Vancouver, with retraction/correction notices surfaced.Find related articles (
pubmed_find_related) — similar articles, citing articles, or references, with fallback across NCBI, Europe PMC, and OpenAlex.Spell-check queries (
pubmed_spell_check) via NCBI ESpell without disturbing field tags or gene symbols.Look up MeSH vocabulary (
pubmed_lookup_mesh) — descriptors, supplementary concepts, qualifiers, and pharmacological actions with tree numbers, scope notes, entry terms, and the PubMed search clause for each.Resolve partial citations to PMIDs (
pubmed_lookup_citation) via ECitMatch, up to 25 at a time, with match status and disambiguation warnings.Convert identifiers (
pubmed_convert_ids) between DOI, PMID, and PMCID for PMC-indexed articles.Read database metadata via the
pubmed://database/inforesource (EInfo fields, record count, last update).Generate a research plan through the
research_planprompt, a structured four-phase biomedical research outline.
Connects AI agents to NCBI's PubMed and E-utilities, enabling search, retrieval, and analysis of biomedical literature. Provides tools for searching articles, fetching detailed content, finding related articles, generating citations, creating research plans, and visualizing data through charts.
Generates SVG chart visualizations from PubMed data, supporting bar, line, and scatter chart types for data representation.
Built with TypeScript for type safety and robust input validation, ensuring secure and reliable interactions with PubMed's biomedical data.
Utilizes Vega-Lite specifications to render SVG charts from PubMed data, enabling visualization of biomedical research trends and statistics.
Processes PubMed article data in XML format, providing JSON representation of the PubMedArticle XML structure through the fetch_pubmed_content tool.
Uses Zod for schema validation of inputs and outputs when interacting with PubMed, ensuring type safety and proper data formatting.
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-mcp-server search for recent articles about CRISPR gene editing in 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.
Public Hosted Server: https://pubmed.caseyjhand.com/mcp
Overview
Biomedical literature from PubMed, PubMed Central, and Europe PMC. Search it, fetch metadata and full text, resolve identifiers and partial citations, format references, and ground queries in MeSH vocabulary. Runs as a stdio process, a local Streamable HTTP server, or the public hosted endpoint above. Ships the pubmed-guide agent skill (skill://pubmed-guide/SKILL.md), which MCP clients read for PubMed query syntax, DOI-to-PMID routes outside PMC, reference-list resolution, citation counts, and full-text misses.
Tools
Tool | Description |
| Search PubMed with full query syntax, structured filters, date ranges, and optional summaries |
| Fetch article metadata by PMID: abstract, authors, journal, MeSH terms, databank accessions such as trial registration IDs, grants, a collective author's investigators on request, linked retraction and correction notices |
| Fetch full text by PMID, PMCID, or DOI, falling back from PMC to Europe PMC to Unpaywall |
| Search Europe PMC for preprints, patents, Agricola, and open-access records PubMed doesn't carry |
| Fetch complete Europe PMC records, including the untruncated abstract, as |
| Fetch NIH iCite citation metrics by PMID: Relative Citation Ratio, NIH percentile, citation counts and rates |
| Format citations in APA 7th, MLA 9th, BibTeX, RIS, or Vancouver (ICMJE/NLM), with linked retraction and correction notices |
| Find similar articles, citing articles, or references for a PMID |
| Correct a misspelled PubMed query via NCBI ESpell |
| Look up MeSH records (descriptors, supplementary concepts, qualifiers, pharmacological actions) with the PubMed clause that searches each, tree numbers, scope notes, and entry terms |
| Resolve partial references, up to 25 at a time, to PMIDs via ECitMatch |
| Convert between DOI, PMID, and PMCID via the PMC ID Converter |
Resources
Resource | Description |
| PubMed database metadata via EInfo (field list, record count, last update) |
Prompts
Prompt | Description |
| Generate a structured four-phase biomedical research plan |
Related MCP server: PubMed MCP Server
Capability reference
pubmed_search_articles tool
Full PubMed query syntax plus filters (author, journal, MeSH, publication type, language, species, abstract, free full text) and publication/modification/Entrez date ranges
queryis optional: with an author, journal, MeSH, or publication-type filter, the filters alone make the search (a journal's output over a date range, for example)Up to 1,000 results per page and offsets up to 9,998, or
maxResults: 0for the match count alone;summaryCountadds briefs for up to 50 hits. A larger page size is served at the cap with a notice naming where to continue; a page that reaches PubMed's 9,999-record window says how many matches nooffsetcan reach and advises narrowing or splitting the query bydateRangeReports
totalCount, theeffectiveQueryPubMed ran, and theappliedFiltersRejects blank filter values, impossible dates, and reversed date ranges before PubMed is called
pubmed_fetch_articles tool
Up to 200 PMIDs per call; misses are listed in
unavailablePmidsAbstract, authors, journal, DOI, publication types, linked retraction/erratum/comment notices, and links; MeSH terms on by default, grants via
includeGrants, and the members of a collective author (itsInvestigatorList, thousands on some consortium trials) viaincludeInvestigatorsA retracted, corrected, or questioned article opens with the same notice block as
pubmed_format_citations, directly under its titledataBankslists the record's trial registrations and data deposits (ClinicalTrials.gov NCT IDs, GenBank and PDB accessions, Dryad DOIs) verbatim; searchpubmed_search_articlesfor<accession>[si]to find other records citing onerecordTypeseparates journal articles from Bookshelf chapters and books; opt-inmaxResponseCharactersdefers overflow todeferred.ids
pubmed_fetch_fulltext tool
pmcids,pmids, anddoisin any mix, up to 50 distinct identifiers per call: the first 10 are fetched and the rest returned inoverLimitfor a follow-up call. Each is tried against PMC, then Europe PMC, then Unpaywall (needsUNPAYWALL_EMAIL); an article several of them name is fetched and returned once, andviaSourcenames the tier that answeredsource: "pmc"returns sections (the body, then back matter such as acknowledgments, declarations, and appendices), tables, and figures;source: "unpaywall"returns a best-effort HTML or PDF text bodyEurope PMC full text is fetched for records Europe PMC marks open access, preprints included; articles carry the
licensestheir PMC JATS statesMisses carry a typed
reasonandtriedTiers;sections,maxSections,maxCharacters,overflowMode, andmaxResponseCharactersbound the response,truncationreports what was cut, andsectionCapnames the sectionsmaxSectionscut
pubmed_europepmc_search tool
Adds preprints (
PPR), patents (PAT), and Agricola (AGR) toMEDandPMC; defaults toMED,PMC,PPRCursor pagination via
cursorMark/nextCursorMark, up to 100 per page; a larger page size is served at the cap with a notice naming where to continue. Abstracts arrive as 400-character snippetsOptional
sortof comma-separated<field> asc|desckeys;relevanceis the default order, and a sort Europe PMC cannot use fails aseuropepmc_invalid_inputHits carry
licenseandhasFullTextXmlNot registered when
EUROPEPMC_ENABLED=false
pubmed_europepmc_fetch tool
Up to 25 records per call as
records: [{ source, epmcId }], each pair copied from a search hit, with the full abstract,license, andhasFullTextXml; unresolved ids land innotFound; opt-inmaxResponseCharactersdefers overflow todeferred.recordsNot registered when
EUROPEPMC_ENABLED=false
pubmed_fetch_citation_metrics tool
Up to 1,000 PMIDs per call; the first 200 distinct are fetched and the rest returned in
overLimit, PMIDs NIH iCite has no record for inunavailablePmidsRelative Citation Ratio (with a provisional flag), NIH percentile, citation count and rates, Approximate Potential to Translate, MeSH category shares, and clinical citations
iCite does not flag retractions; check
pubmed_fetch_articlesfor noticesSource: NIH iCite
pubmed_format_citations tool
Up to 50 PMIDs per call, in any mix of
apa,mla,bibtex,ris, andvancouverBookshelf records cite as edited books, each chapter dated by its own last revision or contribution date; PMIDs that can't be fetched are reported as unavailable
Vancouver writes page ranges in elided Citing Medicine form (
1637-1645→1637-45); BibTeXissnand RISSNcarry the journal's linking ISSN, and RISTIdrops its trailing periodRetractions, errata, and expressions of concern NCBI links to an article come back as
noticesand are shown ahead of its citations; Vancouver adds aRetraction in:/Erratum in:note and APA a retraction parenthetical
pubmed_find_related tool
similar,cited_by, orreferences, up to 50 per page with offset pagination. A larger page size is served at the cap with a notice naming where to continueRows carry the same identifiers as search summaries:
doi,pmcIdandpmcUrlwhen the record has them, and apubmedUrlon every rowFalls back to Europe PMC, then OpenAlex, and names the provider that answered; fails as
all_providers_failedif none can
pubmed_spell_check tool
Returns
original,corrected, andhasSuggestion; corrections land in place, so field tags, operators, spacing, and gene symbols stay as written, and a single letter such as an author initial is never swapped for anotherValues of indexed field tags (
aged[mh],zhang y[au],free full text[sb]) are kept as written; free-text fields ([tiab],[ti],[tw]) are still correctedRun it after a zero-hit or thin search, then retry
pubmed_search_articleswithcorrected
pubmed_lookup_mesh tool
MeSH records of every type (descriptors, supplementary concepts, qualifiers, pharmacological actions) by name or free-text term, with the exact heading match pinned first: the record the query names, a descriptor before a qualifier or pharmacological-action record of the same name, or the heading an entry term maps to; up to 50 per page, continued via
nextOffset. A larger page size is served at the cap with a notice naming where to continueRecords carry their MeSH unique ID (
meshId, e.g.D000072657) beside the Entrez UID, theirrecordType, and asearchTerm, the PubMed clause that searches them ("Name"[mh],[nm]for a supplementary concept,[pa],[pt],[sh]); a drug-class heading returns its descriptor and its pharmacological-action record as two records under one name and ID, told apart byrecordTypeincludeDetails(default on) adds tree numbers, scope notes, entry terms,yearIntroduced, andpreviousIndexing; the exact heading match on a query's first page also gets its allowablesubheadings
pubmed_lookup_citation tool
Up to 25 partial citations per call; a journal or a four-digit year is required, and volume, first page, and author sharpen the match
Each is matched independently and comes back
matched,not_found, orambiguous, with recovery detail
pubmed_convert_ids tool
Up to 50 ids per call, all of one declared
idType(doi,pmid,pmcid); only PMC-indexed articles resolveOne success or error row per id, in order, so a partial batch never fails
pubmed://database/info resource
Live EInfo call for the
pubmeddatabase, returned asapplication/jsoncount,lastUpdate, andfields[], whose names are the search tagspubmed_search_articlesaccepts
research_plan prompt
Arguments:
title,goal, andkeywordsrequired;organismandincludeAgentPromptsoptionalReturns a four-phase research plan;
includeAgentPrompts: "true"adds an agent-guidance block under each of its nine sub-steps, two of which point at tools: the literature review namespubmed_search_articlesandpubmed_lookup_mesh, and the interpretation step namespubmed_search_articles
Features
Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.
PubMed-specific:
NCBI E-utilities (ESearch, EFetch, ESummary, ELink, ESpell, EInfo, ECitMatch) and the PMC ID Converter, with Europe PMC, OpenAlex, and Unpaywall filling the gaps
Shared NCBI request queue: paced request starts, capped concurrency, a cooldown that holds every caller after an NCBI 429, one deadline covering queue wait and retries, and fail-fast for an endpoint whose retries were just spent on an outage: later calls to it make one attempt each until one succeeds
XML parsing built for PubMed's inconsistent records: structured abstracts, missing fields, varying date formats
Forgiving identifiers: a zero-padded PMID resolves as the PMID it spells in every tool that takes one;
pubmed_fetch_fulltextalso matches DOIs case-insensitively and PMC IDs with or without thePMCprefixHand-rolled citation formatters (APA, MLA, BibTeX, RIS, Vancouver) with no dependencies
Agent-friendly output:
Provenance in responses: source labels, license fields on full-text and Europe PMC results, best-effort warnings on Unpaywall results, and effective-query echo on searches, so agents can judge what to trust
Graceful partial failure: batch tools return per-item success/error rows instead of failing the request, with structured status codes and actionable next-step text
Discriminated output contracts:
source: "pmc" | "unpaywall", typedunavailablereasons,viaSourceandtriedTiersfields, so callers branch on data, not string parsing
Getting started
Connect to the hosted instance, no install:
claude mcp add --transport http pubmed-mcp-server https://pubmed.caseyjhand.com/mcpOr run it locally:
claude mcp add pubmed-mcp-server -- npx -y @cyanheads/pubmed-mcp-serverFor other clients, add this to the MCP config file:
{
"mcpServers": {
"pubmed-mcp-server": {
"command": "npx",
"args": ["-y", "@cyanheads/pubmed-mcp-server"]
}
}
}An NCBI API key in NCBI_API_KEY raises the rate limit from 3 to 10 requests per second (-e NCBI_API_KEY=your-key, or an env entry). For Docker or a source build, see Running the server.
Configuration
Variable | Description | Default |
| NCBI API key; raises the rate limit from 3 to 10 req/s. NCBI counts the limit per key (per IP address without one), so processes sharing a key or an address share it. | none |
| Contact email sent with NCBI requests, as NCBI recommends. | none |
| Minimum gap between NCBI request starts, in ms. |
|
| Max concurrent in-flight NCBI requests. |
|
| Retry attempts for failed NCBI requests. An endpoint whose last call failed unreachable on every attempt gets one attempt per call until one succeeds. |
|
| Per-request HTTP timeout, in ms. |
|
| Deadline for one NCBI call across queue wait, retries, and backoff, in ms. A call that can't start in time is rejected at once. |
|
| Contact email for Unpaywall. Setting it enables the Unpaywall tier of | none |
| Per-request timeout for Unpaywall lookups and content fetches, in ms. |
|
| Set |
|
| Optional contact email sent with Europe PMC requests. | none |
| Minimum gap between Europe PMC request starts, in ms. |
|
| Retry attempts for failed Europe PMC requests. |
|
| Per-request timeout for Europe PMC calls, in ms. |
|
| Transport: |
|
| HTTP server port. |
|
| HTTP session mode: |
|
| Authentication: |
|
| Log level ( |
|
| Directory for log files (Node.js only). |
|
| Storage backend: |
|
| Enable OpenTelemetry. |
|
See .env.example for every server setting and the common framework overrides.
Running the server
Local development
Requires Bun v1.4.4 or higher (or Node.js v24+).
Clone and install:
git clone https://github.com/cyanheads/pubmed-mcp-server.git cd pubmed-mcp-server && bun install cp .env.example .env # set NCBI_API_KEY, NCBI_ADMIN_EMAIL, and UNPAYWALL_EMAIL as neededBuild and run the production version:
# One-time build bun run rebuild # Run the built server bun run start:http # or bun run start:stdioRun checks and tests:
bun run devcheck # Lints, formats, type-checks, and more bun run test # Runs the test suite
Docker
docker run --rm -p 3010:3010 ghcr.io/cyanheads/pubmed-mcp-server:latestThe image defaults to HTTP transport, stateless session mode, and logs to /var/log/pubmed-mcp-server. To run it over stdio from an MCP client, use "command": "docker" with "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/pubmed-mcp-server:latest"]. To build locally, docker build -t pubmed-mcp-server .; OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.
Project structure
Directory | Purpose |
| Tool definitions ( |
| Resource definitions. Database info resource. |
| Prompt definitions. Research plan prompt. |
| NCBI E-utilities service layer — API client, queue, parser, formatter. |
| Europe PMC service — search + |
| Unpaywall service — DOI → OA location resolution and content fetch (HTML/PDF). |
| OpenAlex service — last-resort provider for |
| Server-specific environment variable parsing and validation with Zod. |
| Unit and integration tests, mirroring the |
| The published |
Development guide
See CLAUDE.md for development guidelines and architectural rules. The short version:
Handlers throw, framework catches — no
try/catchin tool logicUse
ctx.logfor logging,ctx.statefor storageRegister new tools and resources in the
createApp()arrays insrc/index.tsWrap external API calls: validate raw → normalize to domain type → return output schema; never fabricate missing fields
Contributing
Issues are welcome. Run checks and tests before submitting:
bun run devcheck
bun run testLicense
This project is licensed under the Apache 2.0 License. See the LICENSE file for details.
Available Tools
12 toolspubmed_convert_idsPubmed Convert IdsARead-onlyInspect
Convert between article identifiers (DOI, PMID, PMCID). Accepts up to 50 IDs of a single type per request. Only resolves articles indexed in PubMed Central — for articles not in PMC, use pubmed_search_articles instead.
Inputs: ids (required), idType (required). Returns: error, records, totalConverted, totalSubmitted
pubmed_europepmc_fetchPubmed Europepmc FetchARead-onlyInspect
Fetch complete Europe PMC records — including the full, untruncated abstract — addressed as records: [{ source, epmcId }], an array even for one record. Pairs with pubmed_europepmc_search, which returns bounded abstractSnippet values and flags cut ones with abstractTruncated: true; copy each hit's source and epmcId into records here to read the whole abstract. This is the retrieval path for preprint (PPR), patent (PAT), and Agricola (AGR) records, which frequently carry no PMID and no DOI, so pubmed_fetch_articles and pubmed_fetch_fulltext cannot address them. Up to 25 records per call. Set maxResponseCharacters to bound the whole response: records past the ceiling are deferred whole and listed in deferred.records for a follow-up call.
Inputs: records (required), maxResponseCharacters. Returns: error, notice, records, deferred, +2 more
pubmed_europepmc_searchPubmed Europepmc SearchARead-onlyInspect
Search Europe PMC, a broad open-access biomedical corpus. Surfaces preprints (source: PPR), patents (source: PAT), Agricola (source: AGR), plus everything in PubMed (MED) and PMC. Use when additional coverage is needed — preprints and EPMC-only OA records are the typical recovery. Paginate via cursorMark. Defaults to MED, PMC, and PPR; pass sources to include PAT / AGR. Abstracts arrive as a bounded abstractSnippet with abstractTruncated marking the cut ones — pass a hit to pubmed_europepmc_fetch as records: [{ source, epmcId }] for the complete abstract.
Inputs: query (required), sort, sources, pageSize, +2 more. Returns: hits, error, query, notice, +5 more
pubmed_fetch_articlesPubmed Fetch ArticlesARead-onlyInspect
Fetch full article metadata by PubMed IDs. Returns detailed article information including abstract, authors, journal, MeSH terms, linked retraction, erratum, and comment notices, and databank accessions such as trial registration IDs; grants and the members of a collective author are opt-in (includeGrants, includeInvestigators). Set maxResponseCharacters to bound the whole response: articles past the ceiling are deferred whole and listed in deferred.ids for a follow-up call.
Inputs: pmids (required), includeMesh, includeGrants, includeInvestigators, +1 more. Returns: error, notice, articles, deferred, +3 more
pubmed_fetch_citation_metricsPubmed Fetch Citation MetricsARead-onlyInspect
Fetch NIH iCite citation metrics for PubMed articles: the Relative Citation Ratio (RCR), NIH percentile, citation count, citations per year, expected and field citation rates, the Approximate Potential to Translate (APT), the human, animal, and molecular/cellular shares of each article's MeSH terms, and how many clinical articles cite it. RCR is a field- and year-normalized citation rate benchmarked to NIH-funded papers, whose median RCR is 1.0; iCite computes none for the most recent papers and marks recent ones provisional. iCite does not flag retractions — a retracted article keeps its metrics — so check pubmed_fetch_articles for retraction notices before relying on a record. Up to 1000 PMIDs per call; the first 200 distinct PMIDs are fetched and the rest returned in overLimit. PMIDs iCite has no record for are listed in unavailablePmids.
Inputs: pmids (required). Returns: error, notice, records, overLimit, +1 more
pubmed_fetch_fulltextPubmed Fetch FulltextARead-onlyInspect
Fetch full-text articles from PubMed Central as structured sections — the body, then back matter such as acknowledgments, declarations, and appendices — with tables and references. When PMC misses, transparently falls back to Europe PMC fullTextXML (structured JATS for its open-access subset, preprints included). Name articles by pmcids (PMC IDs directly), pmids (PubMed IDs, auto-resolved), dois (DOIs, auto-resolved to PMC via the ID Converter; open-access preprints recover via Europe PMC), or any mix of the three — up to 50 distinct identifiers; the first 10 are fetched per call, the rest returned in overLimit; an article several of them name is fetched and returned once. Two independent character controls: maxCharacters caps body text per article, maxResponseCharacters caps the whole response and defers articles past the ceiling whole, listing them in deferred.ids for a follow-up call.
Inputs: dois, pmids, pmcids, sections, +8 more. Returns: error, notice, articles, deferred, +6 more
pubmed_format_citationsPubmed Format CitationsARead-onlyInspect
Get formatted citations for PubMed articles in one or more formats (apa, mla, bibtex, ris, vancouver). Pass a single format as a string or multiple as an array. Retractions, errata, and expressions of concern NCBI links to an article come back in notices; Vancouver and APA also cite a retraction in the reference itself.
Inputs: pmids (required), format. Returns: error, notice, citations, totalFormatted, +2 more
pubmed_lookup_citationPubmed Lookup CitationARead-onlyInspect
Look up PubMed IDs from partial bibliographic citations. Useful when you have a reference (journal, year, volume, page, author) and need the PMID — deterministic citation matching, more reliable than free-text search for structured references. Each citation must include at least journal or a four-digit year (ECitMatch primary-keys on journal+volume+page; author-only or volume-only inputs guarantee no match); more fields = better match accuracy.
Inputs: citations (required). Returns: error, results, totalMatched, totalWarnings, +1 more
pubmed_lookup_meshPubmed Lookup MeshARead-onlyInspect
Search and explore the MeSH (Medical Subject Headings) controlled vocabulary. Returns MeSH records of every type — descriptors, supplementary concepts, qualifiers, and pharmacological actions — each with its record type and the PubMed clause that searches it, plus tree numbers, scope notes, entry terms, year introduced, previous indexing, and the exact heading match's allowable subheadings, with pagination via offset for paging past the maxResults cap.
Inputs: query (required), offset, maxResults, includeDetails. Returns: error, query, notice, offset, +3 more
pubmed_search_articlesPubmed Search ArticlesARead-onlyInspect
Search PubMed with full query syntax, filters, and date ranges. Returns PMIDs and optional brief summaries. Supports field-specific filters (author, journal, MeSH terms), common filters (language, species, free full text), and pagination via offset for paging through large result sets.
Inputs: sort, query, author, offset, +10 more. Returns: error, pmids, query, notice, +6 more
pubmed_spell_checkPubmed Spell CheckARead-onlyInspect
Spell-check a PubMed search query against NCBI ESpell and get the corrected query back. Use after a zero-hit or thin pubmed_search_articles result, or when a drug, gene, disease, or author name may be misspelled. Corrections are applied in place, so field tags, operators, spacing, and gene symbols stay as written (alzhiemer diseese treatmnt outcomse → alzheimer disease treatment outcomes). The value of an indexed field — MeSH, publication type, journal, author, language, subset, and the like (aged[mh], free full text[sb], zhang y[au]) — is kept as written, misspelled or not, since the ESpell dictionary is not the index that field searches; free-text fields such as [tiab], [ti], and [tw] are corrected. Words in all capitals, with digits or non-ASCII letters, or differing only in case are never changed, nor is a single letter swapped for another (q fever, the initial in smith q), words after a number or symbol ESpell skips are left as written, and hasSuggestion is false when no correction was applied. Re-run the search with corrected.
Inputs: query (required). Returns: error, original, corrected, hasSuggestion
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 12 tools
Each tool targets a distinct capability: keyword search, metadata fetch, full-text fetch, citation formatting, related-article discovery, MeSH lookup, citation-based ID lookup, ID conversion, spell check, and citation metrics. The main soft spots are pubmed_search_articles vs pubmed_europepmc_search and pubmed_fetch_articles vs pubmed_europepmc_fetch, but the descriptions explicitly carve out the corpus differences (preprints/patents, records with no PMID) so an agent can choose correctly.
Nearly everything follows the pubmed_verb_noun pattern (pubmed_search_articles, pubmed_fetch_articles, pubmed_fetch_fulltext, pubmed_lookup_mesh, pubmed_format_citations, pubmed_convert_ids). The two Europe PMC tools invert the order (pubmed_europepmc_fetch, pubmed_europepmc_search), placing the noun before the verb, which is a minor but real deviation.
12 tools is squarely in the well-scoped range for a biomedical literature server, and each one maps to a distinct research workflow step (discover, retrieve, enrich, cite, convert). No filler tools and no obviously missing companion operation.
The surface covers the full literature lifecycle: search (PubMed and Europe PMC), metadata and full-text retrieval, citation formatting, related-work traversal, MeSH vocabulary, citation-based ID resolution, ID conversion, spell correction, and iCite metrics. Edge cases like non-PMID preprint/patent records are explicitly handled via the Europe PMC path.
Maintenance
Related MCP Connectors
Research papers for AI agents: PubMed, arXiv, Crossref; citations, references, open access texts
Connect AI clients to biomedical data and tools.
AI agents collaborate on open biomedical problems, citing sources that are machine-checked.
Open scientific and engineering knowledge for AI agents: search, evidence, document publishing.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenance🔍 Enable AI assistants to search, access, and analyze PubMed articles through a simple MCP interface.132MIT
- AlicenseBqualityDmaintenanceEnables AI assistants to search and retrieve biomedical research articles from PubMed's database of over 35 million citations, including metadata, abstracts, MeSH terms, and full-text PDFs when available.11MIT
- AlicenseAqualityDmaintenanceAn MCP server that provides direct access to PubMed and PubMed Central via the NCBI E-utilities API. It enables AI models to search biomedical literature, retrieve detailed article metadata, and download open-access full texts.5MIT
- AlicenseAqualityDmaintenanceProvides structured PubMed literature data for LLM agents, supporting search, caching, and open-access full-text downloads via the MCP protocol.547 npm11Apache 2.0