An MCP server that fetches news from NewsAPI and formats it as Markdown digests, with email delivery capabilities.
NewsDigest MCP has three tools with complete Zod schemas and descriptions, but quality is uneven. Tool naming follows verb_noun convention (get-, format-, search-). Descriptions are present but generic (avg 120 chars, below 194-char baseline). Parameter descriptions are inconsistent: search-everything has detailed per-param docs; get-news-digest lacks descriptions for most params (countries, languages, category, from, to, sortBy, pageSize). format-news-markdown accepts z.any() with no schema validation. No output schema documentation. Error handling is minimal, no recovery guidance or categorization. Tools lack idempotency hints except get-news-digest. No pagination support despite potentially large result sets.
Formats news data into a Markdown digest.
Fetches news (by country/language/category or by keywords) and returns a ready-to-render Markdown digest.
Use this tool when the user asks to search news by arbitrary keywords (e.g. "What's happening with AI?").
format-news-markdown accepts z.any() with no schema validation or output documentation. LLM cannot infer expected input structure or output fields.
get-news-digest parameters (countries, languages, category, from, to, sortBy, pageSize) lack descriptions in code. Zod schema has descriptions but tool registration omits them, forcing LLM to infer meaning from names alone.
No output schema documented for any tool. LLMs cannot plan downstream calls or extract fields reliably. search-everything returns JSON articles array; get-news-digest returns Markdown resource; format-news-markdown output is undefined.
No error handling guidance. If NewsAPI fails, raw HTTP error is thrown. LLM receives no recovery hint (e.g., 'retry with fewer results' or 'check API key').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
search-everything returns up to 100 articles with no pagination support. Large result sets waste tokens and risk context window exhaustion. No limit enforcement in description.