NewsData.io MCP — wraps the NewsData.io global news API (newsdata.io)
Three tools with complete schemas and reasonable descriptions. All tools have verb-noun naming (latest_news, crypto_news, news_sources) and input schemas with typed properties. Descriptions are 150 - 250 chars, within the 10 - 1024 baseline. However, parameter descriptions lack specificity on constraints (e.g., country codes are stated as '2-letter' but not validated; category enums are listed in description text rather than as formal enum constraints). Output schema is documented in description text but not in a structured return type definition. Error handling is minimal, the code returns {error, message} objects but provides no recovery guidance. No tool annotations (readOnlyHint, idempotentHint) despite all three being read-only operations.
Get the latest cryptocurrency news headlines and articles. Filter by keyword, coin ticker(s) (e.g. "btc,eth"), and language. Returns article title, description, link, source, publish date, category, and country. Example: crypto_news({ coin: "btc,eth", query: "etf" })
Get the latest global news headlines and articles. Filter by keyword, country (2-letter, e.g. "us"), category (business, technology, politics, sports, health, science), and language. Returns article title, description, link, source, publish date, category, and country. Paginate via the nextPage token. Example: latest_news({ query: "election", country: "us", category: "politics" })
List available global news sources. Filter by country (2-letter), category, and language. Returns source id, name, url, category, country, and language — useful for discovering which outlets cover a given region or topic. Example: news_sources({ country: "us", category: "technology" })
Parameter constraints listed in description text instead of formal JSON Schema enums. 'category' accepts 'business, technology, politics, sports, health, science' but is a free-form string type. LLMs cannot parse prose constraints and will hallucinate invalid values.
No output schema documented in inputSchema. Code returns {totalResults, nextPage, articles} for news tools and {results} for sources, but this structure is only visible in mapArticles() function, not in tool definition. LLMs cannot plan downstream calls without knowing return fields.
Error responses lack recovery guidance. Code returns {error: 'api_key_required', message: 'No NewsData.io key available.'} but does not tell the LLM how to obtain a key or whether to retry. Per pattern:recovery-guide, errors must guide next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
No tool annotations despite all three tools being read-only. Adding readOnlyHint: true in tool definitions signals to agents that these calls are safe to retry and have no side effects.
Parameter 'page' in latest_news accepts a nextPage token but description does not explain the pagination model. Is it cursor-based? Offset-based? What happens if the token expires? Agents need explicit pagination guidance.