A Model Context Protocol server for searching and fetching medical literature from PubMed database with advanced filtering options
PubMed MCP demonstrates solid tool design with comprehensive parameter coverage and detailed descriptions. All 4 tools are explicitly registered with clear names, descriptions, and input schemas. However, there are gaps in output schema documentation, error handling guidance, and some parameter definitions lack actionable constraints. The naming is verb-focused and appropriate (search, fetch, summary), and descriptions are substantive (150-350 chars for tools, 50-150 chars for most parameters). Schema definitions use proper JSON Schema with types. Critical weakness: no documented output schemas for any tool, limiting LLM planning for chained calls. Error handling is minimal, no guidance on recovery steps, retryability, or how to handle malformed inputs.
Execute advanced PubMed search using native query syntax with full support for field tags and boolean operators. Field Tags Reference: - [ti] Title - [tiab] Title/Abstract - [au] Author - [1au] First Author - [lastau] Last Author - [ad] Affiliation - [mh] MeSH Terms - [majr] MeSH Major Topic - [pt] Publication Type - [ta] Journal Title Abbreviation - [journal] Full Journal Title - [la] Language - [dp] Publication Date - [pdat] Publication Date (for date ranges) - [edat] Entrez Date - [sb] Subset (e.g., free full text[sb]) - [doi] Digital Object Identifier - [pmid] PubMed ID - [uid] Unique Identifier Examples: 1. Author search: "Smith J[1au] AND cancer[ti]" 2. MeSH search: "breast neoplasms[mh] AND tamoxifen[mh]" 3. Date range: "(\"2020/01/01\"[pdat] : \"2024/12/31\"[pdat]) AND covid-19[tiab]" 4. Combined: "(diabetes[mh] OR diabetes mellitus[tiab]) AND (meta-analysis[pt] OR systematic review[pt]) AND english[la]" 5. Exclude preprints: "your search terms NOT preprint[pt]"
Fetch detailed article information from PubMed by PMID(s). Returns full article details including abstract, authors, journal, DOI, etc.
Search PubMed database for medical literature and articles with advanced filtering options
Get article summary information from PubMed by PMID(s). Returns concise metadata like title, authors, publication date, journal, DOI without full abstract.
No output schemas documented for any tool. LLMs cannot plan downstream tool calls or extract required fields when results are returned. Agents cannot predict what data will be available after a search or fetch.
Parameter descriptions lack actionable constraints and format specifications. For example, 'max_results' states 'default: 10, max: 100' but this is not validated in the description itself, no min/max bounds or format specification. Similarly, 'sort' lists options as free text rather than as an enum, inviting hallucinated values.
No error handling guidance. Handlers appear to exist (handlePubMedSearch, etc.) but no documentation of what errors they return, whether they are retryable, or what the LLM should do if a search fails. Malformed query syntax, network timeouts, and invalid PMID formats are not addressed.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 64 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 59 | - | v1 |
'date_from' and 'date_to' parameters accept 'YYYY/MM/DD or YYYY format' but there is no regex pattern, format constraint, or validation rule in the schema. LLMs may pass invalid dates like '2024/13/45' or '20/01/01'.
'text_availability', 'article_type', 'language', 'species', 'age' parameters list allowed values as comma-separated text examples ('english, chinese, french...') rather than as JSON Schema enums. LLMs may invent variants like 'eng' or 'english_uk' instead of adhering to the documented values.
Parameter descriptions include example values ('e.g., cancer AND immunotherapy', 'e.g., '12345678''), which LLMs tend to reuse literally. Should use enums and format specifications instead, and omit concrete examples.
'pmids' parameter in pubmed_fetch and pubmed_summary accepts 'comma-separated' values but this is a string type, not an array. No validation that commas are present or that each PMID is numeric and well-formed. LLMs may pass 'pmid1 pmid2' (space-separated) or non-numeric values.