Twitter/X MCP server — give any AI agent Twitter superpowers
ShipPost has 14 tools with consistent naming (verb_noun pattern) and reasonable descriptions (avg ~150 chars). All tools have input schemas with types and descriptions. However, output schemas are undocumented (tools return JSON strings without declared structure), error handling is minimal, and several tools lack actionable guidance for LLM recovery. Parameter descriptions are adequate but lack constraints (enums, ranges). No tool annotations (readOnlyHint/destructiveHint) despite clear risk stratification (6 WRITE tools, 8 READ_ONLY). Security: credentials injected via env vars (good), but no audit logging visible.
Draft a reply to a tweet in your voice using AI. Analyzes the tweet and generates a reply that matches your writing style. Returns a DRAFT — does not post automatically. Use reply_to_tweet() to post. Requires a ShipPost API key (SHIPPOST_API_KEY). Get one at https://shippost.ai
Draft an original tweet about a topic in your voice using AI. Returns a DRAFT — does not post automatically. Use post_tweet() to post. Requires a ShipPost API key (SHIPPOST_API_KEY). Get one at https://shippost.ai
Scan my timeline and find the best tweets to reply to, scored by relevance. Uses AI to analyze each tweet and score it on: - Relevance to your niche/expertise - Engagement potential (will a reply get seen?) - Reply opportunity (can you add genuine value?) Returns scored tweets with suggested reply angles. Requires a ShipPost API key (SHIPPOST_API_KEY). Get one at https://shippost.ai
Follow a Twitter user.
Get recent tweets that mention me. Returns tweets where other users have @mentioned the authenticated user.
Output schemas undocumented. All tools return JSON strings without declared structure. LLMs cannot plan downstream calls or extract fields reliably.
Tool annotations missing. 6 WRITE tools (post_tweet, reply_to_tweet, like_tweet, retweet, follow_user, and implicit state changes) lack destructiveHint. READ_ONLY tools lack readOnlyHint. Agents cannot distinguish safe from risky operations.
Minimal error handling. Tools return JSON errors (e.g. 'error: Tweet is X characters') but do not guide recovery. No categorization (retryable vs user-fixable vs fatal). Agents cannot self-correct.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 69 | <=2025-11-25 | v2 |
Get the authenticated Twitter user's profile — name, bio, follower count, tweet count.
Get recent tweets from my home timeline. Returns tweets with text, author, engagement metrics, and URLs. Use this to see what's happening in the user's feed.
Get a specific tweet by its ID. Returns the full tweet text, author, engagement metrics, and conversation context.
Look up a Twitter user's profile by their username. Returns their name, bio, follower/following counts, and tweet count.
Like a tweet.
Post a tweet from the authenticated user's account. The tweet will be posted immediately and publicly visible.
Reply to a specific tweet. Posts a public reply to the given tweet from the authenticated user's account.
Retweet a tweet.
Search recent tweets by keyword or phrase. Searches the last 7 days of public tweets. Retweets are excluded. Returns tweets with text, author, engagement metrics, and URLs.
Sparse descriptions on engagement tools. like_tweet, retweet, follow_user have descriptions under 20 chars ('Like a tweet.', 'Retweet a tweet.', 'Follow a Twitter user.'). Insufficient for LLM selection.
No parameter constraints. max_results lacks min/max bounds (e.g. get_timeline accepts 1-100 per description but schema has no validation). query in search_tweets has no length/format constraints. LLMs can pass invalid values.