Rust MCP server for fetching news from RSS feeds with background polling, article content extraction, and multiple transport modes
Three tools with complete input schemas and descriptions. Naming follows verb_noun pattern (get_*). Descriptions are adequate (50-150 chars) but lack actionable context for LLM selection. Parameter descriptions present but generic. No output schema documentation. Error handling exists but lacks recovery guidance. Missing tool annotations (readOnlyHint). No pagination support despite potential for large result sets.
Fetch the full content of a specific article by URL. Extracts and caches the article content from HTML.
Get a list of all available news categories with the count of articles in each category from the cache.
Fetch news articles from the cache, optionally filtered by category and limited by count. Returns articles in specified format (text, markdown, or json).
No output schema documentation. LLMs cannot plan downstream calls or extract fields without knowing response structure.
Missing tool annotations. Tools are read-only but lack readOnlyHint in schema, preventing LLMs from reasoning about safety and retry semantics.
get_news lacks pagination despite accepting 'limit' parameter. No offset/cursor or total_count in response. Large result sets will blow context window.
Descriptions lack WHEN/WHY context. 'Fetch news articles from the cache' does not explain when to call this vs get_categories or get_article_content, or what the LLM should do with results.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | <=2025-11-25 | v2 |
Error handling in tests shows validation (e.g., invalid_category rejection) but no recovery guidance in error messages. LLM cannot self-correct.