MCP server that aggregates AI/tech updates from X (via twitterapi.io), Hacker News, Reddit, arXiv, and RSS feeds.
x-mcp demonstrates solid tool naming (verb-first: search_*, fetch_*, list_*, resolve_*, check_*) and comprehensive descriptions (avg ~180 chars, well above 10-char minimum). All 12 tools have input schemas with typed parameters and descriptions. However, output schemas are undocumented, responses are inferred from code (e.g., fetch_ai_feeds returns {items, failures, truncated}) but not formally declared in tool definitions. Error handling is minimal: no recovery guidance, no categorization of retryable vs fatal errors, no validation error messages. Parameter constraints exist (e.g., limit clamping in fetch_ai_feeds) but are not exposed in schemas as enums or ranges. Missing: per-parameter descriptions for some optional params (e.g., languages in fetch_youtube_transcript lacks detail on format/codes). No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all tools being read-only.
Probe every curated feed and report HTTP status — use this to find stale URLs.
Find RSS/Atom feeds linked from a web page (via <link rel="alternate">). Useful for finding the feed URL of a new AI blog before adding it to your $X_MCP_FEEDS_FILE.
Fetch curated AI blog/news RSS feeds. Returns `{"items": [...], "failures": [...]}` — failures list per-feed errors so broken URLs are visible rather than silently dropped. Omit `feeds` to fetch all. Use `list_ai_feeds` to see available names.
Fetch the latest entries from any RSS/Atom feed.
Fetch the transcript of a YouTube video. Accepts any YouTube URL (watch, shorts, youtu.be, embed) or a raw 11-char video ID. By default returns a plain-text `transcript`; set `include_timestamps=True` to get timed `segments` instead. Use for one-off "summarize this video" requests. Heads-up: an hour-long video can be ~20k tokens — ask for a summary, not a verbatim dump, when pulling long videos.
Output schemas undocumented. Tools return structured dicts (e.g., fetch_ai_feeds → {items, failures, truncated}) but MCP tool definitions lack explicit return type schemas. LLMs cannot plan downstream operations or validate response structure.
No error recovery guidance. Tools lack actionable error messages. E.g., if a feed URL is invalid or a YouTube video has no transcript, the response is silent or generic. LLMs cannot self-correct or suggest alternatives.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
List the curated AI RSS feeds available to `fetch_ai_feeds`. Includes built-in feeds plus anything in your $X_MCP_FEEDS_FILE override.
Resolve a YouTube handle (@foo), custom URL, or channel URL to a canonical channel ID + RSS feed URL for new uploads. Returns a `suggested_feeds_entry` ready to paste into feeds.json / your $X_MCP_FEEDS_FILE. Once added, new videos will flow through `fetch_ai_feeds` and `search_all` alongside blog posts (tagged source="youtube").
Fan-out search across HN, Reddit, arXiv, and (if configured) X. Returns `{"items": [...], "errors": [...]}` — errors lists per-source failures. Set `include_x=False` to skip X even when configured (e.g. to avoid billing).
Search arXiv for recent papers. Defaults to cs.AI, cs.CL, cs.LG. Sorted by submission date.
Search Hacker News stories by keyword over the last `since_days` days.
Search Reddit across AI-focused subreddits (or custom ones). `since` accepts: hour, day, week, month, year, all. Defaults cover: LocalLLaMA, MachineLearning, singularity, OpenAI, ClaudeAI.
Search X (Twitter) via twitterapi.io. `query` supports X advanced search syntax: "claude 4.7 min_faves:50", "from:sama AI", "#LLM -filter:replies". `query_type` is "Latest" or "Top". Each page is ~20 tweets (~$0.003 at twitterapi.io's $0.15/1k rate).
Missing tool annotations. All 12 tools are read-only but lack readOnlyHint annotation. Agents cannot distinguish safe tools from destructive ones without explicit hints.
Parameter constraints not exposed in schemas. E.g., limit is clamped to MAX_LIMIT in code but schema has no maximum constraint. since in search_reddit accepts only {hour, day, week, month, year, all} but schema is free-form string, not enum.
Incomplete parameter descriptions. fetch_youtube_transcript.languages lacks detail on format (ISO 639-1 codes?). list_ai_feeds has empty input schema but no description of what it returns or when to call it.