Search and retrieve news articles from GNews API. Use search for keywords and get_top_headlines for trending articles.
The server has 3 tools with complete input schemas and descriptions. However, the definitions exhibit several quality gaps: (1) the `draft_email` tool has a critical input schema mismatch, the docstring documents parameters 'news', 'to', 'cc', 'bcc' but the actual input schema is empty `{}`, causing a 0 schema score; (2) parameter descriptions in `search` and `get_top_headlines` are present but overly verbose with embedded argument docs, not optimized for LLM selection; (3) output schemas are documented only in descriptions, not formally returned; (4) no error handling guidance is visible. The `search` and `get_top_headlines` tools are well-structured with proper enum constraints (e.g., category options, sort_by values) and reasonable defaults, earning them higher scores. The composition is sound, tools are single-purpose and chainable (search/headlines → draft_email).
Create a dummy email draft given news articles. This tool is intended to be invoked after obtaining results from the GNews HTTP tools. It simply formats a subject and body and returns a JSON-serializable representation; no actual email sending is performed. Args: news: SearchResult object produced by gnews_http tools to: Recipient address (defaults to a placeholder) cc: Optional list of CC addresses bcc: Optional list of BCC addresses Returns: EmailDraft: JSON structure describing the drafted email
Get top trending news headlines by category. Args: category: News category. Options: general, world, nation, business, technology, entertainment, sports, science, health. Default: 'general' lang: Language code (e.g., 'en', 'fr', 'de'). Default: 'en' country: Country code (e.g., 'us', 'gb', 'fr'). Optional. max_articles: Number of articles to return (1-100). Default: 10 page: Page number for pagination. Default: 1 query: Optional search keywords to filter results further. Optional. from_date: Filter articles from this date (ISO 8601 format). Optional. to_date: Filter articles until this date (ISO 8601 format). Optional. Returns: SearchResult: Total count and list of trending articles in the selected category
Search for news articles using keywords. Args: q: Search keywords (supports logical operators: AND, OR, NOT, and quotes for phrases) lang: Language code (e.g., 'en', 'fr', 'de'). Default: 'en' country: Country code (e.g., 'us', 'gb', 'fr'). Optional. max_articles: Number of articles to return (1-100). Default: 10 page: Page number for pagination. Default: 1 sort_by: Sort order - 'publishedAt' or 'relevance'. Default: 'publishedAt' from_date: Filter articles from this date (ISO 8601 format). Optional. to_date: Filter articles until this date (ISO 8601 format). Optional. Returns: SearchResult: Total count and list of articles matching the search criteria
Critical: draft_email input schema is empty {} despite docstring documenting 'news', 'to', 'cc', 'bcc' parameters. The tool definition does not match its documented signature.
Tool descriptions embed argument documentation ('Args: q: ...', 'Args: category: ...') inline, which duplicates the parameter descriptions and wastes token space. Separate concerns: tool description explains the high-level purpose; parameter descriptions explain individual inputs.
Output schemas are documented only in text ('Returns: SearchResult...') not formally returned in the MCP response. LLMs cannot reliably parse unstructured text to infer output structure for downstream tool chaining.
No error handling guidance. What happens if GNews API is unreachable? If 'lang' is invalid? If 'max_articles' exceeds 100? Error descriptions should guide LLM recovery actions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 6 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 50 | - | v1 |
Parameter descriptions for 'lang' and 'country' are generic ('Language code (e.g., "en", "fr", "de")'). They should specify: are these ISO 639-1 codes? Can the LLM pass any string or are there valid values? Enums would clarify.