MCP server for NewsAPI.ai (Event Registry) providing access to global news database with tools for searching articles, events, and entity lookup
NewsAPI MCP demonstrates solid definition quality with comprehensive parameter schemas and detailed descriptions. All 7 tools have explicit input schemas with typed parameters and descriptions. Tool names follow verb_noun convention (search_articles, get_article_details, suggest). Descriptions are substantial (100-400+ chars) and include workflow guidance and use-case differentiation. However, output schemas are not documented in the source code, and error handling lacks recovery guidance. Parameter descriptions are thorough but could better explain constraints (e.g., articlesCount 1-100 is stated but not in enum). No tool annotations (readOnlyHint, destructiveHint) are present despite all tools being read-only.
Check current API token usage and quota. Returns remaining tokens and daily quota information. EXAMPLE: get_api_usage({})
Retrieve full details for specific articles by URI. Supports up to 100 articles per call. Use this in the retrieve step after scanning and triaging articles. Pass article URIs from search_articles results. EXAMPLE: get_article_details({articleUri: ["uri1", "uri2"], includeFields: "concepts,sentiment"})
Retrieve full details for specific events by URI. Supports up to 100 events per call. Use this in the retrieve step after scanning and triaging events. Pass event URIs from search_events results. EXAMPLE: get_event_details({eventUri: ["uri1", "uri2"], includeFields: "concepts,sentiment"})
Retrieve articles from a topic page (curated collection). Returns recent articles for a topic. Use this for monitoring specific topics or when you have a topic page URI. EXAMPLE: get_topic_page_articles({uri: "<topic-uri>", articlesCount: 10})
Search news articles by concepts, sources, categories, dates, language, and sentiment. Returns up to 100 articles per call. WORKFLOW: Use suggest tool first to resolve names to URIs, then search with conceptUri. Use keyword only as a secondary text filter. EXAMPLE: search_articles({conceptUri: "<uri>", dateStart: "2025-01-01", lang: "eng"}) USE THIS WHEN you need individual articles with full text, dates, and sources. NOT THIS when you need high-level event summaries — use search_events instead.
Output schemas not documented. Tool descriptions explain what is returned (e.g., 'Returns up to 100 articles per call') but the actual response structure (fields, types, pagination) is not specified in the source code. LLMs cannot plan downstream tool calls or extract specific fields without knowing the response schema.
No tool annotations present. All 7 tools are read-only (no state modification), but readOnlyHint is not set. This forces LLMs to reason about safety and retry semantics instead of relying on explicit metadata.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Search events (deduplicated story clusters) by concepts, sources, categories, dates, language, and sentiment. Returns up to 50 events per call. Events group related articles about the same real-world happening. Use this for high-level overviews and deduplicated results. EXAMPLE: search_events({conceptUri: "<uri>", dateStart: "2025-01-01", lang: "eng"}) USE THIS WHEN you need a high-level overview, deduplicated results, or summaries of what's happening. NOT THIS when you need full article text or individual story coverage — use search_articles instead.
Resolve entity names to URIs. Supports concepts, categories, sources, locations, authors, and keywords. Always use this first to resolve names to URIs before searching. Returns numbered list of matches with URIs. EXAMPLE: suggest({type: "concepts", prefix: "Tesla"}) Supported types: concepts, categories, sources, locations, authors, keywords.
Error handling lacks recovery guidance. No evidence in source code of error responses that tell the LLM what to do next (e.g., 'API key invalid. Check NEWSAPI_KEY environment variable'). Raw API errors will not guide agent recovery.
Numeric parameter constraints not formalized as enums. articlesCount (1-100), articlesPage (1-indexed), eventsCount (1-50) are described in text but not enforced via JSON Schema enum or minimum/maximum. LLMs may pass invalid values.
get_api_usage description is minimal (27 chars: 'Check current API token usage and quota.'). Lacks context on when to call it, what the response contains, or how to interpret quota warnings.