PubMed MCP has three read-only tools with basic structure. Naming follows verb_noun convention (search_pubmed, fetch_summary, get_fulltext). Descriptions exist but are terse (33-71 chars, below the 50-200 char sweet spot for LLM optimization). Input schemas are present with types and descriptions for all parameters. However, output schemas are undocumented, the response structure is not formally declared. Error handling returns generic messages without recovery guidance. The search_pubmed tool has more sophisticated parameter structure (searchOptions object with nested enums) compared to the fetch/fulltext tools which accept simple arrays. No tool annotations (readOnlyHint, idempotentHint) are present despite all being safe read-only operations. Missing dependency hints and chaining metadata in responses.
Fetch detailed article information from PubMed using PMIDs.
Get full text content of PubMed articles using PMIDs.
Search PubMed for scientific articles.
Output schemas not documented. LLMs cannot predict response structure (field names, types, nested objects). Forces trial-and-error parsing and blocks downstream tool chaining.
Tool descriptions are terse (33-71 chars). Below rubric baseline of 50-200 chars for LLM-optimized descriptions. 'Search PubMed for scientific articles' does not explain WHEN to call it, what structure it returns, or dependencies (e.g. email required, requires PUBMED_EMAIL env var).
Error messages are generic ('Error searching PubMed: ...') and do not guide recovery. LLM receives only the underlying exception message, no actionable next steps, no classification (retryable vs user-fixable vs fatal).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 44 | - | v1 |
No tool annotations despite all three tools being read-only, idempotent operations. Missing readOnlyHint and idempotentHint would help agents reason about retry safety and composition.
fetch_summary and get_fulltext accept pmids as a simple array with no description of return format, pagination, or per-item error handling. If one PMID is invalid, does the tool fail entirely or return partial results?
search_pubmed returns JSON via text field but does not document pagination support. If 1000 articles match, does retMax cap results? What does the response structure contain (IDs, titles, abstracts)? Are there next_cursor or total_count fields?
Parameter description for dateFrom/dateTo in search_pubmed is unclear about timezone and whether dates are inclusive or exclusive. 'YYYY/MM/DD format' is stated but no example, and format constraints should use JSON Schema pattern, not description text.