Fixed
- pubmed_search_articles brief summaries now populate doi, pmcId, pmcUrl.
parseSingleDocumentSummary matched lowercase JSON keys (idtype/value),
but the call site uses retmode=xml and fast-xml-parser preserves element
casing — real NCBI XML returns { IdType, IdTypeN, Value }, so every
summary silently dropped its DOI and PMC ID. Normalized via accessor
helpers; widened ESummaryArticleId to reflect both shapes; regression
test rewritten against the real XML capitalization.
Changed
- pubmed_search_articles dateRange minDate/maxDate validated by regex at
the schema boundary. Empty strings still accepted (MCP Inspector); typos
like "not-a-date" now fail fast with an actionable message instead of
degrading silently to 0 results.
- publicationTypes / meshTerms descriptions now state their join semantics
(OR'd vs AND'd).
- New optional `notice` field on the output surfaces guidance when the
response would otherwise be a bare empty array — suggests pubmed_spell_check
on no-filter misses, filter relaxation on filtered misses, and flags
pagination overshoot. Rendered as a blockquote in format().
References
- Closes #17 (DOI/PMC extraction bug)
- Closes #18 (input validation, empty-result guidance, filter-semantics docs)