Skip to main content
Glama
asadhuddleduck

thread-storm

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

threads_get_profile

Fetch Threads profile info

threads_get_posts

List recent posts with pagination

threads_get_post_details

Get full details for a specific post

threads_get_post_insights

Engagement metrics (views, likes, replies, reposts, quotes, shares)

threads_get_replies

Direct replies to a specific post

threads_search

Keyword search across Threads

threads_get_account_insights

Account-level metrics

threads_publish_text

Publish a text post (optional reply)

threads_publish_thread

Publish a multi-post thread

Twitter/X (3 tools)

Tool

Description

twitter_get_profile

Fetch Twitter profile info

twitter_publish_text

Post a tweet (optional reply)

twitter_publish_thread

Post a tweet thread

Cross-Platform (1 tool)

Tool

Description

storm_publish_thread

Publish to BOTH Threads and Twitter simultaneously

Related MCP server: meta-threads-mcp

Prerequisites

  • Python 3.12+

  • uv

  • A Meta developer app with Threads API access

  • A Twitter/X developer app with Read+Write permissions

Quick Start

  1. Clone the repo:

    git clone https://github.com/asadhuddleduck/thread-storm.git
    cd thread-storm
  2. Install dependencies:

    uv sync
  3. Add 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"
          }
        }
      }
    }
  4. Restart Claude Code. All 13 tools will be available.

Environment Variables

Variable

Platform

Description

THREADS_ACCESS_TOKEN

Threads

Long-lived token from Meta's User Token Generator

THREADS_APP_SECRET

Threads

App secret from Meta developer app

TWITTER_API_KEY

Twitter

OAuth 1.0a consumer API key

TWITTER_API_SECRET

Twitter

OAuth 1.0a consumer API secret

TWITTER_ACCESS_TOKEN

Twitter

OAuth 1.0a user access token

TWITTER_ACCESS_TOKEN_SECRET

Twitter

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 definitions

Threads Publishing Flow

  1. Create media container (POST)

  2. Poll container status until FINISHED (2s intervals)

  3. Publish container (POST)

  4. Wait 10s propagation delay before next reply

Twitter Publishing Flow

  1. Post tweet (POST /2/tweets)

  2. Post next tweet with in_reply_to_tweet_id

  3. No 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:

  1. Token saved to ~/.threads-mcp/token.json on first use

  2. After day 30, exchanged for a fresh 60-day token

  3. New token saved to both token.json and .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 tools
storm_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
postsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses some behavioral traits: it publishes in parallel, notes Threads is slower due to container polling/propagation delays, and Twitter is near-instant. It also mentions the return format. However, with no annotations, it does not cover permissions, failure modes, or reversibility of posts, leaving significant gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with separate sections for action, timing, args, and returns. It is concise, with every sentence earning its place, and the 'hero tool' note adds a slight motivational tone without harming clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with moderate complexity (dual-platform publishing, parallelism, timing differences), the description covers input, output, and behavioral differences. It does not detail error handling or partial failures, but the existence of an output schema reduces the need to describe return values. Overall, it is sufficiently complete for an agent to use it correctly in most cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only shows a 'posts' array with no description, but the description's Args section explicitly explains that posts is 'List of text strings to publish as a thread on both platforms.' This adds clear meaning beyond the schema and fully compensates for the 0% schema description coverage, though it lacks constraints like limits or formatting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('publish'), the resource ('a thread to BOTH Threads and Twitter/X simultaneously'), and distinguishes it from siblings by emphasizing the dual-platform nature. The verb is specific and the scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context for when to use this tool (when you want to publish to both platforms), and the phrase 'This is the hero tool' suggests it is the preferred approach for that scenario. However, it does not explicitly mention alternatives or when to use separate tools, so it lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoday

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses scope (authenticated user) and return content (views, likes, followers count). However, it does not mention rate limits, permission requirements, or potential errors. It does not explicitly state it is a read-only operation, though 'Fetch' implies it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: a single front-loaded sentence for the main purpose, followed by clean 'Args' and 'Returns' sections with no extraneous text. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with an output schema, the description is mostly complete. It defines the period parameter, lists valid values, and summarizes return fields. Minor gaps include not explaining the metric periods in more depth, but the output schema likely covers return details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides only a default value for 'period' with no description. The description adds meaning by explaining the parameter's purpose and listing valid values ('day', 'week', 'days_28', 'lifetime'). This goes beyond the schema, though it could further explain the effect of each period.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Fetch account-level engagement metrics for the authenticated user,' which clearly states the verb (fetch), the resource (account-level engagement metrics), and its scope (authenticated user). The term 'account-level' inherently distinguishes it from sibling post-level tools like threads_get_post_insights.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is only implied by the purpose and the 'account-level' scope. There is no explicit guidance on when to prefer this over sibling tools like threads_get_post_insights or what prerequisites exist. It provides no exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the return format ('JSON string') and lists the included fields ('text, timestamp, media type, permalink, and quote status'). This gives useful context about what to expect. It does not mention error cases or authentication, but for a simple fetch tool, this level of transparency is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise, with a clear one-sentence purpose followed by Args and Returns sections. Every line provides useful information; no fluff or redundancy. It is well-structured and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one required parameter) and the presence of an output schema, the description is complete enough. It states the purpose, explains the argument, and summarizes the return content. There are no hidden complexities or missing critical context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates with an explicit 'Args' section: 'post_id: The ID of the post to retrieve.' This adds meaning beyond the schema's bare title 'Post Id.' Although only one parameter exists, the description adequately explains its semantic role.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Fetch detailed information about a specific Threads post.' It uses a specific verb ('Fetch') and identifies the resource ('specific Threads post'), which distinguishes it from sibling tools like threads_get_posts (plural, listing) and threads_get_post_insights (analytics). The name also reinforces this.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: use this when you need details for a specific post identified by post_id. However, it does not explicitly mention alternatives or when not to use it, such as comparing against threads_get_posts for lists or threads_get_replies for comments. The guidance is present but not explicitly contrasted with siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It explicitly states the return format (JSON string) and the specific metrics included (views, likes, replies, reposts, quotes, shares). It does not mention error handling or rate limits, but it clearly communicates the primary behavior and output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured with Args and Returns sections. Every sentence adds necessary information without redundancy, and the main purpose is front-loaded in the first sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool, the description adequately covers purpose, parameter meaning, and return value shape. It omits error cases or authentication requirements, but given the simplicity and output schema presence, it is reasonably complete. The sibling tool context further clarifies its scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides no description for post_id (0% coverage), so the description's clarification that it is 'the ID of the post to get insights for' adds meaningful value. While brief, it fully defines the only parameter, so the agent can correctly supply it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Fetch engagement metrics for a specific Threads post,' using a specific verb and resource. It distinguishes itself from sibling tools like threads_get_account_insights (account-level metrics) and threads_get_post_details (post content details) by focusing on engagement metrics for a single post.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes it clear this is for a specific post's engagement metrics, which implies when to use it. However, it does not explicitly name alternatives or provide exclusion criteria, but the context is sufficient for an agent to infer appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of disclosing behavior. It states the operation is a read ('Fetch'), scopes to the authenticated user, and describes the return as a JSON string with posts and pagination info. It does not cover rate limits or error cases, but the disclosed behavior is sufficient for basic invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the core purpose, and uses a clear Args/Returns structure. Every sentence serves a purpose without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with two optional parameters, and the description covers both, describes pagination, and specifies the return format. The presence of an output schema further reduces the need to detail return values. No essential information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the schema has parameters, the description adds meaningful semantics: 'limit' is the maximum number of posts, and 'cursor' is for pagination from a previous response. This goes beyond the bare schema and fully explains how to use each parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches the authenticated user's recent Threads posts, using a specific verb and resource. This scope distinguishes it from sibling tools like threads_get_post_details, threads_get_replies, and threads_search, which target specific posts or different query modes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies it is for retrieving the current user's recent posts with pagination, but it does not explicitly exclude alternatives or mention when to prefer this over sibling tools. The context is clear enough for an agent to select it for list-recent-posts scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It does state that the tool returns a JSON string with profile fields and implies read-only behavior via 'Fetch,' but it omits details about authentication requirements, rate limits, or error conditions. This is a gap for a tool with no annotation support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: one sentence stating the action, followed by a 'Returns:' line listing output characteristics. Every word earns its place, with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters) and the existence of an output schema, the description is largely complete. It clarifies the return format and fields, but could briefly mention authentication expectations or error behavior. Overall, it is sufficient for a straightforward profile-fetch operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline of 4 applies. The description adds no parameter-level details because there are none, but it does list the returned fields, which is relevant context though not strictly parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches the authenticated user's Threads profile information, using a specific verb and resource. It distinguishes itself from siblings like threads_get_posts and twitter_get_profile by explicitly naming Threads and focusing on the user's profile.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The use case is implied by the phrase 'authenticated user's Threads profile,' but no explicit when-to-use or when-not-to-use guidance is given. It does not mention alternatives or situations where a different tool should be preferred, such as twitter_get_profile for Twitter profiles.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
post_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states that the tool returns only direct replies, specifies the return format as a JSON string with id, text, timestamp, and username, and mentions the default limit. This is sufficient behavioral context for a straightforward fetch operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and appropriately sized: a purpose statement, a clarifying sentence about single-level replies, an Args section, and a Returns section. It is front-loaded with the essential purpose, and every sentence earns its place without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the absence of annotations, the description covers the critical aspects for a simple fetch tool: what it does, what parameters it takes, and what it returns. The inclusion of the return structure and the limitation to direct replies provides a complete enough picture for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no descriptions for parameters (0% coverage), so the description must compensate. It does by explicitly explaining post_id as the ID of the post, and limit as the maximum number of replies with a default of 25. This adds meaningful semantics beyond the raw schema and fully clarifies each parameter's purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Fetch' with the resource 'direct replies to a specific Threads post'. It also distinguishes itself from siblings by clarifying it returns only single-level direct replies, not recursive thread reconstruction, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by specifying the scope: only single-level direct replies. It explicitly states what it does NOT do ('not recursive thread reconstruction'), which serves as a when-not guideline. However, it does not name alternative tools for that use case, so it stops short of complete alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
reply_to_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the full burden. It discloses important behavioral traits: the 250-post daily limit, the 500-character maximum, and the reply-chaining semantics. It also notes the return value (post ID and permalink). While it does not mention authentication or error handling, the disclosed limits and reply behavior provide meaningful transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and concise. It opens with a clear purpose, then provides usage guidance and limits, followed by parameter explanations and return value. Every sentence earns its place, with no redundant or vague wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 parameters, one required, with an output schema), the description covers all necessary aspects: purpose, usage, limits, parameter semantics, and return value. The presence of an output schema means return details are optional, but including them adds completeness. It is sufficient for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully compensate. The Args section adds clear semantics: 'text: The text content to publish' and 'reply_to_id: Optional post ID to reply to (for building threads).' This goes beyond the bare property names and gives the agent the necessary context to set these parameters correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence clearly states the tool's function: 'Publish a text post to Threads, optionally as a reply to another post.' This is specific about the action, resource, and scope, and implicitly distinguishes it from sibling tools like threads_publish_thread by focusing on a single text post and reply functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance for using reply_to_id to chain posts into a thread, and mentions the 24-hour limit and 500-character cap, which helps set expectations. It does not explicitly contrast with threads_publish_thread, but the purpose statement and the reply chaining instruction give clear context for when to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
postsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does explain the sequential publishing behavior and that the return is a JSON string with post IDs and permalinks. However, it lacks information on failure behavior, rate limits, authentication, or other side effects, which is a notable gap for a write operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the main purpose, and structured with Args/Returns sections. Every sentence provides useful information with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has a low-complexity interface with one parameter and an output schema. The description explains the return format and the basic behavior, making it mostly complete. However, it lacks explicit guidance on when to use this tool versus similar siblings, which prevents a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only defines 'posts' as an array of strings with no description. The description adds meaningful semantics by explaining these are text strings to be published as a thread, and gives a typical length of 7-12 posts. This compensates well for the 0% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool publishes a full thread with posts chained as replies. The verb 'publish' and resource 'full thread' are specific, and the mention of chaining distinguishes it from sibling tools like threads_publish_text, which likely publishes a single post.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on what the tool does (publish a list of text strings as a threaded sequence), which implies when to use it. However, it does not explicitly name alternatives or state when NOT to use this tool, such as when publishing a single post or to another platform.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description indicates it returns a JSON string with specific fields and implies authentication ('authenticated user'), but with no annotations, it does not explicitly disclose read-only behavior, error conditions, or rate limits. The 'Fetch' verb suggests a safe read operation, but this is not explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, containing only two sentences that clearly state the purpose and return data, with no unnecessary information. It is front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with an output schema, the description adequately specifies the return format and scope. It clearly states that it fetches the authenticated user's profile and lists key fields returned. No additional context is necessary for such a simple, self-contained operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool accepts zero parameters, and the schema coverage is 100% by default. The description adds no parameter details, which is appropriate given there are no parameters to document, aligning with the baseline of 4 for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Fetch') and resource ('the authenticated user's Twitter/X profile information'), distinguishing it from sibling tools like threads_get_profile by specifying the platform and the authenticated user's own profile. The scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided regarding when to use this tool versus alternatives. It does not mention exclusions, alternatives, or specific contexts, leaving the agent to infer usage solely from the name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
reply_to_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the character limits (280 standard, 25000 for Premium) and the return format (JSON string with tweet ID and permalink). However, it doesn't mention authentication requirements, irreversibility of publishing, or error behavior, which would be useful for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a clear one-line purpose, followed by structured Args and Returns sections. Every sentence is informative, and there is no filler or repetition of schema information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool, the description covers the core purpose, parameters, and return value. The output schema exists, so return details are not solely dependent on the description. The main gap is lack of explicit usage guidance versus the thread-publishing sibling and absence of auth/error context, but overall it is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully explain the parameters. It does: 'text' is described with content and character constraints, and 'reply_to_id' is explained as an optional tweet ID to reply to. This adds substantial meaning beyond the bare schema types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Publish' with a clear resource ('a tweet to Twitter/X') and an optional behavior ('as a reply to another tweet'). This distinguishes it from sibling tools like twitter_publish_thread, which publishes threads, and threads_publish_text, which targets a different platform.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended usage is implied: use this tool for a single tweet, optionally as a reply. However, it doesn't explicitly mention alternatives or when not to use it, such as 'for multiple tweets, use twitter_publish_thread instead.' The context is clear but not explicitly differentiated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
postsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It does mention the return format (JSON with tweet IDs and permalinks) and that tweets are chained as replies, but it omits critical behaviors like the fact that this posts publicly, requires authentication, and may have rate limits or partial-failure consequences. The posting action's irreversibility and auth needs are not disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is succinct and well-structured: a one-sentence purpose followed by an Args and Returns section. Every sentence provides necessary information, with no redundant filler or excessive detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is relatively simple (one parameter, output schema exists, description covers return value), but the description lacks usage guidelines (when to use vs alternatives) and important behavioral disclosures like auth and public visibility. It is adequate for basic understanding but not fully complete for an AI agent deciding when and how to invoke it safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one parameter with 0% description coverage, so the description must add meaning. The Args section states 'posts: List of text strings to publish as a tweet thread,' which clarifies each element is a tweet but does not specify constraints like max tweet length, order sensitivity, or handling of empty strings. It adds some value beyond the schema but not comprehensive details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'Publish a full thread (multiple tweets chained as replies) to Twitter/X.' It uses a specific verb and resource (thread publishing) and implicitly distinguishes from siblings like twitter_publish_text (single tweet) and threads_publish_thread (Threads platform).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates the tool is for threads ('full thread', 'multiple tweets chained as replies') which implies when to use it, but it does not explicitly state when not to use it or mention alternatives such as twitter_publish_text for single tweets. It provides clear context but no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 13 tool updatesv0.2.0
    • First observedstorm_publish_thread
    • First observedthreads_get_account_insights
    • First observedthreads_get_post_details
    • First observedthreads_get_post_insights
    • First observedthreads_get_posts
    • First observedthreads_get_profile
    • First observedthreads_get_replies
    • First observedthreads_publish_text
    • First observedthreads_publish_thread
    • First observedthreads_search
    • First observedtwitter_get_profile
    • First observedtwitter_publish_text
    • First observedtwitter_publish_thread

TDQS

A4.2/5.0
Disambiguation5/5

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).

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Unofficial MCP server for Meta's Threads API. Enables LLMs like Claude to publish posts, manage replies, and track insights through the Model Context Protocol.
    15
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    An 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
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/asadhuddleduck/thread-storm'

If you have feedback or need assistance with the MCP directory API, please join our Discord server