Model Context Protocol server for PubMed - NCBI's database of biomedical literature
This PubMed MCP server demonstrates solid foundational work with 12 well-organized read-only tools. Tool naming is consistently verb-driven (search_, get_, batch_) and most descriptions are present and actionable. Input schemas are complete with proper type definitions, enums, and min/max constraints on numeric parameters. However, critical gaps exist: (1) NO documented output schemas, the code does not specify what fields or structure each tool returns, forcing LLMs to infer; (2) parameter descriptions are functional but generic, lacking examples of expected format or dependencies; (3) error handling and recovery guidance is minimal; (4) no tool annotations (readOnlyHint, idempotentHint) despite all tools being safe read-only operations. The server excels at constraint clarity (enums for sort order, min/max for result counts) but falls short of production-grade due to missing output documentation and incomplete parameter guidance.
Perform advanced search with field-specific queries and boolean operators
Retrieve multiple articles efficiently (up to 200 PMIDs)
Retrieve article abstract by PMID
Get comprehensive metadata and abstract for a specific article by PMID
Find articles that cite a specific PMID
Retrieve full text from PubMed Central (PMC) when available
No documented output schemas for any tool. LLMs cannot predict what fields the response will contain, forcing them to reason about structure at runtime. This violates the pattern:response-shaper principle and makes multi-step tool composition error-prone.
Parameter descriptions lack actionable format guidance. E.g., date_from and date_to state 'YYYY/MM/DD format' but do not explain what happens if the format is wrong, whether NULL is valid, or provide examples of edge cases (e.g., leap years, future dates). This invites LLM input errors.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 35 | - | v1 |
Get reference list for an article
Get recently published or trending articles in a specific field
Search PubMed for articles by keywords, authors, journals, dates, or MeSH terms. Returns PMIDs and basic metadata.
Find articles by specific author(s)
Search articles within specific journal(s)
Search using Medical Subject Headings (MeSH) terms
No tool annotations despite all 12 tools being read-only and idempotent. Adding readOnlyHint: true to all tools would signal to LLMs that these are safe to call repeatedly without side effects, improving agent reasoning about retry and composition strategies.
Error handling and recovery guidance is absent from tool descriptions. If a PMID is invalid, the user should know they can try search_articles first. If a journal name is not found, enriching the error with available alternatives would enable the LLM to self-correct.
advanced_search tool has no required parameters. All search fields are optional, which means an LLM could call it with no arguments and get undefined behavior. The description should clarify that at least one field is required, or the tool should enforce this at runtime with clear error messaging.
batch_article_lookup accepts up to 200 PMIDs but provides no guidance on what happens if any PMID is invalid. Should the tool return partial results with per-item success/failure indicators, or fail entirely? Current description is silent.
get_full_text parameter is named pmcid but uses non-standard format ('PMC1234567' or '1234567'). The description hints at format flexibility but does not explain normalization rules. The helper function normalizePMCID exists but is not documented in the tool description.
No dependency documentation between related tools. E.g., get_cited_by and get_references both return article references, but it is not clear which is preferred or when to use each. Search tools should hint that they are discovery tools that feed into get_article_details for comprehensive metadata.