MCP server for X (Twitter) — post tweets, upload media, manage interactions via Claude Code/Desktop
8 tools with mixed quality. Most have verb-based names (post_, delete_, get_, search_, upload_, like_, retweet, get_) and non-trivial descriptions (72 - 180 chars, within baseline 34 - 392 range). Input schemas are visible and mostly complete with type annotations and parameter descriptions. However, output schemas are not documented in source, no structured response definitions provided. Error handling uses a generic error wrapper (createErrorResponse) without domain-specific recovery guidance. Several tools accept overloaded parameters (e.g., search_tweets accepts query without enum constraints for operators). Risk annotations (WRITE, DESTRUCTIVE, READ_ONLY) are declared informally in comments, not via tool annotations in the MCP payload.
Delete a tweet by its ID. Requires OAuth 2.0 user auth.
Retrieve recent tweets that mention the authenticated user. Requires OAuth 2.0 user auth.
Fetch a single tweet by ID with full details including author info, metrics, and media.
Like a tweet as the authenticated user. Requires OAuth 2.0 user auth.
Post a new tweet. Optionally attach media or reply to an existing tweet. Requires OAuth 2.0 user auth.
Retweet a tweet as the authenticated user. Requires OAuth 2.0 user auth.
Output schemas not documented. Tools return structured data from twitter-api-v2 client but no formal response schema is visible in source. LLMs cannot predict output shape, field names, or chaining opportunities.
Error handling is generic. wrapToolHandler catches errors and returns isError: true with unstructured text. No recovery guidance (e.g., 'Try search_tweets if tweet not found'). Errors do not indicate retryability or user-fixable vs. fatal.
Risk annotations (WRITE, DESTRUCTIVE, READ_ONLY) are informal comments, not MCP tool annotations. spec 2026-07-28 supports readOnlyHint, destructiveHint, idempotentHint in tool definition; these are absent.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 58 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 46 | - | v1 |
Search recent tweets (last 7 days) using a query string. NOTE: Requires Basic or Pro tier X API access.
Upload an image or video file to X/Twitter. Returns a media_id to use with post_tweet. Requires OAuth 2.0 user auth.
search_tweets 'query' parameter accepts free-form string with operators (e.g., '-is:retweet', 'lang:en', 'from:user'). No enum constraints or regex pattern documented. LLMs may hallucinate invalid operators.
Destructive tools (delete_tweet) lack confirmation/dry-run pattern. No mechanism to prevent accidental deletion.
No pagination implementation visible in source. search_tweets accepts next_token parameter but source does not show how results are capped or how total count is returned. Large result sets could exceed context.