thread-storm
Provides tools for publishing text posts and threads to Threads, as well as fetching profile info, posts, replies, insights, and searching Threads.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@thread-storm publish a thread about AI trends to both Threads and Twitter"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Thread Storm
MCP server for publishing threads to Threads and Twitter/X simultaneously from Claude Code. Journal your thoughts, convert them to viral threads, and post everywhere at once.
Features
13 tools available via MCP:
Threads (9 tools)
Tool | Description |
| Fetch Threads profile info |
| List recent posts with pagination |
| Get full details for a specific post |
| Engagement metrics (views, likes, replies, reposts, quotes, shares) |
| Direct replies to a specific post |
| Keyword search across Threads |
| Account-level metrics |
| Publish a text post (optional reply) |
| Publish a multi-post thread |
Twitter/X (3 tools)
Tool | Description |
| Fetch Twitter profile info |
| Post a tweet (optional reply) |
| Post a tweet thread |
Cross-Platform (1 tool)
Tool | Description |
| Publish to BOTH Threads and Twitter simultaneously |
Related MCP server: meta-threads-mcp
Prerequisites
Python 3.12+
A Meta developer app with Threads API access
A Twitter/X developer app with Read+Write permissions
Quick Start
Clone the repo:
git clone https://github.com/asadhuddleduck/thread-storm.git cd thread-stormInstall dependencies:
uv syncAdd to your
.mcp.json:{ "mcpServers": { "thread-storm": { "command": "uv", "args": ["run", "--python", "3.12", "--directory", "/path/to/thread-storm", "thread-storm"], "env": { "THREADS_ACCESS_TOKEN": "your-threads-token", "THREADS_APP_SECRET": "your-threads-app-secret", "TWITTER_API_KEY": "your-twitter-api-key", "TWITTER_API_SECRET": "your-twitter-api-secret", "TWITTER_ACCESS_TOKEN": "your-twitter-access-token", "TWITTER_ACCESS_TOKEN_SECRET": "your-twitter-access-token-secret" } } } }Restart Claude Code. All 13 tools will be available.
Environment Variables
Variable | Platform | Description |
| Threads | Long-lived token from Meta's User Token Generator |
| Threads | App secret from Meta developer app |
| OAuth 1.0a consumer API key | |
| OAuth 1.0a consumer API secret | |
| OAuth 1.0a user access token | |
| OAuth 1.0a user access token secret |
Architecture
src/thread_storm/
threads_client.py — Threads HTTP client (GET via urllib, POST via curl)
twitter_client.py — Twitter client via tweepy (OAuth 1.0a)
server.py — FastMCP server with 13 tool definitionsThreads Publishing Flow
Create media container (POST)
Poll container status until FINISHED (2s intervals)
Publish container (POST)
Wait 10s propagation delay before next reply
Twitter Publishing Flow
Post tweet (POST /2/tweets)
Post next tweet with
in_reply_to_tweet_idNo polling or delays needed
storm_publish_thread
Runs both platforms in parallel using ThreadPoolExecutor. Twitter finishes in seconds while Threads takes 1-2 minutes for a 9-post thread.
Token Management (Threads)
Threads tokens expire after 60 days. Auto-refresh kicks in at day 30:
Token saved to
~/.threads-mcp/token.jsonon first useAfter day 30, exchanged for a fresh 60-day token
New token saved to both
token.jsonand.mcp.json
Twitter OAuth 1.0a tokens do not expire.
Rate Limits
Threads publishing: 250 posts per 24 hours
Threads search: 500 queries per 7 days
Twitter publishing: 500 tweets per month (Free tier)
License
MIT
Available Tools
13 toolsstorm_publish_threadA
Publish a thread to BOTH Threads and Twitter/X simultaneously.
This is the hero tool. Takes a list of text strings and publishes them as a connected thread on both platforms in parallel. Threads posts are slower (container polling + propagation delays) while Twitter is near-instant.
Args: posts: List of text strings to publish as a thread on both platforms.
Returns: JSON string with results from both platforms including post IDs and permalinks.
Inputs: posts (required). Returns: result
threads_get_account_insightsA
Fetch account-level engagement metrics for the authenticated user.
Args: period: Time period for metrics. Valid values: "day", "week", "days_28", "lifetime".
Returns: JSON string with account metrics including views, likes, and followers count.
Inputs: period. Returns: result
threads_get_post_detailsA
Fetch detailed information about a specific Threads post.
Args: post_id: The ID of the post to retrieve.
Returns: JSON string with post details including text, timestamp, media type, permalink, and quote status.
Inputs: post_id (required). Returns: result
threads_get_post_insightsA
Fetch engagement metrics for a specific Threads post.
Args: post_id: The ID of the post to get insights for.
Returns: JSON string with metric name/value pairs for views, likes, replies, reposts, quotes, and shares.
Inputs: post_id (required). Returns: result
threads_get_postsA
Fetch the authenticated user's recent Threads posts.
Args: limit: Maximum number of posts to return (default 25). cursor: Pagination cursor from a previous response to fetch the next page.
Returns: JSON string with a list of posts and pagination info (next cursor if available).
Inputs: limit, cursor. Returns: result
threads_get_profileA
Fetch the authenticated user's Threads profile information.
Returns: JSON string with profile data including id, username, name, bio, and profile picture URL.
Inputs: no named parameters. Returns: result
threads_get_repliesA
Fetch direct replies to a specific Threads post.
Returns only single-level direct replies, not recursive thread reconstruction.
Args: post_id: The ID of the post to get replies for. limit: Maximum number of replies to return (default 25).
Returns: JSON string with a list of replies including id, text, timestamp, and username.
Inputs: post_id (required), limit. Returns: result
threads_publish_textA
Publish a text post to Threads, optionally as a reply to another post.
Use reply_to_id to chain posts into a thread (each post replies to the previous one). Limit: 250 API-published posts per 24-hour window. Max 500 characters per post.
Args: text: The text content to publish. reply_to_id: Optional post ID to reply to (for building threads).
Returns: JSON string with the published post ID and permalink.
Inputs: text (required), reply_to_id. Returns: result
threads_publish_threadA
Publish a full thread (multiple posts chained as replies) to Threads.
Takes a list of text strings and publishes them sequentially. The first post becomes the root, and each subsequent post replies to the previous one.
Args: posts: List of text strings to publish as a thread (7-12 posts typical).
Returns: JSON string with all published post IDs, permalinks, and the root permalink.
Inputs: posts (required). Returns: result
threads_searchA
Search Threads for posts matching a keyword query.
Note: The Threads API allows 500 keyword search queries per rolling 7-day period.
Args: query: The search query string. limit: Maximum number of results to return (default 25).
Returns: JSON string with matching posts including id, text, timestamp, and permalink.
Inputs: query (required), limit. Returns: result
twitter_get_profileA
Fetch the authenticated user's Twitter/X profile information.
Returns: JSON string with profile data including id, username, name, bio, and follower counts.
Inputs: no named parameters. Returns: result
twitter_publish_textA
Publish a tweet to Twitter/X, optionally as a reply to another tweet.
Args: text: The tweet content (280 chars standard, 25000 for Premium). reply_to_id: Optional tweet ID to reply to.
Returns: JSON string with the published tweet ID and permalink.
Inputs: text (required), reply_to_id. Returns: result
twitter_publish_threadA
Publish a full thread (multiple tweets chained as replies) to Twitter/X.
Args: posts: List of text strings to publish as a tweet thread.
Returns: JSON string with all published tweet IDs and permalinks.
Inputs: posts (required). Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 13 tools
Each tool targets a distinct resource-action pair: profiles, posts, details, insights, replies, search, and publishing variants. The only potential overlap between threads_publish_thread and storm_publish_thread is clearly delineated by their descriptions (single-platform vs dual-platform).
All tools follow a consistent snake_case verb_noun pattern with platform prefixes (threads_, twitter_, storm_). Verbs are limited to get, publish, and search, and resources are clearly named (profile, posts, details, insights, thread). No naming style deviations.
13 tools is appropriate for a server covering two social platforms plus a combined publishing feature. Each tool fills a clear role, and the count is within the ideal 3-15 range without feeling sparse or bloated.
Core workflows are well covered: profile retrieval, post reading, insights, searching, and publishing single posts or threads on Threads, plus publishing on Twitter. The main gaps are the lack of Twitter read operations (e.g., fetching tweets, timeline) and no update/delete functionality, but these are minor for the server's evident cross-posting focus.
Maintenance
Related MCP Connectors
Hosted X (Twitter) MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Publish and schedule videos to TikTok, YouTube Shorts, Instagram, Facebook, LinkedIn, Pinterest, Bluesky, Threads and X from Claude, Cursor or any MCP client. Upload once, post everywhere, track views in unified analytics, and retry failed posts. Official platform APIs only, free plan available. Docs: https://docs.multi-upload-tool.com/mcp
Hosted MCP server for AI agents to post to LinkedIn profiles and X and upload to YouTube.
PostHero MCP server — schedule and publish social media posts from any MCP-compatible AI tool
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that allows Claude to create, manage and publish X/Twitter posts directly through the chat interface.561MIT
- AlicenseAqualityDmaintenanceUnofficial MCP server for Meta's Threads API. Enables LLMs like Claude to publish posts, manage replies, and track insights through the Model Context Protocol.15MIT
- FlicenseAqualityDmaintenanceAn MCP server that formats and syndicates Markdown content to Twitter/X, Threads, and a static blog on S3, with automatic thread splitting and preview capabilities.3-
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that enables Claude to automate Twitter posting with AI-generated images and thread support.7 npmMIT