MCP server implementation that allows searching across multiple RSS feed sources through a unified interface. Supports both single-source and multi-source searching across FreeCodeCamp News, FreeCodeCamp YouTube, and Bing News feeds.
The server provides 4 well-structured RSS feed search tools with consistent naming patterns (verb_noun: list_feeds, search_feed, search_all_feeds, search_multiple_feeds). All tools have descriptions and explicit input schemas with types and parameter descriptions. However, there are notable gaps: output schemas are not formally documented (only examples in docstrings), error handling returns JSON strings instead of structured errors, and some parameter descriptions contain example values which can cause LLM hallucination. The server lacks input validation guidance in descriptions (e.g., 'max_results must be 1-20' is enforced in code but not stated in parameter descriptions). Parameter descriptions are present but generic, they lack constraints like 'feed_name must be one of: [list]' which would guide LLM selection. The max_results parameter defaults to 5 with a server-side cap of 20, but this constraint is not visible in the schema or description, forcing LLMs to guess valid ranges.
List all available RSS feed sources with their information
Search all available RSS feed sources for content matching the query
Search a specific RSS feed source for content matching the query
Search multiple specific RSS feed sources for content matching the query
Output schemas not formally documented. Tools return JSON strings with undocumented field structure. LLMs cannot predict output shape before calling, reducing planning effectiveness and increasing parsing errors.
Parameter descriptions lack formal constraints. 'max_results' has a server-side cap of 20 (enforced in code via max_results > 20 block) but the parameter description does not state this. LLMs cannot infer the constraint and may pass invalid values, relying on server-side clamping rather than client-side validation.
Example feed names ('freecodecamp_news', 'freecodecamp_youtube', 'bing_news') appear in parameter descriptions for 'feed_name' and 'feed_names'. LLMs tend to reuse example values literally rather than discovering available feeds dynamically. Should use enum constraint or guide to call list_feeds() first.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Error handling returns JSON strings with error objects instead of structured error responses with actionable recovery guidance. E.g., 'Feed not found' returns a list of available_feeds, but does not guide the LLM to 'Call list_feeds() to discover available feeds' or 'Retry with one of: [...]'.
No pagination support documented. Tools accept max_results per feed but return all results matching the query up to the cap. For feeds with hundreds of items, no offset/cursor mechanism exists. Large result sets could exhaust context windows without pagination guidance.