Local MCP server for RSS/Atom feeds — fetch and parse without cloud middle.
Three well-named tools with clear, actionable descriptions (avg 180 chars, within 10 - 1024 baseline). All tools have complete JSON Schema with typed parameters and descriptions. fetch_feed and search_entries include helpful context ('Use `limit` to cap...', 'case-insensitive'). However, output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal: no recovery guidance, no categorization of retryable vs fatal errors. No tool annotations (readOnlyHint, idempotentHint) despite all three being read-only operations. Parameter descriptions are adequate but lack format/constraint details (e.g., 'Feed URL' doesn't specify protocol or validation rules).
Fetch and parse an RSS or Atom feed. Returns feed metadata (title, subtitle, language) and a list of entries (title, link, published date, author, summary, tags). Use `limit` to cap how many entries you get back — feeds can be huge. Works with any publicly-accessible feed URL.
Fetch metadata for one or more feeds without loading all entries — title, subtitle, entry count, last update time. Useful for building a dashboard of feeds you follow.
Fetch a feed and return only entries whose title or summary contain a keyword (case-insensitive). Useful when you want the AI to check a feed for specific topics without wading through everything.
Output schemas not documented. LLMs cannot predict response structure (feed metadata fields, entry object shape, error format). Responses are JSON strings without schema hints.
No tool annotations despite all three tools being read-only. Missing readOnlyHint=true would signal to agents these are safe to call without side effects.
Error handling lacks recovery guidance. When a feed URL is invalid or unreachable, the tool raises ValueError or returns generic error. No actionable next steps for the LLM (e.g., 'Try a different URL' or 'Check if the feed is still active').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Parameter descriptions lack format/constraint details. 'Feed URL' doesn't specify protocol (HTTP/HTTPS only?), validation rules, or timeout behavior. 'limit' lacks min/max bounds (e.g., 1 - 1000).
list_feed_metadata returns 'error' field for failed URLs but does not distinguish retryable (timeout, transient) from fatal (404, malformed URL) errors. LLM cannot decide whether to retry.