MCP server that exposes Google News headlines to agents over stdio. Provides tools to search news, get ticker news, top stories, and read articles.
gnews-mcp has clear, action-oriented tool names (search_news, ticker_news, top_stories, read_article) and concise descriptions (avg 115 chars, within 10-1024 range). All 4 tools have input schemas with type definitions and parameter descriptions. However, output schemas are undocumented, LLMs cannot predict response structure. Parameter descriptions lack format constraints (e.g., 'limit' has no min/max bounds stated). Error handling returns raw error strings without recovery guidance. No tool annotations (readOnlyHint, idempotentHint) despite all being read-only operations. Composition is sound: each tool has one responsibility, and search_news/ticker_news/top_stories feed into read_article naturally.
Fetch an article URL and return its title and paragraphs as markdown. Best effort: paywalled or JavaScript-rendered pages may return little text.
Search Google News and return recent headlines with links as compact markdown.
Return recent Google News headlines with links for a stock ticker as compact markdown.
Return current top stories with links from Google News as compact markdown.
Output schemas undocumented. LLMs cannot predict response structure (markdown text vs structured fields). Violates pattern:tool requirement that tools document return types.
Parameter 'limit' lacks min/max bounds in descriptions. Schema shows type 'number' but no constraints. LLMs may pass invalid values (0, 100+, negative). Violates pattern:constrained-input.
Error handling returns raw error strings (e.g., 'fetch article: context deadline exceeded') without recovery guidance. LLMs cannot determine if error is retryable or user-fixable. Violates pattern:recovery-guide.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
No tool annotations despite all tools being read-only. Missing readOnlyHint would help agents understand these are safe to call without side effects. Violates pattern:tool-annotation.
read_article description mentions 'best effort' but does not document what partial failure looks like (empty string, partial text, error). LLMs cannot plan for degraded responses.