OpenTweet MCP Server
OfficialClick on "Install 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., "@OpenTweet MCP ServerSchedule this tweet for tomorrow at 9am"
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.
OpenTweet MCP Server
Post, schedule, and thread on X (Twitter) from Claude, Cursor, ChatGPT, Windsurf, or any MCP client. 30 tools covering tweets, threads, scheduling, an evergreen queue, analytics, AI media generation, and multi-account management.
No X developer account, no OAuth app setup, no pay-per-call API billing. OpenTweet owns the X connection; your agent gets simple tools.
Quick start: hosted server (recommended)
Nothing to install. Point your MCP client at the hosted Streamable HTTP endpoint:
https://mcp.opentweet.io/mcpClaude Code, one command:
claude mcp add --transport http opentweet \
https://mcp.opentweet.io/mcp \
--header "Authorization: Bearer ot_your_api_key"Or any MCP client config (Claude, Cursor, Windsurf, ChatGPT connectors):
{
"mcpServers": {
"opentweet": {
"type": "streamable-http",
"url": "https://mcp.opentweet.io/mcp",
"headers": { "Authorization": "Bearer ot_your_api_key" }
}
}
}Get your API key (prefix ot_) at opentweet.io/developer. Connect your X account once in the dashboard; the key covers everything else.
Related MCP server: Spectre
Other install options
Claude Desktop extension (one click)
Download the .mcpb extension from opentweet.io/claude-desktop and double-click it. Your API key is stored in the OS keychain.
Local via npm
npx -y @opentweet/mcp-server install # interactive installer, detects your clientOr add manually:
{
"mcpServers": {
"opentweet": {
"command": "npx",
"args": ["-y", "@opentweet/mcp-server"],
"env": { "OPENTWEET_API_KEY": "ot_your_api_key" }
}
}
}Config file locations:
Claude Desktop:
~/Library/Application Support/Claude/claude_desktop_config.json(macOS) or%APPDATA%\Claude\claude_desktop_config.json(Windows)Cursor:
~/.cursor/mcp.jsonWindsurf:
~/.codeium/windsurf/mcp_config.json
The 30 tools
Tweets and threads
create_tweet, create_thread, list_tweets, get_tweet, update_tweet, delete_tweet, publish_tweet, schedule_tweet, batch_schedule (up to 50 at once), repurpose_tweet
Media and AI generation
upload_media, generate_image, generate_video
Analytics and insights
get_analytics, get_top_posts, get_profile_growth, get_best_times, analyze_best_times, get_content_gaps, search_inspiration
Account
get_account, list_accounts (multi-account: pass x_account_id to any tool)
Evergreen queue
get_evergreen_settings, update_evergreen_settings, list_evergreen_posts, get_evergreen_post, add_to_evergreen, update_evergreen_post, remove_from_evergreen, get_evergreen_history
Plus MCP resources (account status, scheduled queue) and built-in prompts.
Example prompts
"Write 3 tweets about TypeScript tips and schedule them across this week at my best posting times."
"Turn this blog post into a thread and schedule it for tomorrow 9am."
"What were my top 5 tweets this month? Add the best one to my evergreen queue."
"Check my posting streak and content gaps, then draft tweets to fill them."
How it compares
X's official MCP server (XMCP) exposes the raw X API and can post, but it requires an X developer account, OAuth app credentials, and pay-per-use API billing, and it has no scheduling. OpenTweet is the managed publishing layer: flat pricing from $11.99/month, scheduling, threads, evergreen recycling, and analytics included. Full comparison: opentweet.io/mcp/post-to-x.
Links
Setup guide: opentweet.io/twitter-mcp-server
REST API docs: opentweet.io/docs/api
Pricing: opentweet.io/pricing (7-day free trial)
License
MIT
Available Tools
30 toolsopentweet_add_to_evergreenADestructive
Add a post to the evergreen queue pool. Either add an existing post by ID or create a new evergreen post with text content.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Text for a new evergreen post (if not using post_id) | |
| post_id | No | ID of an existing post to add to the evergreen pool | |
| category | No | Category for the new post (default: "General") | |
| is_thread | No | Whether this is a thread | |
| media_urls | No | Media URLs for the post | |
| x_account_id | No | Target X account ID (for multi-account users) | |
| cooldown_days | No | Custom cooldown days for this post (overrides default) | |
| thread_tweets | No | Thread tweets (if is_thread is true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveness (destructiveHint=true). The description does not add behavioral context beyond the basic action. It doesn't mention side effects, permissions, or what happens to the pool, which is acceptable given annotations cover the destructiveness hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundancy, front-loaded with the main action. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a tool with full schema descriptions, but it focuses only on 'text' for new posts, omitting other parameters like category, media, etc. Given 8 parameters and no output schema, a slightly more comprehensive overview would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by clarifying the mutual exclusivity of 'post_id' and 'text' ('either ... or'), which is not enforced in the schema. This helps the agent understand the correct usage pattern.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: adding a post to the evergreen queue pool. It distinguishes two modes (add existing by ID or create new with text), which sets it apart from sibling tools like opentweet_create_tweet or opentweet_remove_from_evergreen.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the two usage scenarios but does not explicitly guide when to use this tool over alternatives. No mention of preconditions or when not to use it, leaving the agent to infer from the sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_analyze_best_timesAIdempotent
Trigger a fresh analysis of the user's best posting times by pulling their last ~100 tweets from X (with engagement metrics) and computing an engagement-weighted heatmap. Uses owned-read X API calls (cheap under 2026 X pricing). Cooldown: once per 24 hours.
| Name | Required | Description | Default |
|---|---|---|---|
| x_account_id | No | Analyze a specific connected X account (for multi-account users) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare idempotentHint=true and destructiveHint=false. The description adds valuable behavioral details: it pulls last ~100 tweets, computes a heatmap, has a 24-hour cooldown, and uses cheap API calls. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each serving a clear purpose: first states the action, second details the method and cost, third specifies the cooldown. No extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter, no output schema, and rich annotations, the description covers the tool's purpose, constraints (cooldown, API cost), and behavior. It lacks an explicit description of the output format (e.g., 'returns a heatmap object'), but this is not critical for a computation trigger tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter x_account_id, with a description in the schema. The tool description does not add new semantic information beyond the schema's 'Analyze a specific connected X account (for multi-account users)'. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool triggers a fresh analysis of best posting times by pulling last ~100 tweets and computing an engagement-weighted heatmap. It uses a specific verb-resource combination and distinguishes itself from the sibling 'opentweet_get_best_times' by emphasizing the 'trigger fresh analysis' action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use this tool: 'Uses owned-read X API calls (cheap under 2026 X pricing). Cooldown: once per 24 hours.' This implies it's cost-effective but rate-limited. However, it does not explicitly state when not to use it or suggest alternatives like opentweet_get_best_times for cached results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_batch_scheduleBDestructiveIdempotent
Schedule multiple tweets at once. Each tweet must already exist as a draft. Provide an array of post IDs with their scheduled dates.
| Name | Required | Description | Default |
|---|---|---|---|
| schedules | Yes | Array of {post_id, scheduled_date} pairs (max 50) | |
| community_id | No | Optional X Community ID to post to | |
| x_account_id | No | Target X account ID (for multi-account users) | |
| share_with_followers | No | Share community posts with followers too |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations including destructiveHint: true, the description does not clarify what destructive means (e.g., overwriting existing schedules) or explain idempotency. It adds no context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, front-loaded with the core action and constraints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no mention of return values or behavior for a batch operation. Also fails to cover all parameters (community_id, x_account_id, share_with_followers are omitted).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description adds little beyond repeating the schema. It mentions the array of post IDs and dates but does not elaborate on the three other parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'schedule' and the resource 'multiple tweets' with a precondition that they must be drafts, distinguishing it from siblings like opentweet_schedule_tweet (single) and opentweet_publish_tweet (immediate).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear precondition (tweets must be drafts) but does not provide explicit when-to-use vs. alternatives such as opentweet_schedule_tweet for single scheduling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_create_threadADestructive
Create a Twitter/X thread (multiple connected tweets posted as a chain).
| Name | Required | Description | Default |
|---|---|---|---|
| tweets | Yes | Array of tweet texts in order (max 280 chars per tweet for free X accounts, up to 25,000 for Premium+) | |
| category | No | Category/topic tag | |
| publish_now | No | Set to true to publish immediately | |
| auto_retweet | No | Enable auto-retweet after posting | |
| x_account_id | No | Target X account ID (for multi-account users). Omit to use primary account. | |
| scheduled_date | No | ISO 8601 date-time to schedule. Omit to save as draft. | |
| auto_retweet_offset_minutes | No | Minutes to wait before auto-retweeting (e.g. 60, 120, 240). Defaults to 60. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true indicating mutation. Description adds minimal extra context (chain, multiple tweets) but does not disclose details like rate limits, required authentication, or side effects beyond creation. With existing annotations, this is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no filler, front-loaded with verb and resource. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so description could mention return values or confirmation. It lacks info on error cases or success response. For a creation tool with 7 parameters, it is minimally adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description does not add any meaning beyond what the schema already provides for each parameter; it repeats only the name and type implicitly via context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool creates a Twitter/X thread, specifying it is multiple connected tweets as a chain. This distinguishes it from sibling tools like opentweet_create_tweet which creates a single tweet.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives. The description implies it's for threads, but does not say 'use for multiple tweets' or 'do not use for single tweets'. lacks exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_create_tweetCDestructive
Create a tweet. Can save as draft, schedule for a specific time, or publish immediately to X.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Tweet text content (max 280 characters for free X accounts, up to 25,000 for Premium+) | |
| category | No | Category/topic tag (e.g. "Tech", "Marketing"). Defaults to "General" | |
| media_urls | No | Array of media URLs (upload first with opentweet_upload_media) | |
| publish_now | No | Set to true to publish immediately to X instead of saving as draft | |
| auto_retweet | No | Enable auto-retweet after posting. The tweet will be retweeted automatically after the specified offset. | |
| x_account_id | No | Target X account ID (for multi-account users). Omit to use primary account. | |
| scheduled_date | No | ISO 8601 date-time to schedule the tweet (e.g. "2026-03-15T09:00:00Z"). Omit to save as draft. | |
| auto_retweet_offset_minutes | No | Minutes to wait before auto-retweeting (e.g. 60, 120, 240, 480, 1440). Defaults to 60. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive (creation) and non-idempotent behavior, which the description matches. It adds the three posting modes but does not disclose additional traits like irreversibility or editing possibilities.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise but lacks important details. It earns its place but is too minimal for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters and many sibling tools, the description is sparse. It does not explain parameter interplay, error conditions, or return values. No output schema is present, so the description should provide more context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with individual parameter descriptions. The tool description provides a high-level summary of modes but adds minimal new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a tweet') and the three modes (draft, schedule, publish immediately). However, it does not differentiate from sibling tools like opentweet_publish_tweet or opentweet_schedule_tweet, which could overlap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus siblings such as opentweet_publish_tweet or opentweet_schedule_tweet. The description omits explicit when-to-use and when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_delete_tweetADestructiveIdempotent
Permanently delete a tweet. This cannot be undone. If the tweet was published to X, it will also be deleted from X by default.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The tweet/post ID to delete | |
| delete_from_x | No | Whether to also delete the tweet from X/Twitter if it was published. Defaults to true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint, idempotentHint), the description adds that the deletion is permanent, cannot be undone, and automatically syncs with X (Twitter). This provides useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no unnecessary words. Key information is front-loaded: action, then irreversibility, then cross-platform effect.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, annotations, and full schema coverage, the description is sufficient. It covers permanence and cross-platform deletion. No output schema, but not needed for this operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by stating that delete_from_x defaults to true, which is not in the parameter description, guiding agent behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Permanently delete a tweet.' It uses a specific verb and resource, and is easily distinguishable from sibling tools like create_tweet or update_tweet.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose is clear, but the description does not provide explicit when-to-use or when-not-to-use guidance, nor does it mention alternatives. Usage is implied by the verb 'delete'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_generate_imageA
Generate an AI image from a text prompt using Grok Imagine (xAI). Returns a permanent URL ready to use in tweets via media_urls. Requires XAI_API_KEY to be configured on the server.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | Description of the image to generate | |
| resolution | No | Image resolution. Default: 1k | |
| aspect_ratio | No | Image aspect ratio. Default: 1:1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (openWorldHint, idempotentHint, destructiveHint) are present but vague. The description adds that generation uses Grok Imagine and returns a permanent URL, but doesn't disclose potential side effects like cost, rate limits, or failure modes. Consistent with annotations, but could provide more detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences clearly convey the action, output, and prerequisite. No wasted words, every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter tool with no output schema, the description covers input, output, and prerequisite. Missing minor details like default values for optional parameters or rate limits, but is adequate for an agent to use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three parameters. The description adds no extra meaning beyond what the schema provides, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates an AI image from a text prompt using Grok Imagine and returns a permanent URL for tweets. This distinguishes it from sibling tools like opentweet_upload_media (uploads existing media) and opentweet_generate_video (generates video).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the prerequisite (XAI_API_KEY) and that the URL is ready for tweets via media_urls, providing clear context. However, it does not explicitly state when to use this tool over alternatives, though the differentiation is implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_generate_videoA
Generate an AI video from a text prompt using Grok Imagine (xAI). Video generation is async — this tool starts the job AND polls until complete (up to 5 minutes). Returns the final video URL ready to use in tweets. Requires XAI_API_KEY to be configured on the server.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | Description of the video to generate | |
| duration | No | Duration in seconds (5-10). Default: 5 | |
| resolution | No | Video resolution. Default: 480p | |
| aspect_ratio | No | Video aspect ratio. Default: 16:9 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include openWorldHint=true, idempotentHint=false, destructiveHint=false. The description adds transparency by detailing the async polling process, maximum wait time, and the requirement for an API key, which go beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences. The first sentence states the purpose; the second covers behavior, output, and prerequisites. No wasted words, and critical information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, and annotations, the description covers purpose, async behavior, return value, and key requirement. It is fairly complete but could mention failure scenarios or timeout handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all parameters. The description mostly restates schema information (e.g., duration range, resolution defaults) without adding significant new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: generating an AI video from a text prompt using Grok Imagine. It specifies the verb 'generate' and the resource 'video', distinguishing it from sibling tools like opentweet_generate_image.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the async behavior, polling mechanism, and required API key. It tells when to use (for video generation) but does not explicitly mention when not to use or provide alternative tools, though the async note guides appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_get_accountARead-only
Get your OpenTweet account status including subscription plan, daily posting limits, post counts, and connected X accounts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description doesn't need to restate read-only nature. It adds value by specifying the exact data returned (subscription plan, limits, counts, connected accounts), which goes beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that is front-loaded with the action ('Get') and specific details. Every word adds value, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no output schema, and minimal annotations, the description fully covers what the tool does and what it returns. No missing critical information for an agent to decide to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so schema description coverage is 100%. Per guidelines, baseline is 4 for 0 parameters. The description does not need to explain parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves account status including subscription plan, daily posting limits, post counts, and connected X accounts. It uses a specific verb ('Get') and distinct resource (account status), differentiating it from sibling tools like opentweet_get_tweet or opentweet_get_best_times.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives or when not to use it. The description does not mention context, prerequisites, or exclusions, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_get_analyticsBRead-only
Get your posting analytics including stats, streaks, trends, category breakdown, and recent activity. Use type parameter to get specific analytics.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Type of analytics: "overview" (default, posting stats + streaks + trends), "tweets" (per-tweet engagement), "best_times" (optimal posting hours/days) | |
| period | No | Time period for tweet analytics (e.g. "7d", "30d", "90d"). Only for type="tweets". | |
| sort_by | No | Sort tweet analytics by metric (e.g. "impressions", "engagement_rate"). Only for type="tweets". | |
| x_account_id | No | Filter analytics by X account ID (for multi-account users) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with the readOnlyHint annotation, stating it retrieves analytics. No contradictions. However, it adds minimal behavioral context beyond what annotations already provide, such as no disclosure of rate limits or account requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at two sentences, front-loading the main purpose and a usage hint. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description provides a useful but not exhaustive list of included analytics. It could better explain what each type returns, especially 'overview' and 'best_times' details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are well-documented in the schema. The description adds slight value by emphasizing the 'type' parameter, but overall does not significantly improve parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves posting analytics including specific categories like stats, streaks, trends. However, it does not explicitly differentiate from sibling tools like opentweet_get_best_times, which may overlap significantly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for obtaining overview, tweets, or best_times analytics via the type parameter, but it does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_get_best_timesARead-only
Get the best times to post on X based on the user's actual published tweets weighted by engagement (likes, retweets, replies, bookmarks, impressions). Returns a 7×24 day-of-week × hour heatmap, the top 5 windows, and AI-generated insights. If no analysis exists yet, falls back to a frequency-only summary and prompts the user to run analyze.
| Name | Required | Description | Default |
|---|---|---|---|
| x_account_id | No | Filter to a specific connected X account (for multi-account users) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and description details the return data (heatmap, top windows, insights) and the fallback behavior, providing complete behavioral transparency without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the main purpose, and no unnecessary words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only one optional parameter and strong annotations, the description covers all needed context: what it returns, fallback behavior, and the prerequisite relationship with opentweet_analyze_best_times.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with a clear description for the only optional parameter. Description does not add value beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'Get' and resource 'best times to post', and clearly distinguishes from sibling opentweet_analyze_best_times by focusing on retrieval rather than analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use (to get best times) and what happens if no analysis exists (falls back to frequency summary and prompts to run analyze). This guides the agent to first use the analyze tool when needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_get_content_gapsARead-only
Returns the user's content gaps: topics they engage with as a reader on X (likes) but rarely post about themselves, plus AI-generated post hook suggestions for those gaps.
| Name | Required | Description | Default |
|---|---|---|---|
| x_account_id | No | Filter by X account ID (multi-account users) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is known. The description adds behavioral context by specifying that the output includes AI-generated suggestions, which is not in the annotations. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently conveys the tool's purpose and output. No filler words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 optional parameter, no output schema, read-only annotations), the description fully explains what the tool returns (content gaps with suggestions). No missing information for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (single parameter x_account_id described in schema). The description does not add extra meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'content gaps' defined as topics a user engages with (likes) but rarely posts about, plus AI-generated suggestions. It uses a specific verb ('Returns') and resource, and the concept is distinct from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for finding posting ideas based on reading habits, but it does not explicitly state when to use it versus alternatives (e.g., opentweet_search_inspiration) or when not to use it. No exclusions or context for selection are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_get_evergreen_historyARead-only
View the publishing history of evergreen posts. Shows clones that were automatically created and posted from the evergreen pool.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| limit | No | Results per page (default 20, max 100) | |
| source_id | No | Filter by source evergreen post ID to see history for a specific post | |
| x_account_id | No | Filter by X account ID (for multi-account users) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint: true already ensures safe read-only operation. The description adds value by explaining that the history consists of 'clones that were automatically created and posted', providing behavioral context beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences, front-loading the core purpose. No unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the main purpose but omits details about the output format or what specific fields are returned. Given the simple tool with no output schema, some additional context on the returned data would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The tool description does not add any additional meaning to the parameters, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'View' and the resource 'publishing history of evergreen posts', specifying that it shows 'clones that were automatically created and posted'. This distinguishes it from sibling tools like opentweet_list_evergreen_posts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for viewing history of evergreen posts but does not explicitly state when to use this tool versus alternatives like list_evergreen_posts. No exclusions or when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_get_evergreen_postARead-only
Get full details of a specific evergreen post including its recent publishing history.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The evergreen post ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation already declares the tool as read-only. The description adds value by specifying that it returns 'full details' and 'recent publishing history', which is not covered by the annotation. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single 12-word sentence that is front-loaded and contains no extraneous information. Every word is necessary and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with one parameter and no output schema, the description adequately states what is returned (full details + publishing history). Combined with the annotation, the tool is fully understandable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the single parameter 'id' with a description ('The evergreen post ID'), achieving 100% coverage. The description does not add further semantics, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get full details'), the resource ('specific evergreen post'), and adds a distinguishing feature ('including its recent publishing history'). This differentiates it from siblings like list or history-only tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving full details of a specific post but does not explicitly mention when not to use it or compare to similar sibling tools. The context from sibling names helps, but the description itself lacks direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_get_evergreen_settingsARead-only
Get your evergreen queue settings and pool statistics. Shows whether the queue is enabled, posting frequency, cooldown, and pool size limits.
| Name | Required | Description | Default |
|---|---|---|---|
| x_account_id | No | Filter by X account ID (for multi-account users) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only behavior is clear. The description adds valuable context by listing the specific data returned (queue enabled, frequency, cooldown, pool size limits), enhancing transparency beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of just two sentences. The first states the tool's overall purpose, and the second lists the specific outputs. Every sentence serves a clear function with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple input (one optional parameter) and lack of output schema, the description adequately explains what the tool does and what it returns. It covers the key points, though it might benefit from mentioning the response format or that there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter (x_account_id) has a description in the schema (100% coverage), and the tool description does not add any additional semantic information. According to guidelines, baseline is 3 when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'evergreen queue settings and pool statistics'. It specifies the exact information returned (enabled, frequency, cooldown, pool size limits), distinguishing it from sibling tools like opentweet_list_evergreen_posts and opentweet_update_evergreen_settings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for viewing settings and statistics, but it does not explicitly state when to use it versus alternatives, nor does it mention prerequisites or context. It provides minimal guidance on usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_get_profile_growthARead-only
Get the user's X profile growth: follower deltas (7/30/90 days), 7d engagement totals, and avg engagement rate. Replaces X Premium+ analytics for OpenTweet users.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Days of history (default 90) | |
| x_account_id | No | Filter by X account ID (multi-account users) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context about the metrics returned, which complements the readOnlyHint annotation. However, it does not disclose other behaviors like rate limits, data freshness, or required permissions. Annotations already cover read safety, so the description provides moderate added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that front-load the core purpose and output details. Every word is informative with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides a good summary of the return data (follower deltas, engagement totals, engagement rate) but does not specify engagement metric types (e.g., likes, retweets). Given no output schema, a slightly more detailed breakdown would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter description coverage (days and x_account_id are described). The description itself adds no additional semantic meaning for the parameters, so it meets the baseline for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves user profile growth data including specific metrics (follower deltas, engagement totals, engagement rate). It distinguishes from siblings by claiming it replaces X Premium+ analytics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly compare with sibling tools like opentweet_get_analytics or opentweet_get_account. It only mentions replacing X Premium+ analytics, which implies a use case but lacks when-to-use vs when-not-to guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_get_top_postsARead-only
Get your top-performing tweets ranked by engagement (or other metric). Returns the user's actual best-performing posts with metrics, useful for repurposing or studying what works.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Restrict to last N days (0 or omit = all time) | |
| sort | No | Sort field (default: engagement) | |
| limit | No | Number of posts to return (default 10, max 50) | |
| x_account_id | No | Filter by X account ID (multi-account users) | |
| min_impressions | No | Filter out posts below this impression count |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds value by explaining the return includes 'actual best-performing posts with metrics' and the purpose ('studying what works'). However, it does not detail authentication or rate limits, which are standard assumptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the core function and ranking, followed by a useful purpose statement. No redundant or extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple filtered read operation with 5 well-described parameters and a readOnlyHint annotation, the description conveys purpose, return type (best posts with metrics), and use case. However, it could specify the exact metrics returned (e.g., likes, retweets) since there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already documented. The description adds no additional meaning beyond what the schema provides, such as that the 'sort' parameter aligns with 'ranked by engagement (or other metric)'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves 'top-performing tweets ranked by engagement (or other metric)', using specific verb 'Get' and resource 'top posts'. It differentiates from siblings like 'list_tweets' by emphasizing ranking and performance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the tool is 'useful for repurposing or studying what works', implying when to use it, but does not explicitly state when not to use it or list alternatives. No exclusions or comparisons to sibling tools like 'opentweet_list_tweets'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_get_tweetARead-only
Get full details of a specific tweet by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The tweet/post ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's consistency with that is fine. However, it does not disclose any additional behavioral traits such as rate limits, authentication requirements, or what constitutes 'full details' beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no unnecessary words. Every part is informative and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of a retrieval tool with one parameter and no output schema, the description is adequate but vague. 'Full details' is not elaborated, and there is no mention of return values or error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for the single required parameter 'id' with a description. The tool description does not add any extra meaning beyond what the schema already states, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (get), the resource (full details of a specific tweet), and the means (by ID). It effectively distinguishes from siblings like opentweet_list_tweets (listing) and opentweet_create_tweet (creation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. For instance, it does not explain when to prefer this over opentweet_list_tweets for retrieving a single tweet, nor does it mention any prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_list_accountsARead-only
List your connected X/Twitter accounts. Use the returned account IDs with x_account_id parameter in other tools to target a specific account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true. Description adds that it returns account IDs but no additional behavioral traits beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool, no input schema. Description hints at output (account IDs) but could explicitly mention other returned fields. Adequate for low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so schema coverage is 100%. Description adds no parameter info but mentions output usage, which is fine.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it lists connected X/Twitter accounts, distinguishing from sibling opentweet_get_account which likely gets a single account.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use: to obtain account IDs for other tools. Lacks explicit when-not-to-use or alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_list_evergreen_postsARead-only
List posts in your evergreen pool. Shows all source posts that will be automatically reposted on rotation.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| limit | No | Results per page (default 20, max 100) | |
| paused | No | Filter by paused status | |
| x_account_id | No | Filter by X account ID (for multi-account users) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, confirming a safe read operation. The description adds behavioral context by clarifying that the list contains 'source posts that will be automatically reposted on rotation', which goes beyond the annotation. No disclosure of pagination or rate limits, but the core behavioral trait is well-covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main action, zero wasted words. Every sentence earns its place, providing purpose and behavioral detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description should compensate by explaining return value structure. It only states 'Shows all source posts' without detailing fields or pagination. Given parameter complexity (4 params) and no output schema, this is insufficient for complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for all 4 parameters (page, limit, paused, x_account_id), each with adequate descriptions. The tool description adds no additional parameter meaning, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List posts in your evergreen pool' with an explanatory follow-up ('Shows all source posts that will be automatically reposted on rotation'). It uses a specific verb ('List') and resource ('evergreen pool'), distinguishing it from siblings like opentweet_list_tweets (general listing) and opentweet_get_evergreen_post (single post).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs. alternatives like opentweet_list_tweets or opentweet_get_evergreen_post. While the purpose implies usage for viewing the evergreen pool, it does not provide exclusions or context for when the sibling tools might be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_list_tweetsARead-only
List your tweets with optional filtering by status. Returns paginated results.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| limit | No | Results per page (default 20, max 100) | |
| status | No | Filter by status: "scheduled" (upcoming), "posted" (published), "draft" (unscheduled), "failed" (errors) | |
| x_account_id | No | Filter by X account ID (for multi-account users) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description does not need to state safety. The description adds 'Returns paginated results', which is a behavioral trait beyond the schema. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no fluff, information is front-loaded. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose and pagination but does not mention response structure, ordering, or how pagination works (e.g., page/limit parameters). For a list tool with no output schema, this is a moderate gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter has its own description. The tool description only adds 'optional filtering by status', which echoes the status parameter. Baseline 3 is appropriate as no additional parameter context is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List your tweets' with optional filtering, specifying the verb and resource. It shows the tool's purpose for retrieving a list of tweets, which is distinct from sibling tools like opentweet_get_tweet or opentweet_list_evergreen_posts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidelines are provided. The description does not indicate when to use this tool versus alternatives (e.g., opentweet_get_tweet for a single tweet), nor does it mention prerequisites or context for filtering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_publish_tweetADestructive
Publish an existing draft or scheduled tweet immediately to X/Twitter. Requires an active subscription and X account connection.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The tweet/post ID to publish now |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description adds prerequisite context (subscription, account connection) but does not elaborate on side effects beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, front-loaded with action and constraints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 destructive annotation, the description sufficiently covers the core action and prerequisites. Minor lack of detail on post-publish state, but overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter 'id'. The description repeats the schema's description ('The tweet/post ID to publish now') without adding new semantics beyond confirming immediate action.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Publish an existing draft or scheduled tweet immediately to X/Twitter', using a specific verb and resource. It distinguishes the tool from siblings like opentweet_create_tweet and opentweet_schedule_tweet.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It lists prerequisites ('Requires an active subscription and X account connection') and implies use for existing drafts/scheduled tweets. However, it does not explicitly state when not to use or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_remove_from_evergreenADestructiveIdempotent
Remove a post from the evergreen pool. The post is converted back to a regular draft, not deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The evergreen post ID to remove from pool |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide idempotent and destructive hints. The description adds behavioral context by stating the post is 'converted back to a regular draft, not deleted,' which clarifies the exact state change and avoids misunderstanding. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no unnecessary words. It front-loads the action and explains the crucial nuance about not deleting, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (one parameter, no output schema), the description is sufficient. It explains the input and the effect, leaving no ambiguity. A slightly higher score might be warranted but is limited by the lack of any return value information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'id' is already described in the input schema as 'The evergreen post ID to remove from pool.' The tool description does not add further semantics, but schema coverage is 100%, meeting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Remove a post from the evergreen pool.' It uses a specific verb and resource, and distinguishes from deletion by noting the post is converted back to a regular draft. This differentiates it from sibling tools like opentweet_delete_tweet.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the effect but does not explicitly state when to use this tool versus alternatives. It implies the use case (removing from evergreen) but lacks guidance on when not to use it or a comparison with similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_repurpose_tweetADestructive
Repurpose an existing tweet with AI, transforming it into your own voice. Saves the result as a draft by default.
| Name | Required | Description | Default |
|---|---|---|---|
| tone | No | Desired tone (e.g. "professional", "casual", "witty", "bold") | |
| tweet_text | Yes | The original tweet text to repurpose | |
| instructions | No | Additional instructions for the AI (e.g. "make it more technical") | |
| tweet_author | No | Original tweet author (e.g. "@naval") | |
| x_account_id | No | X account ID for multi-account users | |
| save_as_draft | No | Save repurposed tweet as a draft (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint: true (state change) and idempotentHint: false. The description adds context by stating it saves as a draft by default, which is a key behavioral trait. However, it does not disclose that output may vary due to AI or that the original tweet remains unchanged.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences that cover the core action, transformation, and default behavior. Every sentence adds value without any wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and high parameter coverage, the description covers the main functionality and default behavior. However, it does not mention what the return value or confirmation looks like after saving as draft, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are well-documented. The description adds the default draft behavior related to 'save_as_draft', but beyond that it does not provide additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The tool name and description clearly state the verb 'repurpose' and the resource 'tweet', with AI transformation and default draft-saving. It distinguishes itself from siblings like 'create_tweet' or 'update_tweet' by focusing on repurposing an existing tweet.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lacks explicit guidance on when to use this tool versus alternatives. It does not specify that this is for transforming existing content rather than creating from scratch, nor does it mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_schedule_tweetADestructiveIdempotent
Schedule an existing draft tweet for a specific date and time. The post must be a draft (not already posted or an evergreen source).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The tweet/post ID to schedule | |
| scheduled_date | Yes | ISO 8601 date-time to schedule (e.g. "2026-03-15T09:00:00Z"). Must be in the future. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include destructiveHint=true, implying state changes, but the description does not clarify that scheduling removes the draft from drafts or whether the action is reversible. It adds no detail beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences cover the essential purpose and constraints with zero redundancy. Information is front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple scheduling tool, the description covers core behavior (schedule draft) and constraints (must be draft, future date). It does not explain post-scheduling behavior (e.g., automatic posting) or return value, but given no output schema and common expectations, it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are fully documented. The description restates the draft constraint (related to 'id') and echoes the future-time requirement for 'scheduled_date', providing no additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Schedule') and resource ('existing draft tweet') and clearly states constraints ('must be a draft, not already posted or an evergreen source'). It effectively distinguishes from siblings like opentweet_publish_tweet and opentweet_batch_schedule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies when the tool is appropriate (draft tweets only) and excludes evergreen sources and already posted content. It implies usage context but does not explicitly name alternative tools for non-draft posts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_search_inspirationARead-only
Search X/Twitter for high-performing tweets to find content inspiration. Returns tweets with engagement metrics. Use filters to narrow results.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language filter (e.g. "en", "es", "fr") | |
| query | Yes | Search query (e.g. "SaaS marketing", "from:naval", "#startup") | |
| has_media | No | Only return tweets with media attachments | |
| min_likes | No | Minimum number of likes (client-side filter) | |
| sort_order | No | Sort by relevancy (default) or recency | |
| max_results | No | Number of results (10-100, default 20) | |
| min_retweets | No | Minimum number of retweets (client-side filter) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds minimal behavioral context. It mentions engagement metrics but not how 'high-performing' is determined.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that are front-loaded with the main action and purpose. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 7 parameters, the description is adequate but could specify what engagement metrics are returned or clarify the 'high-performing' criterion.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description does not need to explain parameters in detail. It adds no extra parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it searches for high-performing tweets to find content inspiration, distinguishing it from other list/search tools by focusing on inspiration and high performance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions using filters but does not explicitly differentiate from sibling tools like opentweet_list_tweets or opentweet_get_top_posts. Still gives clear context for its use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_update_evergreen_postBDestructiveIdempotent
Update an evergreen post's cooldown period or pause/unpause it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The evergreen post ID | |
| paused | No | Pause (true) or unpause (false) this post | |
| cooldown_days | No | Custom cooldown days (1-90), or null to use the global default |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description claims non-destructive updates (cooldown, pause/unpause) but annotations set destructiveHint=true, creating a contradiction. No mention of side effects, authorization, or reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no wasted words. Clearly front-loads the purpose before listing actions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple update tool with 3 parameters and no output schema, description is adequate but lacks context on what pause/cooldown changes mean operationally.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. Description echoes schema parameters but adds no new meaning; e.g., does not explain that cooldown_days=null uses global default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb (update), resource (evergreen post), and specific actions (cooldown period, pause/unpause). Distinguishes from siblings like opentweet_remove_from_evergreen.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies use for updating settings of an existing evergreen post but lacks explicit guidance on when to use vs alternatives, e.g., no mention of when to use opentweet_add_to_evergreen instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_update_evergreen_settingsADestructiveIdempotent
Update evergreen queue settings. Control whether the queue is active, how many posts per day, posting times, and default cooldown period.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | No | Enable or disable the evergreen queue | |
| posting_times | No | Array of posting times in "HH:mm" format (e.g. ["09:00", "17:00"]) | |
| posts_per_day | No | Number of evergreen posts to publish per day (1-10, limited by plan) | |
| default_cooldown_days | No | Default days to wait before reposting (1-90) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include idempotentHint=true and destructiveHint=true, already signaling that updates are idempotent and may modify existing state. The description adds basic behavioral context (what settings are controlled) but does not elaborate on side effects, permissions required, or implications of changes (e.g., disabling queue). Bar lowered by annotations leads to a score of 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence listing the controllable aspects. It is front-loaded and avoids extraneous words. While concise, it could be slightly more structured with bullet points, but the current form is acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of required parameters and output schema, the description provides adequate context on what the tool modifies. However, it omits details about return values (e.g., success status or updated configuration), prerequisites, and effect timing (immediate vs. queued). This leaves some gaps for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter (enabled, posting_times, posts_per_day, default_cooldown_days) having clear descriptions in the input schema. The description reiterates these concepts but adds no new semantic meaning beyond summarizing them. Baseline 3 applies as schema already does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The tool name 'opentweet_update_evergreen_settings' and description clearly state it updates evergreen queue settings. Specific verb 'Update' and resource 'evergreen queue settings' with explicit fields (active, posts per day, posting times, cooldown). Distinguishes from sibling tools like 'get_evergreen_settings' and 'add_to_evergreen' by focusing on settings modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives. It implies usage via 'Control whether the queue is active' but lacks directives like 'for reading settings use get_evergreen_settings'. Sibling tools exist for related actions but no comparative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_update_tweetADestructiveIdempotent
Update an existing tweet. Can change text, category, schedule, or media. Cannot edit already-posted tweets.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The tweet/post ID to update | |
| text | No | New tweet text (max 280 chars for free X accounts, up to 25,000 for Premium+) | |
| category | No | New category | |
| is_thread | No | Convert to/from thread | |
| media_urls | No | New media URLs (replaces existing) | |
| community_id | No | X Community ID to post to, or null to remove | |
| thread_media | No | Media URLs per thread tweet (array of arrays) | |
| thread_tweets | No | Updated thread tweets (excluding the first tweet which is the main text) | |
| scheduled_date | No | New schedule date (ISO 8601), or null to unschedule | |
| share_with_followers | No | Share community post with followers too |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint and idempotentHint. Description adds value by stating the 'cannot edit already-posted tweets' restriction, which is not in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, no wasted words. Efficiently conveys core function and key limitation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 10 parameters with full schema coverage, description adequately summarizes editable fields. Lacks details on thread or community parameters but schema covers them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description only enumerates fields (text, category, schedule, media) without adding new meaning beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Update an existing tweet' with specific verbs and resources, and explicitly says 'Cannot edit already-posted tweets', distinguishing it from siblings like create, delete, publish.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear constraint 'Cannot edit already-posted tweets', guiding when not to use. Lacks explicit alternatives but contextually clear given sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opentweet_upload_mediaADestructive
Upload an image or video file to use in tweets. Returns a URL that can be passed to create_tweet or update_tweet in the media_urls field. Supported formats: JPG, PNG, GIF, WebP (max 5MB), MP4, MOV (max 20MB).
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Absolute path to the image or video file on disk |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: it discloses supported formats, size limits, and that the tool returns a URL for later use. Annotations indicate destructiveHint=true, but the description does not contradict this; it simply doesn't elaborate on potential side effects, which is acceptable for an upload tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The first sentence introduces the tool's purpose and return value; the second lists constraints. Information is front-loaded and easy to parse, making it efficient for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple upload tool with one parameter, no output schema, and adequate annotations, the description covers all essential aspects: what it does, what it returns, and usage constraints. No gaps remain for the agent to make correct choices.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters, so baseline is 3. The description repeats the schema description for file_path ('Absolute path to the image or video file on disk') without adding new meaning. It confirms the parameter type but does not exceed the schema's own description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool uploads an image or video file for use in tweets, returns a URL for media_urls field, and specifies supported formats and size limits. This distinguishes it from sibling tools like generate_image or generate_video, which create media rather than upload existing files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool: before calling create_tweet or update_tweet to include media. It provides clear context but does not explicitly state when not to use it or mention alternatives. However, the instruction is sufficient for an AI agent to understand the prerequisite role.
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.
30 tool updates
v1.2.0- First observed
opentweet_add_to_evergreen - First observed
opentweet_analyze_best_times - First observed
opentweet_batch_schedule - First observed
opentweet_create_thread - First observed
opentweet_create_tweet - First observed
opentweet_delete_tweet - First observed
opentweet_generate_image - First observed
opentweet_generate_video - First observed
opentweet_get_account - First observed
opentweet_get_analytics - First observed
opentweet_get_best_times - First observed
opentweet_get_content_gaps - First observed
opentweet_get_evergreen_history - First observed
opentweet_get_evergreen_post - First observed
opentweet_get_evergreen_settings - First observed
opentweet_get_profile_growth - First observed
opentweet_get_top_posts - First observed
opentweet_get_tweet - First observed
opentweet_list_accounts - First observed
opentweet_list_evergreen_posts - First observed
opentweet_list_tweets - First observed
opentweet_publish_tweet - First observed
opentweet_remove_from_evergreen - First observed
opentweet_repurpose_tweet - First observed
opentweet_schedule_tweet - First observed
opentweet_search_inspiration - First observed
opentweet_update_evergreen_post - First observed
opentweet_update_evergreen_settings - First observed
opentweet_update_tweet - First observed
opentweet_upload_media
TDQS
Each tool targets a distinct function with clear descriptions; potential overlap between get_best_times and analyze_best_times is resolved by descriptions (one fetches existing, the other triggers analysis).
All tools follow a consistent 'opentweet_verb_noun' snake_case pattern, making it predictable for an agent to infer purpose from names.
30 tools is above the typical well-scoped range, but each serves a unique purpose in tweet management, scheduling, evergreen content, analytics, media, and AI features. Slightly heavy but still reasonable.
The tool set covers full tweet lifecycle (CRUD, scheduling, publishing), evergreen replay, analytics, media upload, AI generation, inspiration search, and profile growth—no obvious gaps for the domain.
Maintenance
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
X / Twitter public post, comment, reply, user, and search tools.
- Groniz MCPOAuthcom.groniz
Post & schedule to 32+ networks: X, Facebook, Instagram, Threads, LinkedIn, TikTok, YouTube, Reddit.
Schedule, generate and publish social posts to X, LinkedIn, Instagram, Threads and YouTube
Stop guessing what works on X/Twitter. Analyze your history, draft in your voice, schedule posts.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables you to write, refine, and publish tweets to X (Twitter) using AI assistance.1Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to fully automate X/Twitter interactions including searching, posting, engaging, and managing multiple accounts without paid API keys.MIT
- FlicenseAqualityCmaintenanceEnables Twitter/X marketing automation, including tweet search, account analysis, trending topics, and optional AI-generated tweets and scheduling.6-
- AlicenseNot gradedqualityAmaintenanceProvides 19+ tools for AI agents to interact with X/Twitter, including search, posting, analysis, and monitoring capabilities.151MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/opentweetio/mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server