MCP server for X (Twitter): search and read user timelines from Claude / ChatGPT / any MCP client. No paid API — twikit cookie auth.
Two tools with clear verb-noun naming (search, user_tweets) and good descriptions (194 - 250 chars, within baseline 34 - 392). Input schemas present with types and defaults. However, output schemas are undocumented, LLMs cannot plan downstream calls or extract fields reliably. Error handling is present but generic; _wrap_twikit_error provides context but lacks actionable recovery steps. No parameter validation constraints (e.g., limit bounds). Descriptions mention X syntax support but lack examples of when to use each tool vs. the other.
Search X (Twitter) posts by keyword. Read-only. Supports X search syntax: from:handle, to:handle, since:YYYY-MM-DD, until:YYYY-MM-DD, "exact phrase", -exclude, OR. Returns latest matches.
Read recent posts from an X (Twitter) user. Read-only. Pass the handle without @. Example: handle="simonw" → fetches simonw's recent posts.
Output schema undocumented. Tools return list[dict] but LLMs cannot see field names (id, text, author, etc.) or types. Breaks downstream tool chaining and forces LLMs to guess field structure.
No parameter constraints. 'limit' accepts any integer; no min/max bounds. LLMs could pass limit=999999, causing timeouts or API abuse. Baseline: numeric params should specify range (e.g., 1 - 100).
Error messages lack recovery guidance. _wrap_twikit_error returns 'Cookie auth failed' or 'upstream twikit issue' but does not tell the LLM what to do next (e.g., 'Try xee-mcp init --force' is in the hint but not in the exception message returned to the client).
No tool-level distinction. Both tools read X data but serve different intents (keyword search vs. user timeline). Descriptions do not explain when to prefer one over the other, forcing LLMs to reason about overlap.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | <=2025-11-25 | v2 |
STDIO transport only. Server is not remotely accessible and cannot be used by hosted MCP clients (e.g., Claude.ai, ChatGPT plugins). Limits deployment to local/desktop environments.