Climate & energy — climate science/policy and energy markets. CF-robust RSS / Atom / RDF reader over a curated, edge-verified registry; on a Cloudflare egress block it falls back to the rss2json proxy.
Three tools with clear verb-noun naming (list_feeds, read_feed, fetch_feed) and reasonable descriptions (100-180 chars). All tools have input schemas with type definitions and required fields properly declared. However, parameter descriptions lack actionable constraints (no enums, ranges, or format specs). Output schemas are undocumented, LLMs cannot predict response structure. Error handling is minimal; no recovery guidance. Missing tool annotations (readOnlyHint, idempotentHint). Descriptions are adequate but generic; they do not explain when to use each tool vs. alternatives or what fields to expect in responses.
Fetch and normalize any RSS / Atom / RDF feed by URL. CF-robust: fetches directly and falls back to a proxy if the source blocks the gateway. Use list_feeds first for curated sources.
List the curated climate & energy feeds (id, title, category, source, description). Optionally filter by category (climate, energy) or keyword. Pass an id to read_feed.
Read a curated climate & energy feed by its id (from list_feeds). Returns normalized items (title, link, published, summary). Optionally filter items by keyword.
Output schemas are not documented. LLMs cannot predict response structure (fields, types, nested objects). Responses include 'via', 'total_matching', 'count', 'items' but this is invisible to the agent.
Parameter descriptions lack actionable constraints. 'limit' says '1-50, default 20' but is not enforced as an enum or minmax in schema. 'category' accepts 'climate' or 'energy' but no enum constraint. LLMs may pass invalid values.
No tool annotations (readOnlyHint, idempotentHint). All three tools are read-only and safe to retry, but this is not declared. Agents cannot optimize retry logic or understand safety guarantees.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Error handling is minimal. Code throws generic errors ('Unknown feed', 'Unknown tool', 'Pass a valid feed url') with no recovery guidance. LLMs receive no hint to call list_feeds or search for alternatives.
Descriptions do not explain when to use fetch_feed vs. read_feed. Both fetch and normalize feeds; the distinction (curated vs. arbitrary URL) is buried in text. LLMs may pick the wrong tool.