MCP for fetching and parsing RSS feeds from NFL Fantasy and other podcast sources
RSS Feed Scraper has complete JSON schemas with proper types and descriptions for all 5 tools. Tool names follow verb_noun convention (list, get, download, transcribe, update). However, descriptions are minimal (10-50 chars), parameter descriptions lack context about constraints and formats, and error handling is absent. No tool annotations (readOnlyHint/destructiveHint). Output schemas are documented but lack pagination support for list operations. The server lacks guidance on when to use each tool and what to do on failure.
Download a podcast episode audio file
Get content from a specific RSS feed URL
List all available RSS feeds that can be scraped
Transcribe a downloaded podcast episode using Whisper API
Fetch new episodes from all or specified feeds, transcribe them within a budget limit
Descriptions are too brief (10-50 chars). LLMs cannot determine when to select each tool or what distinguishes them. 'Get content from a specific RSS feed URL' lacks context about filtering, pagination, or when to use vs listFeeds.
Parameter descriptions are missing or generic. 'audioUrl' has no description; 'guid' is unexplained; 'budget' lacks units/range (is it dollars? cents? what's the valid range?). LLMs cannot validate inputs without explicit constraints.
No error handling or recovery guidance in code. If Whisper API fails, transcribeEpisode returns a generic error with no actionable next step. If a feed URL is invalid, getFeedContent fails silently. Agents cannot self-correct.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 45 | 2026-07-28+ | v2 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). downloadEpisode and transcribeEpisode modify state (write files, call external APIs) but are not marked as destructive. listFeeds and getFeedContent are read-only but not annotated. Agents cannot reason about side effects.
getFeedContent lacks pagination. If a feed has 1000+ entries, the entire array is returned, blowing context windows. No limit, offset, or cursor parameters. updateDatabase processes all feeds in one call, no progress reporting or cancellation support.