@twitterapis/mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@twitterapis/mcpsearch tweets about AI from the last 24 hours"
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.
@twitterapis/mcp
Official Model Context Protocol server for twitterapis.com, the Twitter / X API as native tools for Claude, Cursor, Windsurf, and any MCP client. Reads (search, profiles, timelines, followers, DMs) plus write actions (post, like, retweet, follow).
Ask your agent to search tweets, pull a user's profile or timeline, list followers/following, fetch thread context, or enumerate list members and it calls the API directly. Every tool maps to a REST endpoint at https://api.twitterapis.com; the server holds no state and forwards your API key on each call.
Quick start
No install needed. Run with npx. You need one thing: an API key (free $0.50 in credits, no card required): twitterapis.com/signup.
Related MCP server: xengager-mcp
Setup
Claude Desktop
Edit claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"twitterapis": {
"command": "npx",
"args": ["-y", "@twitterapis/mcp@latest"],
"env": { "TWITTERAPIS_KEY": "YOUR_API_KEY" }
}
}
}Restart Claude Desktop. The twitter_* tools appear in the tool picker.
Cursor
~/.cursor/mcp.json (or Settings → MCP → Add New Server):
{
"mcpServers": {
"twitterapis": {
"command": "npx",
"args": ["-y", "@twitterapis/mcp@latest"],
"env": { "TWITTERAPIS_KEY": "YOUR_API_KEY" }
}
}
}Windsurf
~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"twitterapis": {
"command": "npx",
"args": ["-y", "@twitterapis/mcp@latest"],
"env": { "TWITTERAPIS_KEY": "YOUR_API_KEY" }
}
}
}VS Code (Copilot / agent mode)
.vscode/mcp.json in your workspace, or the user-level MCP settings:
{
"servers": {
"twitterapis": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@twitterapis/mcp@latest"],
"env": { "TWITTERAPIS_KEY": "YOUR_API_KEY" }
}
}
}Configuration
Env var | Required | Default | Purpose |
| Yes | (none) | API key from dashboard |
| No |
| Override the API host |
| No |
| Per-request timeout in milliseconds |
Tools
99 tools: 63 reads and 36 write actions. Most user endpoints accept username (handle without @) or user_id (twitter_user_likes and twitter_user_tweets_complete require user_id); tweet endpoints accept id or url; paginated endpoints return a cursor you pass back to get the next page. Four of the reads are free account lookups (twitter_account_me, twitter_account_payments, twitter_feedback_get, twitter_feedback_list); the 14 monitoring tools and twitter_feedback_send are also free (account administration, not metered reads).
Public reads (search, profiles, tweets, followers, likes) work with just your API key. The account-only reads (bookmarks, DMs, home timeline, followers-you-know) and most write actions act AS an authenticated X account, so they need a session linked to your key first (returns HTTP 409 until then). Link a session either by registering your x.com cookies (twitter_customer_session) or by logging in with a username/password (twitter_user_login). Alternatively, pass per-call inline credentials on any of those tools (auth_token + ct0, with optional proxy_url / user_agent) to act AS that account for a single call without pre-registering a session, so one API key can act as many accounts. For write actions, set proxy_url to a residential proxy, since X soft-blocks writes that egress from datacenter IPs. Each write tool is annotated readOnlyHint: false; reversing actions (delete, unfollow, unlike, unretweet, unbookmark, monitor/webhook delete) are annotated destructiveHint: true so MCP clients can prompt before running them. The monitoring and feedback tools (see below) are the exception: they administer your twitterapis.com account, not an X session, so they need only your API key, no linked session and no inline credentials.
Reads
Tool | What it does |
| Search tweets with X operators ( |
| Find user accounts by name or keyword |
| Full profile by handle (bio, counts, verification, location) |
| Full profile by numeric user id |
| Is an account alive, suspended, or deleted |
| A user's structured About object (category, professional/business labels, verification + identity-verification flags, joined date, and X's 'About this account' transparency panel) |
| Accounts affiliated with an organization profile |
| Follow relationship between two user ids (who follows whom) |
| A user's recent original tweets (replies excluded) |
| A user's full timeline (tweets + replies) |
| A large batch of a user's tweet history per call (see paging note) |
| Images and videos a user has posted |
| Recent public tweets mentioning a user |
| Tweets a user has liked (public Likes tab) |
| Accounts that follow a user |
| Accounts a user follows |
| Followers with the v2 response shape (richer fields, deeper cursoring) |
| Following with the v2 response shape (richer fields, deeper cursoring) |
| A user's verified followers only |
| Followers of a target that your authenticated account also follows |
| Single tweet: text, author, metrics, media, quoted/reply context |
| Replies to a tweet |
| Full author thread (connected tweet chain by same author) |
| Accounts that retweeted a tweet |
| Tweets that quote a tweet, with their text. Search-backed, so |
| Members of a Twitter/X List |
| Accounts that follow a public List (a different set from its members) |
| Posts by a List's members, search-backed: filterable by |
| A List's native X feed: retweets and X's own ordering included, no filters, paging only |
| Your authenticated account's Home timeline (session) |
| Your authenticated account's bookmarks (session) |
| Accounts your authenticated account has blocked (your own list only) (session) |
| Accounts your authenticated account has muted (your own list only) (session) |
| Full-text search within your bookmarks (session) |
| Your authenticated account's bookmark folders (session) |
| Tweets inside one of your bookmark folders, by |
| Your DM conversations (inbox), read-only (session) |
| Messages in one DM conversation, read-only (session) |
| Metadata and participant roster for one X Space, live or ended (by Space |
| Find X Communities by keyword; the discovery step that produces the numeric id the rest of the community family needs |
| One X Community by numeric id: name, counts, join policy, rules, topic, banners, admin |
| A community's moderators and a member preview, each returned as a full user profile, not the reduced row |
| A community's member roster, each row carrying that member's |
| A community's moderators and admins, from its own upstream operation (not a filter over the roster) |
| A community's post timeline, with the pinned post returned as its own |
| The inverse lookup: every community a given numeric |
| Ask X's own Grok, grounded in live X data, and get the answer plus the sources it cited |
| Whether the authenticated account can use Grok, and which models it may pick |
| Current top trends for a location (by |
| Every location X has trends for, each with its WOEID |
| Your twitterapis.com account: credits, usage, email (free) |
| Your twitterapis.com payment history (free) |
| Processing state of an uploaded |
| Read a published article's full content via its announcement tweet id/url (public, no session) |
| List your own articles, filtered by |
Write actions (require a linked X session)
Tool | What it does |
| Post a tweet; set |
| Delete one of your tweets (irreversible) |
| Like / unlike a tweet |
| Retweet / undo retweet |
| Bookmark / remove bookmark |
| Follow / unfollow a user by id |
| Send a Direct Message to a user by their numeric |
| Create a Twitter/X List owned by your session ( |
| Add / remove one account on a List you own; |
| Upload a base64 image, returns a |
Articles (X's long-form "Notes" feature; writes require a linked X session)
Tool | What it does |
| Start a new draft article, returns its |
| Set a draft or published article's title |
| Attach an already-uploaded image as an article's cover ( |
| Replace a draft or published article's body (Draft.js |
| Publish a draft, posting a real public announcement tweet (not fully reversible) |
| Revert a published article to draft (leaves the announcement tweet up) |
| Delete an article (draft: hard delete; published: unpublish + delete the announcement tweet), irreversible |
See also twitter_article_get and twitter_article_list above.
Monitoring (webhook delivery of new posts; free, not metered)
Watch an X account for new posts and get them pushed to your own HTTPS endpoint, HMAC-signed, instead of polling. Register a webhook first, then create a monitor; every new post from a watched handle is delivered to every active webhook on your account (or a restricted subset via webhook_ids). Monitor/webhook CRUD is account administration, not a metered Twitter read, so every tool below is free.
Tool | What it does |
| Start watching an X account ( |
| List every monitor on your account |
| Pause/resume a monitor or change its |
| Stop and remove a monitor (irreversible) |
| One monitor's status, degradation flag, poll interval, cursor position |
| Account-wide rollup: service status, active/paused monitor counts, 24h delivery outcome counts, one call |
| Recent delivery events across every monitor, with detection + delivery latency |
| Compat drop-in for |
| Compat drop-in for |
| Compat drop-in for |
| Register an HTTPS delivery URL; returns the HMAC signing secret once |
| List every webhook registered on your account |
| Soft-delete a webhook by id (irreversible from the caller's side) |
| Send one signed test event to a webhook right now, synchronously |
| Replay deliveries that dead-lettered while your endpoint was down, oldest first |
Feedback (report a bug or a gap to the twitterapis.com team without leaving your session; free)
Modelled on Claude Code's own feedback tool. When a call fails in a way that is not your key, credits, session or a rate limit, when you ask for something no tool covers, or when a result is plainly wrong, the model can draft a report into a local queue (~/.twitterapis/feedback-queue.json, at most 10 drafts, override the directory with TWITTERAPIS_FEEDBACK_DIR). Nothing is sent until you ask to review the queue and name the drafts to send. Each report carries the last failing call's endpoint, status and request id, your client name and this package's version, so the team can act on it without a follow-up. Use twitter_feedback_get with the returned server id to see whether it was triaged, shipped or declined.
Tool | What it does |
|
|
| Read a sent report's status ( |
| List the reports this account has already sent, newest first, with |
Session setup
Link an X account to your key once, so the account-only reads and write actions act as it (or pass per-call auth_token/ct0 instead).
Tool | What it does |
| Register your x.com session cookies ( |
| Read back the registered session without changing it: resolved account, live/dead status, timestamps, and which egress tier a write would use. Never returns the cookies. Free |
| Revoke that stored session, deleting your |
| Log in with |
Usage examples
Search for trending AI tweets
"Find the most popular tweets about AI agents posted this week"
The agent calls twitter_advanced_search with:
query: "AI agents min_faves:200 since:2024-01-01"
product: "Top"
count: 20Pull a user's recent posts
"Get the last 10 tweets from @sama"
The agent calls twitter_user_tweets with:
username: "sama"
count: 10Read a full thread
"Get the full thread for this tweet: https://x.com/karpathy/status/1849....."
The agent calls twitter_tweet_thread with:
url: "https://x.com/karpathy/status/1849....."Paginate through followers
"List the first 100 followers of @openai, then the next 100"
First call, twitter_user_followers: { username: "openai", count: 100 }
Second call, pass back the cursor from the first response: { username: "openai", count: 100, cursor: "<cursor from response>" }
Paging twitter_user_tweets_complete
"Pull @elonmusk's whole tweet history"
twitter_user_tweets_complete auto-paginates server-side and returns a large batch per call, but it does not guarantee the full history in one call. Read the result like this:
next_cursoris the completion signal, notcount. Non-null means the history is truncated and more remains. Null means it is genuinely exhausted. The response also carrieshas_more, the same signal as a boolean.maxis a minimum target, not a cap. Pages arrive in whole chunks, so a response may hold up to one page (<=100) more than requested. Live behaviour:max=10returned 20,max=50returned 60,max=150returned 161, and omittingmax(server default 200) returned 201. Never assumecount === max.Each call also has a server-side wall-clock budget, so a response can be truncated even when it returned fewer tweets than requested. That is the second reason
countcannot tell you whether you are done.Billing is a flat $0.0024 per call, regardless of how many tweets come back, so fewer large calls cost less than many small ones.
To resume, pass the next_cursor straight back in as cursor and repeat until it comes back null:
First call, twitter_user_tweets_complete: { user_id: "44196397", max: 800 }
Then, while next_cursor is non-null: { user_id: "44196397", max: 800, cursor: "<next_cursor from previous response>" }
Monitor brand mentions
"Show me recent tweets mentioning @twitterapis"
The agent calls twitter_user_mentions with:
username: "twitterapis"
count: 50Troubleshooting
HTTP 401 (invalid or missing API key) Check that TWITTERAPIS_KEY is set correctly in your MCP client config and matches the key shown in your dashboard.
HTTP 402 (insufficient credits) Top up at twitterapis.com/dashboard. Your first $0.50 is free at signup.
HTTP 403 (access forbidden) The account or tweet may be private/protected, or your plan does not include this endpoint.
HTTP 404 (not found) The user, tweet, or list may have been deleted, suspended, or the id/handle is wrong.
HTTP 429 (rate limited) Wait a few seconds and retry. If you hit this frequently, add "TWITTERAPIS_TIMEOUT_MS": "60000" to your env config and space out bulk requests.
Request failed: timed out after 30000ms The default timeout is 30 s. For large paginated fetches set TWITTERAPIS_TIMEOUT_MS to a higher value (e.g. 60000).
Tools do not appear in Claude / Cursor Ensure npx is on your PATH and Node.js 18+ is installed (node --version). Check MCP client logs for startup errors.
Pricing
Calls are billed to your twitterapis.com account. Almost every endpoint is $0.0008/call: all reads (search, profiles, tweets, followers, likes) plus the simple write actions (like, retweet, bookmark, follow and their undos, delete). At the read rate that works out to $0.04 per 1,000 tweets, since each call returns about 20 tweets. The premium endpoints cost a little more: tweet creation, sending a DM (twitter_dm_send), and DM reads (twitter_dm_list, twitter_dm_conversation) at $0.0016/call, full tweet history (twitter_user_tweets_complete) at $0.0024/call, a full tweet thread (twitter_tweet_thread) and a Grok answer (twitter_grok_chat) at $0.004/call, and the article-editing writes (twitter_article_create, twitter_article_update_title, twitter_article_update_cover_media, twitter_article_update_content, twitter_article_publish, twitter_article_unpublish) at $0.0016/call (twitter_article_get, twitter_article_list, and twitter_article_delete stay at the standard $0.0008/call). Your first $0.50 is free. See twitterapis.com/pricing.
Links
Docs: docs.twitterapis.com
Dashboard / API keys: twitterapis.com/dashboard
Pricing: twitterapis.com/pricing
REST API base URL (call it directly, without MCP):
https://api.twitterapis.com
FAQ
Do I need an X (Twitter) developer account? No. Get an API key at twitterapis.com/signup; there is no application or approval step.
Is it read-only? No. 63 read tools work with just your API key; 36 write actions (post, like, retweet, follow, DM, media upload, List create/add member/remove member, article create/edit/publish/delete, monitor/webhook create/update/delete, feedback send) act as a linked X account or per-call inline credentials, except monitor/webhook CRUD and feedback, which are account administration and need only your API key.
Which clients are supported? Claude Desktop, Cursor, Windsurf, and VS Code (Copilot agent mode), or any Model Context Protocol client.
How is it billed? Per request. New keys start with $0.50 in free credits, no card required. See pricing.
Does it store my key or data? No. The server holds no state and forwards your API key on each call.
Maintainers
src/tools.js is generated. Do not edit it. The catalog is built at build time from two committed inputs:
test/openapi.snapshot.json, a vendored copy of the published OpenAPI spec, which supplies the structure: which endpoints exist, which parameters each accepts, whether a parameter is required, and its type.scripts/tools.overrides.mjs, hand-authored, which supplies everything the spec cannot express: the tool and argument descriptions a model reads to decide how to call a tool, the cross-field rules ("provide exactly one ofusernameoruser_id"), the per-call credential arguments that travel asx-*headers, and the write / destructive / JSON-body flags.
The spec is vendored on purpose. Nothing is fetched at install time or at server boot, so the published package is a fixed artifact rather than one that depends on a hostname still answering.
npm run openapi:refresh # re-vendor the spec, prints the route diff
npm run build # regenerate src/tools.js
npm test # gates, incl. "src/tools.js matches the generator"npm test fails if src/tools.js was hand-edited or left stale, if the catalog and the live spec disagree, or if the tool list and this README disagree.
License
MIT
Available Tools
99 toolstwitter_account_meARead-only
Get YOUR twitterapis.com account details: email, name, credits remaining, credits used, total requests made, and account creation date. Authenticated by your API key. This is an account read, not Twitter data, and is free (it does not spend credits).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond the annotations by disclosing authentication via API key, clarifying that this is an account read (not Twitter data), and stating it is free with no credit cost. These details are not present in the annotations (readOnlyHint, openWorldHint, destructiveHint), enriching the 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?
The description is two concise sentences, front-loaded with the main purpose and followed by essential caveats. Every sentence earns its place without 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?
For a simple, no-parameter read tool with no output schema, the description fully covers the return fields, authentication, and cost implications. It is complete for the agent to correctly select and invoke 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?
With zero parameters and 100% schema coverage, the description doesn't need to explain params. It still usefully describes what the tool returns, which is more than sufficient given the baseline for 0 params.
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 (YOUR twitterapis.com account details), and enumerates the specific data returned (email, name, credits, etc.). It also distinguishes itself from sibling tools by explicitly noting this is an account read, not Twitter data.
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 clear context: it is for retrieving account details, not Twitter data, and it is free (does not spend credits). This implicitly tells the agent when to use this tool over data-focused siblings, though it does not explicitly name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_account_paymentsARead-only
Get YOUR twitterapis.com payment history: the list of top-ups and charges on your account. Authenticated by your API key. This is an account read, not Twitter data, and is free (it does not spend credits).
| 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, and the description reinforces this with 'account read'. It adds operational context by specifying free usage and no credit consumption, which goes beyond the annotations. No contradiction found.
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. The first states the primary action and result, the second adds critical context (authentication, cost, and scope). No wasted words; front-loaded and 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?
For a tool with no parameters and no output schema, the description adequately covers what it returns (payment history), who it's for (your account), and key attributes (free, no credits). It might benefit from mentioning result format or pagination, but these are not essential given the tool's simplicity.
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 tool has zero parameters, so schema coverage is 100% trivially. The description appropriately does not add unnecessary parameter details, though it could mention that the result is scoped to the authenticated user's account, which is implied.
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 explicitly states it retrieves the user's twitterapis.com payment history, listing top-ups and charges. It clearly distinguishes this from sibling tools that focus on Twitter data by emphasizing 'your account' and 'not Twitter data'.
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 authentication via API key and explicitly states it is free and does not spend credits, which guides when to use it. It clarifies it's an account read, not Twitter data, helping differentiate from other tools, though it does not explicitly name alternatives (there are none for payments).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_advanced_searchARead-only
Search recent tweets using X's advanced-search operators. Supports from:, to:, since:YYYY-MM-DD, until:YYYY-MM-DD, min_faves:N, min_retweets:N, filter:links, -filter:replies, lang:en, and free-text. Returns tweet text, author info, engagement metrics, and a pagination cursor. Use product='Latest' for chronological results; 'Top' (default) for engagement-ranked. Example queries: 'AI agents min_faves:100', 'from:openai filter:links since:2024-01-01', '#buildinpublic -filter:replies lang:en'.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| query | Yes | Full advanced-search query string. Supports X operators: from:handle, to:handle, since:YYYY-MM-DD, until:YYYY-MM-DD, min_faves:N, min_retweets:N, filter:links, filter:images, filter:videos, -filter:replies, lang:en, #hashtag, "exact phrase". Example: 'from:openai min_faves:500 since:2024-01-01'. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| product | No | Result ranking mode. 'Latest' = reverse-chronological (best for monitoring). 'Top' = engagement-ranked (best for finding popular tweets, default when omitted). 'Media' = tweets with images/video. 'People' = matching user accounts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description usefully adds that results include tweet text, author info, engagement metrics, and a pagination cursor. It does not mention rate limits or auth needs, so it adds some but not rich 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?
Front-loads purpose, then operators, return values, mode selection, and examples in a tidy progression. The operator enumeration duplicates the schema's query description, so it is slightly padded rather than tightly minimal.
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?
With no output schema, the description appropriately explains the return shape (tweet text, author, engagement, cursor). Combined with operator support, mode guidance, and examples, an agent has enough to call it correctly, missing only auth/rate-limit 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 description coverage is 100%, so all four parameters are already documented in-schema, setting a baseline of 3. The description's operator list and product-mode explanation largely restate the schema, though the concrete example queries add marginal construction help.
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?
States a specific verb and resource: 'Search recent tweets using X's advanced-search operators.' The 'recent tweets' scope and operator-based full-text search distinguish it from siblings like twitter_user_search or twitter_bookmark_search, though it never names them explicitly.
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?
Offers in-tool guidance on product modes ('Latest' for chronological vs 'Top' for engagement-ranked) and gives example queries, which implies usage. However, it never states when to reach for this tool over sibling search tools or any conditions to avoid it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_article_createA
Start a new DRAFT article ('Note') AS your authenticated account. No input required. Returns the new article's id (pass this to twitter_article_update_title / twitter_article_update_content / twitter_article_publish / twitter_article_delete) and its full article object. Requires an authenticated session with write capability behind your key.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only generic annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=true), the description adds meaningful context: it creates a draft, requires an authenticated session with write capability, and returns an id plus full object. No annotation contradiction exists.
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 compact sentences front-load the core action, then provide the returned id use and auth prerequisite. There is no filler or repetition; every sentence contributes.
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?
Without an output schema, the description correctly discloses return values (id + full article object), downstream tool names, and the write-session requirement. This is sufficient for an agent to select and safely invoke a simple no-input create 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?
All four parameters are already fully documented in the schema, so the high coverage baseline applies. The description adds a useful high-level note that no input is required and that auth/session context is needed, but it does not materially enrich parameter-level semantics 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 opens with a specific action ('Start a new DRAFT article') and identifies the actor ('AS your authenticated account') and artifact type ('Note'). It clearly distinguishes this creation tool from article mutation/publishing tools like twitter_article_update_title, twitter_article_publish, and twitter_article_delete.
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 frames this as the entry point to the article lifecycle by stating no input is required and explaining that the returned id feeds update/publish/delete tools. It does not explicitly contrast with twitter_create_tweet or name when to avoid this tool, so it falls just short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_article_deleteADestructive
Delete an article AS your authenticated account. A DRAFT is hard-deleted outright; a PUBLISHED article is unpublished first and then its announcement tweet is deleted too, so this is the one op that fully removes a published article's public footprint (compare twitter_article_unpublish, which leaves the tweet up). Irreversible. lifecycle and tweet_id are optional fast-path hints (read them off a prior twitter_article_create or twitter_article_list response): when omitted, the server figures out the lifecycle itself by scanning your own Draft then Published articles, which costs an extra round trip. Requires an authenticated session with write capability behind your key. Returns ok/deleted and the id you targeted.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The article's entity id, from twitter_article_create or twitter_article_list. | |
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| tweet_id | No | Optional fast-path hint: the announcement tweet id, only meaningful when lifecycle is 'published'. Omit to let the server resolve it from your own article list. | |
| lifecycle | No | Optional fast-path hint: 'draft' or 'published', if you already know it. Omit to let the server resolve it (slower, one extra lookup). | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description's 'Irreversible' statement adds value by emphasizing permanence. It also discloses the extra round trip when hints are omitted, and the requirement for write capability. While it doesn't detail the exact response format, it states 'Returns ok/deleted and the id you targeted', which is sufficient given 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 a single, dense paragraph that front-loads the core action and then adds necessary nuance. Every sentence earns its place: the draft vs. published distinction, the comparison to unpublish, the irreversibility warning, the fast-path hints, and the auth requirement. No fluff or repetition.
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 complexity (two lifecycle paths, optional hints, auth requirements) and the absence of an output schema, the description covers all critical aspects: what happens to drafts vs. published articles, the tweet deletion, the fast-path hints, the auth requirement, and the return value. It's complete for an agent to decide and invoke correctly.
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 the schema already documents all 7 parameters. The description adds value by explaining the fast-path hints (lifecycle, tweet_id) and their performance implications, and clarifies that auth_token/ct0 must be paired. This goes beyond the schema's basic descriptions, though the schema already covers the essentials.
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 deletes an article as the authenticated account, distinguishes between draft (hard-delete) and published (unpublish + delete tweet) behavior, and explicitly contrasts with twitter_article_unpublish. It names the specific resource (article) and the action (delete), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use this tool (to fully remove a published article's public footprint) and when not to (compare twitter_article_unpublish, which leaves the tweet up). It also provides guidance on optional fast-path hints (lifecycle, tweet_id) and when to omit them, plus the requirement for an authenticated session with write capability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_article_getARead-only
Read an article's full content (title, content_state, cover media, author, timestamps, public_url). Two mutually exclusive forms. PUBLIC: provide id or url of the article's announcement tweet, no registered session or per-call credentials needed, just your API key, same auth model as twitter_tweet_detail, works for PUBLISHED articles only. OWNER-ONLY: provide article_id (the article's own entity id, from twitter_article_create or twitter_article_list), requires an authenticated session, also reaches your own Drafts, which have no announcement tweet the public form could resolve. Returns 404 (article null) if not found, not visible, or (article_id form) not owned by the calling account.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Tweet/post numeric id (e.g. "1789012345678901234"). Provide exactly one of id or url. | |
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| url | No | Full tweet URL, e.g. "https://x.com/elonmusk/status/1789012345678901234". Provide exactly one of id or url. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| article_id | No | OWNER-ONLY form. The article's own entity id, from twitter_article_create or twitter_article_list (e.g. 'ArticleEntity:1234567890123456789', or the bare numeric rest_id). Requires an authenticated session. Provide exactly one of id, url, or article_id. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint: true, destructiveHint: false) already signal a safe read operation. The description adds critical details about the two auth models (API key vs. session), the 404 error handling (returns article: null), and ownership requirements for drafts. This goes beyond the annotations without contradicting them.
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 comprehensive paragraph covering purpose, forms, auth, and errors. It is information-dense but not verbose; every sentence contributes. While it could be broken into bullets, it's appropriately sized for the 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?
The description covers the full API surface: purpose, both forms, authentication requirements, error conditions, and relationships to other article tools. Even without an output schema, it lists returned fields (title, content_state, etc.) and handles edge cases like drafts and 404s. For a tool with this complexity, it is exceptionally 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 covers 100% of parameters with descriptions, so baseline is 3. The description adds value by explaining that id, url, and article_id are mutually exclusive and that article_id is the owner-only form. This metacommentary helps an agent choose the correct parameter, exceeding what the schema alone provides.
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+resource ('Read an article's full content') and clearly distinguishes the two invocation forms (PUBLIC via id/url, OWNER-ONLY via article_id). It differentiates this read operation from sibling tools like twitter_article_create/list/delete, which are referenced for context.
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 covers when to use the PUBLIC form (published articles, no session needed, id/url) versus the OWNER-ONLY form (requires authentication, drafts). It also explains the 404 behavior for not found/visible/owned. Although it doesn't explicitly name an alternative tool, the usage contexts are clear and reference sibling tools for article_id sources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_article_listARead-only
List YOUR OWN articles (drafts or published) AS your authenticated account, most recent first. X exposes no combined view, so this filters to ONE lifecycle per call: pass lifecycle='published' to list published articles, omit it (or pass 'draft') for drafts. Requires an authenticated session behind your key. Returns count, next_cursor (pass it back as cursor to fetch the next page; null/absent means no more pages), and the page of article objects.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| count | No | Max articles to return for this page, 1 to 100. Defaults to 20 when omitted. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| lifecycle | No | Which lifecycle to list: 'draft' or 'published'. Defaults to 'draft' when omitted. X has no combined view, list each lifecycle separately. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint=true, openWorldHint=true, destructiveHint=false. The description complements by explaining that it's scoped to the authenticated account (not all articles), requires an authenticated session (ct0, auth_token), yields most recent first, and paginates via cursor. It doesn't contradict annotations and adds valuable context about session/auth requirements and the lack of a combined view. Slight deduction for not mentioning rate limits or potential errors, but generally strong.
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 compact but information-dense, covering purpose, scoping, lifecycle behavior, authentication, pagination, and return structure. It front-loads the core message of listing your own articles, then adds necessary details without redundancy. Every sentence contributes value, and it stays well under 150 words for a tool with 7 parameters.
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 explains return fields (count, next_cursor, article objects). It covers authentication requirements, pagination mechanics, and the lifecycle limitation. For a read-only list tool with comprehensive parameter descriptions and annotations (readOnlyHint, openWorldHint), this description is complete and self-contained. No critical information is missing.
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 a description. The description adds context by stating the default count (20), the behavior of cursor (null/absent means no more pages), and that lifecycle must be explicitly changed to published. It also explains the auth cookie requirement and proxy_url recommendation for writes. While the schema already explains each parameter clearly, the description enriches the semantics with default values and practical usage patterns.
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 lists the authenticated user's own articles, with a specific verb ('list'), resource ('articles'), and scope ('YOUR OWN', 'AS your authenticated account'). It distinguishes itself from sibling tools that list articles for other users or manage webhooks/tweets by emphasizing the authenticated account's own articles and the lifecycle filter.
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 states when to use: for listing one's own published or draft articles, and when not to: when needing a combined view, as X exposes no combined view. It provides clear guidance on using the 'lifecycle' parameter (published vs draft) and explicitly mentions pagination via 'cursor', which is a direct alternative to not using it. No alternatives are needed since this is a unique tool for listing own articles.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_article_publishA
Publish a DRAFT article AS your authenticated account, transitioning it to Published and posting a REAL, PUBLIC announcement tweet that your followers and anyone with the link can see. WARNING: this is a genuinely consequential, hard-to-fully-undo action, it is not like saving a draft. twitter_article_unpublish reverts the article to Draft but LEAVES the announcement tweet up; only twitter_article_delete on a published article unpublishes AND removes the announcement tweet, and by then the content was already public for however long it stayed up. Confirm with the caller before publishing unless they have clearly asked for it. Provide the article's id; audience and reply_control default to 'Everyone' when omitted; caption is an optional short (<=256 character) caption for the announcement tweet. Requires an authenticated session with write capability behind your key. Returns the updated (Published) article object.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The article's entity id, from twitter_article_create or twitter_article_list. Must currently be a Draft. | |
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| caption | No | Optional. Short caption text for the announcement tweet, up to 256 characters. | |
| audience | No | Optional. Who can see the published article, e.g. 'Everyone'. Defaults to 'Everyone' when omitted. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. | |
| reply_control | No | Optional. Who can reply to the announcement tweet, e.g. 'Everyone'. Defaults to 'Everyone' when omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already mark the operation as non-read-only, the description goes far beyond by disclosing that the announcement tweet is REAL and PUBLIC, that the action is hard to fully undo, and that even after deletion the content was already public. It also describes authentication prerequisites and provides high-value context about the exact reversal behaviors of sibling tools, with no contradiction to 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 front-loaded with the core action and then builds out critical warning and side-effect context. Every sentence serves a distinct purpose: warning about irreversibility, naming alternatives, giving confirmation guidance, and covering defaults and prerequisites. The length is justified given the consequential nature of the operation.
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 tool has 8 parameters, complex state transitions, and no output schema, yet the description succeeds in covering what matters: the outcome, the order of operations, side effects, undo semantics, defaults, return value, and authentication needs. The agent is equipped to decide, confirm, and invoke safely.
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 already covers 100% of parameters with detailed descriptions, so the baseline is 3. The description repeats a few key facts (id must be a draft, audience and reply_control default to 'Everyone', caption max 256 characters) but does not add new parameter semantics beyond what the schema already provides.
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 core action—publish a DRAFT article as the authenticated account—and specifies the resulting state change: transitioning to Published and posting a REAL, PUBLIC announcement tweet. It distinguishes itself from sibling tools by explicitly naming twitter_article_unpublish and twitter_article_delete and their different reversal behaviors.
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 explicit when-to-use guidance: publishing a draft article with a public announcement tweet. It also gives exclusionary context by explaining that unpublish only reverts the article but leaves the tweet, and that only delete on a published article removes both. Additionally, it instructs the agent to confirm with the caller unless explicitly authorized, which is clear and actionable usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_article_unpublishADestructive
Revert a PUBLISHED article back to Draft AS your authenticated account. The announcement tweet the publish posted is LEFT IN PLACE, still publicly visible, use twitter_article_delete instead if you also want that tweet removed. X refuses this with an 'invalid_lifecycle' error if the article is not currently Published. Requires an authenticated session with write capability behind your key. Returns the updated (Draft) article object.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The article's entity id, from twitter_article_create or twitter_article_list. Must currently be Published. | |
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details side effects (tweet left in place), requirements (write capability, authenticated session), error behavior (invalid_lifecycle), and return value (updated Draft article). This goes beyond the annotation (destructiveHint) by specifying exactly what is and isn't affected, without contradicting it.
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 succinct and structured: it states the action, the side effect, the alternative, the error condition, the requirement, and the return value in a few clear sentences without 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 the tool's complexity, the description covers all critical aspects: what it does, side effects, when to use an alternative, error scenarios, authentication needs, and the return object. It is complete enough for an agent to use effectively.
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 per-parameter descriptions (e.g., id, auth_token), so the description doesn't need to add parameter details. It does mention authentication and write capability generally, but does not specifically elaborate on individual parameters, keeping it at the baseline for high 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 action (revert a PUBLISHED article to Draft) and distinguishes it from the delete alternative (which also removes the tweet). It specifies the resource (article) and the state transition, making it unambiguous.
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 explicitly explains when to use this tool versus the alternative (twitter_article_delete) when tweet removal is also desired. It also mentions the error condition if the article is not published, providing clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_article_update_contentA
Replace the body content of a DRAFT or PUBLISHED article AS your authenticated account. Provide the article's id and content_state: Draft.js JSON ({ blocks: [...], entityMap: [...] }) that YOU build and pass through verbatim, this tool does not construct or validate it. Requires an authenticated session with write capability behind your key. Returns the updated article object.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The article's entity id, from twitter_article_create or twitter_article_list. | |
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. | |
| content_state | Yes | Draft.js content state object: { blocks: [...], entityMap: [...] }. You construct this JSON yourself (it is the same shape the X Article editor produces); it is passed through to X verbatim and not validated here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Transparently notes that the tool does not construct or validate content_state, passes it through verbatim, and clarifies authentication and write requirements. Consistent with destructiveHint=false and adds useful behavioral context beyond 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 concise, using two clear sentences without redundancy, and is well-structured with necessary details.
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?
Covers key aspects: target article states (DRAFT or PUBLISHED), authentication/write requirements, pass-through behavior, and return type. Sufficient for the tool's complexity; lacks only explicit mention of alternatives, but not essential.
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 description enriches schema by specifying content_state as Draft.js JSON with expected structure and explicitly states that the user builds it and it is passed through verbatim, adding meaning beyond the basic 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?
Description clearly states the action: 'Replace the body content of a DRAFT or PUBLISHED article'. It identifies the resource (article) and the specific operation (content update), distinguishing it from other article operations like title or cover media updates.
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 changing article body content and mentions requirements (authenticated account, write capability), but does not explicitly contrast with alternative tools like update_title or update_cover_media, nor state 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.
twitter_article_update_cover_mediaA
Attach an ALREADY-UPLOADED image as the cover of a DRAFT or PUBLISHED article, AS your authenticated account. This does NOT upload: call twitter_media_upload first and pass the media_id it returns. Provide the article's id (from twitter_article_create or twitter_article_list). Requires an authenticated session with write capability behind your key. Returns the updated article object with cover_media populated.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The article's entity id, from twitter_article_create or twitter_article_list (e.g. 'ArticleEntity:1234567890123456789'). | |
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| media_id | Yes | The media id returned by twitter_media_upload for the image to use as the cover. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. | |
| media_category | No | Optional. X's media category for the upload. Defaults to 'DraftTweetImage', which is what X's own article editor sends for a cover image. Only set this if you know X expects a different category. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint: false, destructiveHint: false), so the description rightly carries the burden and adds context: acts 'AS your authenticated account,' requires write capability, clarifies it does NOT upload, and discloses the return shape ('updated article object with cover_media populated'). 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?
Four information-dense sentences, front-loaded with the core action in the first clause. Use of ALL-CAPS emphasis ('ALREADY-UPLOADED,' 'NOT') aids scanning. 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 7-param, 2-required tool with no output schema and no enums/nesting, the description covers the key gaps: return shape, auth requirements, and cross-tool dependencies. Adequately complete given the moderate 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?
Schema coverage is 100%, so baseline is 3. The description adds genuine value by cross-referencing which sibling tool produces each identifier (media_id from twitter_media_upload, id from twitter_article_create/list), going beyond what the schema alone provides.
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?
Specific verb+resource: "Attach an ALREADY-UPLOADED image as the cover of a DRAFT or PUBLISHED article." Clearly distinguishes from siblings by explicitly contrasting with twitter_media_upload and naming provenance tools (twitter_article_create/twitter_article_list).
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?
Explicit workflow guidance: 'call twitter_media_upload first and pass the media_id it returns' gives when-to-use and sequencing, 'This does NOT upload' gives exclusions, and 'Requires an authenticated session with write capability' states preconditions. Names exact sibling tools for ID provenance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_article_update_titleA
Set or replace the title of a DRAFT or PUBLISHED article AS your authenticated account. Provide the article's id (from twitter_article_create or twitter_article_list) and the new title. Requires an authenticated session with write capability behind your key. Returns the updated article object.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The article's entity id, from twitter_article_create or twitter_article_list (e.g. 'ArticleEntity:1234567890123456789'). | |
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| title | Yes | The new article title (non-empty). | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so the description's addition of 'Requires an authenticated session with write capability' and 'Returns the updated article object' adds valuable behavioral context beyond annotations. It also mentions the DRAFT/PUBLISHED state, which is useful.
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 four sentences and under 50 words, front-loading the core action. There is minor redundancy (mentioning 'authenticated account' and later 'authenticated session'), but each sentence serves a purpose: action, required inputs, auth requirement, and return 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?
For a simple mutation tool with 6 params, 2 required, and no output schema, the description adequately covers the operation, auth prerequisite, input source, and return behavior. It does not discuss error conditions or rate limits, but these are not expected for a tool of this 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?
Schema description coverage is 100%, so the baseline is 3. The description restates the need for id and title but adds no new meaning beyond the schema's field descriptions; it does not compensate for optional parameters like proxy_url or auth_token, which are already well-documented in 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 opens with 'Set or replace the title of a DRAFT or PUBLISHED article AS your authenticated account,' which uses a specific verb (set/replace) and resource (title of article). It clearly distinguishes from sibling tools like twitter_article_update_content and twitter_article_update_cover_media by focusing solely on the title.
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 context: the article id comes from twitter_article_create or twitter_article_list, and the tool targets title-only updates. It does not explicitly state 'use update_content for body changes,' but the title-specific wording and sibling differentiation make the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_blockingARead-only
List the accounts YOUR authenticated account has BLOCKED, as full user objects, cursor-paginated. Requires an authenticated session behind your key. There is no user_id argument: X provides no way to read another account's block list, so this reads yours only. An empty users array is a real answer meaning you block nobody, never a silent failure, because the endpoint returns an error status rather than an empty page when it cannot read the list.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly/destructive=false), it discloses auth requirements ("Requires an authenticated session behind your key"), a failure-mode guarantee that an empty users array is a genuine result rather than a silent failure because the endpoint errors instead of returning an empty page, and pagination behavior. That is meaningful operational context the annotations cannot express.
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?
Four sentences, no filler, and the most important constraint (self-only scope) is front-loaded in the first clause. Each subsequent sentence adds a distinct fact: auth requirement, argument absence, and empty-result semantics.
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?
With no output schema and six optional parameters, the description compensates well: it characterizes the return (full user objects, cursor-paginated), the empty-array case, and the auth requirement. An agent has everything needed to call this correctly on the first attempt.
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 the baseline is 3, but the description adds semantics the schema does not: it explains the deliberate absence of a user_id argument and frames retrieval as cursor-paginated ("page with the cursor from the previous response"). It does not add per-parameter detail beyond that.
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 a specific verb and resource ("List the accounts YOUR authenticated account has BLOCKED") and immediately constrains scope to the caller's own account. The emphasis on "YOUR... BLOCKED" distinguishes it cleanly from sibling read tools such as twitter_muting, twitter_user_followers, and twitter_user_info without requiring a schema read.
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 gives clear selection context: use this for your own block list, and explicitly rules out the alternative case by stating "There is no user_id argument: X provides no way to read another account's block list." It stops short of naming sibling tools (e.g., twitter_muting) as related alternatives, so it is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_bookmark_foldersARead-only
List YOUR authenticated account's bookmark FOLDERS (X's internal name: collections), the named groups you can organize saved tweets into, separate from your flat bookmarks list (twitter_bookmarks). Requires an authenticated session behind your key. Returns each folder's id, name, and a cover image. Takes no arguments; your folders resolve from your session alone. Use twitter_bookmark_folder_timeline with a folder's id to read the tweets inside it.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only (readOnlyHint) and non-destructive (destructiveHint false). The description adds valuable transparency by mentioning the authenticated session requirement and specifying the exact output fields (id, name, cover image), which is not in 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 moderately concise, with four sentences covering purpose, differentiation, auth, output, and alternative usage. Each sentence adds value, though it could be tightened by removing the parenthetical definition of 'collections' without losing meaning.
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 (list folders) and the presence of a full input schema with per-parameter descriptions, the description covers the essential aspects: what it does, auth prerequisite, output fields, and alternatives. It lacks details on error cases or rate limits, but these are not critical for this read-only 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?
The schema provides descriptions for each optional parameter (ct0, proxy_url, auth_token, user_agent). The description adds semantic clarity by stating 'Takes no arguments' meaning no resource-specific arguments, and implies these parameters are for session/auth context. However, the phrase 'Takes no arguments' could be slightly misleading given the schema parameters, but it is contextually clear.
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 ('List'), the resource ('YOUR authenticated account's bookmark FOLDERS'), and differentiates from the flat bookmarks list (twitter_bookmarks) and the folder timeline tool. It also explains the internal name 'collections' for clarity.
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 explicitly contrasts with twitter_bookmarks (flat list) and directs users to twitter_bookmark_folder_timeline for reading tweets inside a folder, providing clear when-to-use guidance. It also notes the authentication requirement as a prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_bookmark_folder_timelineARead-only
Read the tweets inside ONE of your authenticated account's bookmark folders, identified by folder_id (from twitter_bookmark_folders). Requires an authenticated session behind your key. Cursor-paginated; there is no count/page-size argument for this op.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| folder_id | Yes | The bookmark folder's id, from twitter_bookmark_folders (e.g. '2073826456430592429'). | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive, and the description adds useful context: requires an authenticated session, and pagination is cursor-based with no count/page-size. This is beyond the annotation metadata and helps the agent understand expectations.
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, both dense with actionable info: purpose/scoping, source of folder_id, auth requirement, and pagination. No fluff, each 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 read-only paginated tool with good annotations and full schema coverage, the description adequately covers purpose, auth, and pagination. It doesn't describe the return shape, but without an output schema, that's acceptable. It might mention rate limits, but overall it's complete for this tool type.
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 all six parameters are described there. The description adds minimal extra meaning, only reminding that folder_id comes from twitter_bookmark_folders. Since the schema handles parameter details, the description's contribution is marginal but not absent.
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 reads tweets from one bookmark folder, specified by folder_id sourced from twitter_bookmark_folders. This specific verb+resource+scope distinguishes it from siblings like twitter_bookmark_folders (listing folders) and twitter_bookmarks (all bookmarks).
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 provides a prerequisite (folder_id from twitter_bookmark_folders) and notes the requirement for an authenticated session. It also explains pagination behavior (cursor-based, no count parameter). While it doesn't explicitly name alternative tools, the 'ONE' qualifier and source hint adequately guide usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_bookmarksARead-only
List YOUR authenticated account's bookmarked tweets, most recent first. Requires an authenticated session behind your key. Returns each bookmarked tweet with author and metrics plus a cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds real value beyond that: it discloses the authentication requirement, the sort order, and the return shape ('with author and metrics plus a cursor'). It stops short of discussing rate limits or pagination limits, but that is the schema's job here.
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 tight sentences, front-loaded with the core purpose before prerequisites and return format. No filler or repetition.
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?
With no output schema, the description carries the return-value burden and does so adequately (author, metrics, cursor). Auth and ordering are covered; adding sibling routing would make it fully 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 description coverage is 100% and the schema itself explains count, cursor, cookies, proxy and user-agent in detail. The description adds no parameter-level meaning beyond the ordering/cursor mentions, so the baseline 3 applies.
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?
States a specific verb (List) and resource (bookmarked tweets) scoped to the authenticated account, plus ordering ('most recent first'). It clearly differs from bookmark_search and bookmark_folder_timeline by being an unfiltered listing of your own bookmarks, though it never names those siblings explicitly.
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 use (retrieve your bookmarks) and states the auth precondition, but gives no explicit when-to-use, when-not-to-use, or pointer to the sibling tools (bookmark_search, bookmark_folder_timeline) that an agent might pick instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_bookmark_searchARead-only
Full-text search within YOUR authenticated account's bookmarks. Requires an authenticated session behind your key. Returns matching bookmarked tweets plus a cursor. Use this to retrieve a previously bookmarked tweet by keyword.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| query | Yes | Search terms to match against your bookmarked tweets' text. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds real value beyond that: it states an authenticated session behind the key is required and discloses the return shape (matching tweets plus a cursor), which the annotations do not convey.
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, the scope constraint and auth requirement front-loaded, and the return shape and use case follow. Every sentence carries distinct information with no redundancy.
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?
With no output schema, the description compensates by stating the return is matching tweets plus a cursor, and it covers the auth prerequisite. Pagination mechanics live in the cursor parameter's schema description, so what is missing here is minimal, though a brief note on paging would have made it fully self-contained.
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 the schema already documents all seven parameters, including the advisory count cap, the ct0/auth_token pairing, and the proxy recommendation. The description adds no parameter-level detail beyond what the schema provides, so the baseline 3 applies.
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?
States a specific verb (full-text search), a precise resource (bookmarks), and crucially scopes it to "YOUR authenticated account's bookmarks," which separates it from twitter_advanced_search and from the plain twitter_bookmarks listing sibling. An agent can identify it without opening the schema.
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?
"Use this to retrieve a previously bookmarked tweet by keyword" gives an explicit use case, so usage is more than implied. However, it names no alternatives (e.g., twitter_bookmarks for listing all bookmarks) and states no conditions under which this tool should not be chosen, leaving the when-not side entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_bookmark_tweetA
Bookmark a tweet to YOUR authenticated account's private bookmarks. Provide the tweet id or url. Requires write capability behind your key. Reverse with twitter_unbookmark_tweet.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Tweet/post numeric id (e.g. "1789012345678901234"). Provide exactly one of id or url. | |
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| url | No | Full tweet URL, e.g. "https://x.com/elonmusk/status/1789012345678901234". Provide exactly one of id or url. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag readOnlyHint=false, so the description adds value by specifying the side-effect scope: the bookmark lands only in the authenticated account's *private* bookmarks, and the operation is reversible via twitter_unbookmark_tweet. It also discloses the auth requirement ('write capability behind your key'). It stops short of 5 because, with no output schema, it doesn't disclose return/error behavior or duplicate-bookmark semantics.
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?
Four short sentences, front-loaded with the core action, then input form, precondition, and reversal — every sentence earns its place with zero filler or redundancy.
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 action, account scope, privacy, input form (id or url), auth precondition, and reversal, while the schema's property descriptions add proxy/auth pairing nuances. The only gap is that no output schema exists and the description doesn't hint at return values or already-bookmarked behavior; for such a simple write operation this is a minor omission.
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 the baseline is 3 — the property descriptions already document the id/url mutual exclusion ('Provide exactly one of id or url'), ct0/auth_token pairing, proxy_url recommendation for writes, and header mappings. The top-level description merely restates 'Provide the tweet id or url' and adds no syntax or format detail beyond what the schema already provides.
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 opens with a specific verb+resource+scope: 'Bookmark a tweet to YOUR authenticated account's private bookmarks.' It distinguishes from siblings by scoping the action to the caller's own account and explicitly naming the reverse tool (twitter_unbookmark_tweet), while the read-only bookmark siblings (twitter_bookmarks, twitter_bookmark_search) are clearly different operations.
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 clear context for when this tool applies: it requires 'write capability behind your key' and names twitter_unbookmark_tweet as the explicit reverse/undo path. However, it doesn't explicitly state when NOT to use this versus the read-only bookmark tools (twitter_bookmarks, twitter_bookmark_search), so it falls just short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_check_follow_relationshipARead-only
Check the follow relationship between two accounts by numeric user id: whether the source follows the target, whether the target follows the source, blocking/muting flags where available. Both ids are required. Use this to verify a follow before/after a follow action, or to detect mutuals.
| Name | Required | Description | Default |
|---|---|---|---|
| source_user_id | Yes | Numeric user id of the SOURCE account (the 'is this account following...' subject). | |
| target_user_id | Yes | Numeric user id of the TARGET account (the '...the target?' object). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly, description adds details on what flags are returned (block/mute). No contradiction and provides extra context beyond 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 concise sentences front-load purpose and usage, 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?
For a simple read tool with no output schema, description covers input, return value hints, and usage context. Minor gap: no mention of error 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 covers both params with descriptions; description rephrases roles ('subject' vs 'object') adding clarity. With 100% schema coverage, additional explanation earns above 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 tool checks follow relationship between two accounts by numeric user id, including blocking/muting flags. It distinguishes from sibling tools like follow/unfollow.
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 both ids required and gives use cases: verify follow before/after or detect mutuals. Lacks explicit when-not 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.
twitter_community_aboutARead-only
The About tab for one X Community: its moderators, and a preview of its members, both returned as FULL user profiles with bio, follower and following counts, tweet counts, location, website, banner and join date. twitter_community_members and twitter_community_moderators return a reduced row instead, so this is the endpoint that answers who runs a community in one call rather than one call plus a profile lookup per person. Use twitter_community_info instead for the community's own metadata (name, description, rules, join policy); this endpoint is about the PEOPLE, not the community object.
| Name | Required | Description | Default |
|---|---|---|---|
| community_id | Yes | Numeric X community id, the digits in a x.com/i/communities/<id> URL, e.g. '1493446837214187523'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to restate safety. It adds behavioral context by specifying that it returns 'FULL user profiles' with detailed fields, which goes beyond the schema. It also clarifies the endpoint is about people, not the community object, adding useful nuance beyond what annotations convey. 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?
The description is two sentences, tightly written, and front-loaded with the core purpose. Every clause adds value: it states what it returns, contrasts with reduced-row siblings, and directs to the correct alternative for metadata. No fluff or redundancy.
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 single-parameter tool with strong annotations and full schema coverage, the description provides complete context. It describes the output content (full profiles with specific fields), explains the differentiation from related tools, and clarifies the scope (people vs community object). No output schema exists, but the description sufficiently conveys what to expect. The tool's complexity is low, and nothing critical is missing.
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 description fully covers community_id with an example and URL context (100% coverage). The tool description does not add any extra parameter semantics, but the schema is sufficient. Baseline 3 applies because the parameter is already well-documented; the description does not need to repeat it.
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 function: returning full user profiles for a community's moderators and a preview of its members. It names the specific fields included and explicitly distinguishes it from sibling tools like twitter_community_members and twitter_community_moderators, which return reduced rows, and twitter_community_info, which covers community metadata. This makes the purpose unambiguous and easily differentiated.
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 explicit when-to-use guidance and names alternatives: it says to use this tool when full profiles are needed versus reduced rows from twitter_community_members/moderators, and directs users to twitter_community_info for community metadata. It also explains that this endpoint answers 'who runs a community' in one call, covering when and why to choose it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_community_infoARead-only
Get the metadata for one X Community by its numeric id: name, description, member_count, moderator_count, join_policy, invites_policy, the join question, primary topic, search tags, the posted rules, both the custom and the default banner plus a resolved banner_url, the permalink, the admin and creator profiles, and the facepile member ids. The community id is the digits in a x.com/i/communities/ URL. IMPORTANT: role, can_join, is_pinned and viewer_relationship_type are ALWAYS null here and that is deliberate, not an error, because they describe the account that made the call and this is a pooled read served by a rotating account. rules[].description is also always null: X sends only the rule id and name on this payload. Use twitter_community_members for the roster and twitter_community_tweets for the posts.
| Name | Required | Description | Default |
|---|---|---|---|
| community_id | Yes | Numeric X community id, the digits in a x.com/i/communities/<id> URL, e.g. '1493446837214187523'. Digits only. This is NOT a Space id (those are base-62 tokens) and NOT a user id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, but the description goes further by explaining why viewer-relative fields (role, can_join, is_pinned, viewer_relationship_type) are always null due to pooled rotating accounts, and why rules[].description is always null. This prevents misinterpreting expected nulls as errors—valuable behavioral context beyond 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 front-loaded with the core purpose, then lists return fields, clarifies the ID format, highlights important null behavior, and closes with sibling pointers. It is long but every sentence carries essential information; no filler or repetition beyond what aids clarity.
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?
With no output schema and a response containing many heterogeneous fields (banners, rules, profiles, facepile IDs), the description compensates thoroughly by naming the return fields, explaining deliberate nulls, and clarifying ID semantics. It also gives usage boundaries with sibling tools, making it complete for an agent to select and invoke correctly.
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%, and the schema already provides detailed semantics for community_id, including type, format, example, and exclusions. The description restates the URL pattern and the 'NOT a Space id / NOT a user id' distinction, which reinforces but does not add significant new 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?
The description opens with a specific verb and resource: "Get the metadata for one X Community by its numeric id" and then enumerates the exact fields returned. It distinguishes itself from sibling tools by pointing to twitter_community_members and twitter_community_tweets for other concerns, making its scope unmistakable.
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 states both the context for use (single community metadata lookup by numeric ID) and directs users to alternatives: "Use twitter_community_members for the roster and twitter_community_tweets for the posts." It also clarifies the ID format with a concrete URL pattern, which guides correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_community_membersARead-only
List the member roster of an X Community, cursor-paginated, with each row carrying that member's own role in the community: 'Admin', 'Moderator' or 'Member'. Rows are { user, role }. The user object is deliberately REDUCED (id, username, name, profile_image_url, is_blue_verified, verified, is_protected) because X's roster operation sends no bio, no follower or following counts and no created_at; call twitter_user_info with an id when the full profile is needed. Note that the role on a member ROW is NOT caller-relative and is returned in full, unlike the role field on the community object itself. Admins and moderators are interleaved through this list at arbitrary positions, so do NOT derive a moderator list by filtering the first page: use twitter_community_moderators. Paging is a bare next_cursor with no total count from X; stop when members comes back empty or has_more is false.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Max roster rows to return for this page. Defaults to 20 and is clamped to 1-100, so a larger number returns 100 rather than erroring. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call. Absence of next_cursor is the only end-of-list signal X gives on this operation. | |
| community_id | Yes | Numeric X community id, the digits in a x.com/i/communities/<id> URL, e.g. '1493446837214187523'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnlyHint annotation by detailing the reduced user object (no bio, follower counts, created_at), the interleaving of admins/moderators at arbitrary positions, and the pagination behavior (bare next_cursor, no total count, stop when members is empty or has_more is false). This provides critical behavioral context that annotations alone do not convey.
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 dense but well-structured, front-loading the core purpose and then providing necessary caveats and usage notes. Every sentence adds value, covering the row structure, reduced user object, role semantics, pagination behavior, and alternatives. It is appropriately sized for the complexity of the tool.
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 complexity (pagination, reduced user object, role semantics, interleaving), the description is complete. It covers the return structure, pagination termination conditions, and when to use alternative tools. The absence of an output schema is compensated by the detailed description of the row structure and user object fields.
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 already has 100% coverage with detailed descriptions for all three parameters, including defaults, clamping, and the meaning of cursor absence. The description adds value by explaining the pagination semantics (next_cursor, end-of-list signal) and the reduced user object, but the schema already covers the parameter basics well, so the description's additional contribution is moderate.
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 lists the member roster of an X Community with cursor pagination, and specifies the exact row structure (user, role) and the reduced user object fields. It distinguishes itself from sibling tools like twitter_community_moderators and twitter_user_info by explicitly noting what it does not provide and what to use instead.
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 explicit guidance on when to use this tool versus alternatives: it notes that the role on a member row is not caller-relative and is returned in full, unlike the community object's role field, and explicitly warns against deriving a moderator list by filtering the first page, directing to twitter_community_moderators instead. It also explains when to use twitter_user_info for full profiles.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_community_membershipsARead-only
The INVERSE community lookup: given a numeric X USER id, list the communities that account belongs to, cursor-paginated. Every other community tool starts from a community; this one starts from an account, which makes it the tool for profiling which audiences a person sits inside. Each row is the FULL community object (the same shape twitter_community_info returns, with member counts, rules, topic, policies, admin and creator), so no follow-up call per community is needed. Takes a numeric user id ONLY, not a @handle: resolve a handle with twitter_user_info first, because resolving it here would silently cost a second call. An EMPTY communities array is a real, successful answer (the account is in no communities), not a not-found. As on twitter_community_info, role / can_join / is_pinned / viewer_relationship_type are always null on every community returned, because this is a pooled read.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Max communities to return for this page. Defaults to 20 and is clamped to 1-100. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call. | |
| user_id | Yes | Numeric X user id, e.g. '1281109705495130113'. NOT a @handle and NOT a community id. Resolve a handle to its id with twitter_user_info first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, but the description goes far beyond that. It reveals that this is a 'pooled read' and that role/can_join/is_pinned/viewer_relationship_type are always null. It also discloses that an empty array is a real success, not an error, and that the result includes the full community object shape. This adds substantial behavioral context that annotations alone do not provide, and it does not contradict them.
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 relatively long but every sentence earns its place: it starts with the core purpose, then differentiates from siblings, explains the return shape, warns about the id type, clarifies empty results, and notes pooled-read quirks. It is front-loaded with the primary use case. Though not the shortest, the density of essential information justifies its length.
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?
Despite having no output schema, the description fully explains what the caller will receive: 'Each row is the FULL community object (the same shape twitter_community_info returns...), so no follow-up call per community is needed.' It also covers pagination via cursor, the empty-array case, and the null fields on pooled reads. For a 3-parameter tool with no output schema, this is highly complete and self-sufficient.
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 the schema already documents all three parameters clearly. The description adds extra value by emphasizing that user_id is NOT a @handle and NOT a community id, and by recommending resolving a handle with twitter_user_info first to avoid a hidden second call. It also confirms count defaults and clamping, reinforcing the schema. This exceeds the baseline of 3 for high 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's purpose: 'given a numeric X USER id, list the communities that account belongs to'. It uses a specific verb (list) and resource (communities) and explicitly differentiates from other community tools by calling itself the 'INVERSE community lookup' and noting that every other community tool starts from a community, while this one starts from an account. This fully distinguishes it among siblings.
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 explicit when-to-use guidance: 'makes it the tool for profiling which audiences a person sits inside'. It also provides when-not-to-use details: 'Takes a numeric user id ONLY, not a @handle: resolve a handle with twitter_user_info first' and warns about the cost of resolving a handle here. It also clarifies that an empty array is a successful answer, not a not-found, which prevents misinterpretation. These are strong usage guidelines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_community_moderatorsARead-only
List the moderators and admins of an X Community, cursor-paginated, in the same { user, role } row shape twitter_community_members returns (the array is also called members, deliberately, so the two cannot drift apart). This is a SEPARATE upstream operation, not a filter over the member roster, and that matters for correctness: moderators sit at arbitrary positions inside the full roster, so filtering one page of twitter_community_members would return 'the moderators among the first 20 members' while looking like a complete answer. Read each row's role rather than assuming every row is a Moderator, since admins appear here too. Paging is a bare next_cursor with no total count from X.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Max rows to return for this page. Defaults to 20 and is clamped to 1-100. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call. | |
| community_id | Yes | Numeric X community id, the digits in a x.com/i/communities/<id> URL, e.g. '1493446837214187523'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false, and the description adds extra behavioral context: cursor-paginated output, the 'members' array name, absence of total count, and the presence of admins in results. No contradictions exist between description and 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 efficiently written with a clear front-loaded purpose and every sentence adds meaningful value regarding behavior, correctness, or usage. It avoids redundant phrasing while packing in crucial distinctions.
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?
With no output schema, the description provides the essential return shape and pagination behavior. It covers the row structure, the array name, the absence of a total count, and the mixed roles, giving an agent sufficient information to correctly interpret and paginate results.
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 parameters, so parameters are already well-documented. The description adds context about pagination ('bare next_cursor with no total count') which relates to the cursor parameter, but it doesn't substantially go beyond the schema information for count and community_id.
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 lists moderators and admins of an X Community, with a specific verb ('List') and resource. It further distinguishes it from the sibling twitter_community_members by specifying the identical row shape and the fact it is a separate upstream operation.
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 explains when to use this tool over twitter_community_members, detailing that filtering member pages is incorrect due to arbitrary positions of moderators. It also advises reading each row's role because admins are present, which is actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_community_searchARead-only
Find X Communities by keyword, cursor-paginated. This is the discovery step the rest of the community family assumes: every other community endpoint starts from a community id, and this is the one that produces one. Each hit is a compact record, id, name, member count, nsfw flag, topic name, banners and the facepile avatars, exactly what X's own search sends and nothing more. Once you have an id, use twitter_community_info or twitter_community_about for detail, twitter_community_members / twitter_community_moderators for the roster, and twitter_community_tweets for its posts.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Keyword to search for, 1 to 500 characters, e.g. 'build in public'. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false. The description adds valuable behavioral context: cursor-paginated results, compact hit structure with specific fields, and the guarantee that it returns only what X's own search sends. This goes beyond annotations without contradicting them.
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, followed by relationship context and response details. No filler words; every clause contributes meaningful information about usage or behavior.
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?
Despite no output schema, the description covers purpose, pagination, response shape, and downstream tool usage. Annotations cover safety, and the tool is simple enough that this description is fully sufficient for an agent to select and invoke it correctly.
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?
Input schema has 100% coverage for both parameters (query and cursor), so the description doesn't need to compensate. The description mentions cursor-paginated but adds no new parameter details beyond the schema. Baseline 3 applies.
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 ('Find X Communities by keyword') and resource (X Communities). It distinguishes itself from sibling community tools by explicitly positioning itself as the discovery step that produces community IDs, which other endpoints consume.
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 explicit guidance on when to use: as the entry point for the community family, and directs users to specific sibling tools once an ID is obtained. It also implies when not to use it (when you already have an ID, use detail endpoints).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_community_tweetsARead-only
Read an X Community's own post timeline, cursor-paginated as full tweet objects, with the community's PINNED post returned as its own separate 'pinned' field rather than as an item inside 'tweets'. That split is not cosmetic: X delivers the pinned post under a different timeline instruction and does not repeat it in the feed, so a client that iterates only 'tweets' silently loses it, and it is very often the community's rules post, the single most useful item in the response. To build one flat list, read 'pinned' first if non-null, then 'tweets' (the pinned post is excluded from 'tweets', so there is no duplicate). ranking_mode is a REAL upstream parameter, not a local sort. Use twitter_advanced_search instead when the search should span all of X rather than one community.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Max posts to return for this page. Defaults to 20 and is clamped to 1-100. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call. | |
| community_id | Yes | Numeric X community id, the digits in a x.com/i/communities/<id> URL, e.g. '1493446837214187523'. | |
| ranking_mode | No | Ordering, sent to X as a real request parameter. 'Recency' is the default and the only value confirmed against a live capture. 'Relevance' is accepted because X's own community tab offers exactly two orderings, but it is NOT confirmed live, so do not depend on it. Any other value is rejected with a 400. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint annotations, the description adds crucial behavioral detail: pinned posts are returned in a separate 'pinned' field, not repeated in 'tweets', so naive iteration silently loses them. It also warns that ranking_mode is an upstream parameter and that 'Relevance' is not confirmed live, which goes far beyond the schema and 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 longer than average, but every sentence carries essential information: response shape, pinned-post pitfall, flat-list construction, ranking_mode semantics, and the alternative tool. The most important answer of 'what does this return and how do I handle it' 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?
With no output schema, the description adequately defines the key response structure: the top-level 'pinned' field plus the 'tweets' array, and explains how to combine them without duplication. It also covers pagination, sorting caveats, and the principal alternative, so the agent has enough context to invoke and process results correctly.
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 already has rich descriptions for all four parameters, so the description does not need to repeat them. It still adds meaningful parameter context by explaining that ranking_mode is a real upstream request parameter and cautioning that only 'Recency' is confirmed against a live capture, which helps the agent make safer invocation decisions.
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?
Starts by explicitly saying 'Read an X Community's own post timeline', which identifies the action, resource, and scope. It also distinguishes itself from search tools by emphasizing it returns the community's own feed, not cross-community results.
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?
Directly provides the alternative: 'Use twitter_advanced_search instead when the search should span all of X rather than one community.' This gives the agent a clear when-to-use versus when-not-to-use rule and explicitly names the sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_create_tweetA
Post a new tweet AS your authenticated account. Set reply_to to post a reply, or quote to post a quote-tweet. This publishes publicly and is not silently reversible (use twitter_delete_tweet to remove it). Requires an authenticated session with write capability behind your key. Returns the new tweet_id and url.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| text | Yes | The tweet body text (1 to 280 characters, or longer if the account has extended limits). | |
| quote | No | Optional. Numeric id of the tweet to quote. When set, this tweet quote-tweets that tweet. | |
| reply_to | No | Optional. Numeric id of the tweet to reply to. When set, this tweet is posted as a reply in that conversation. | |
| media_ids | No | Optional. Comma-separated media id(s) from a prior media upload to attach (images/video). | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds beyond annotations by stating the tweet is public and 'not silently reversible', and points to an alternative for deletion. This gives the agent important side-effect information not captured in boolean hints.
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 concise sentences cover purpose, usage, prerequisites, side effects, and return value without redundancy. Highly efficient and well-structured.
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?
Covers prerequisites, public nature, non-reversibility, and return value, which is sufficient given no output schema. Does not mention error handling or edge cases, but those are often not expected in tool descriptions.
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 already describes all parameters in full detail. The description adds a small clarification on reply_to and quote usage, but does not significantly enhance parameter understanding beyond the schema's own 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?
Clearly states the action: 'Post a new tweet' with the resource being the user's account. It distinguishes from siblings by mentioning reply/quote functionality and points to twitter_delete_tweet for reversal, differentiating it from other tweet actions.
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 explicit usage scenarios (post, reply, quote) and prerequisites (authenticated session with write capability). Does not explicitly state when not to use, but the context is clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_customer_sessionA
Register YOUR OWN X account session against your API key, so the authenticated-account tools (twitter_home_timeline, twitter_bookmarks, twitter_dm_list, twitter_dm_conversation, twitter_user_likes, twitter_article_list) and the write tools (twitter_create_tweet, twitter_dm_send, twitter_follow_user, twitter_favorite_tweet, twitter_retweet, twitter_media_upload, twitter_article_create, twitter_article_update_title, twitter_article_update_content, twitter_article_publish, twitter_article_unpublish, twitter_article_delete) act as your account. Provide your x.com session cookies auth_token and ct0 (copy them from a logged-in browser); optionally a user_agent and a residential proxy_url. The cookies are stored server-side against your key and are never returned. Returns ok, the resolved username, and whether the session validated live. Prefer twitter_user_login if you would rather pass a username/password than raw cookies. Most tools also accept auth_token/ct0 per-call without registering.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | Yes | Your x.com ct0 (CSRF) cookie value, from the same browser session. Paired with auth_token. | |
| proxy_url | No | Optional. HTTP or SOCKS proxy URL to route this session's traffic through, e.g. 'http://user:pass@host:port'. | |
| auth_token | Yes | Your x.com auth_token cookie value, from a logged-in browser session. Stored server-side against your key; never returned. | |
| user_agent | No | Optional. Browser User-Agent to send with this session's requests. Defaults to a current Chrome UA. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations: it states cookies are stored server-side, never returned, and that the tool returns ok, resolved username, and validation status. This addresses security (sensitive data handling) and validation behavior, which is highly valuable given the write-capable scope. Annotations only state non-readOnly and non-destructive, so the description adds critical context 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?
The description is a single paragraph but information-dense, listing tool names and options clearly. It front-loads the primary purpose and security note, though the long list of tool names could be abbreviated for brevity. It is slightly long but each part contributes to usage clarity.
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 complexity (authentication setup, side effects), the schema covers all parameters, and the description explains the registration flow, storage, return values, and alternatives. Without an output schema, it still conveys what the agent can expect (ok, username, validation). It is complete for an authentication setup tool with this level of detail.
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 has 100% coverage, with each parameter described (auth_token, ct0, proxy_url, user_agent). The description adds context by mentioning that cookies are paired and that proxy_url is for residential proxies, but these details are largely redundant with the schema. Since the schema fully explains the parameters, the description adds minimal extra meaning, matching the baseline of 3.
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 registers the user's own X account session via cookies against an API key, distinguishing it from alternatives like twitter_user_login. It explicitly lists the affected authenticated and write tools, making the purpose and resource clear. It loses one point because the main verb 'register' is implied rather than explicitly stated, and the title already conveys similar meaning.
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 says when to use this tool ('Register YOUR OWN X account session') and contrasts with twitter_user_login for username/password, and notes per-call cookie alternatives for most tools. This provides clear guidance on alternatives and exclusions, which is exemplary. It also outlines optional parameters like proxy_url and user_agent for advanced use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_customer_session_deleteA
Revoke the X account session you registered with twitter_customer_session, deleting the stored auth_token and ct0 from twitterapis.com. Self-serve, no ticket and no human in the loop. Scoped to your own API key by construction: it takes no account identifier of any kind, so it cannot reach another key's session. Idempotent and free: revoking twice, or revoking when nothing was stored, still returns ok with deleted=false, and it costs no credits, so a key that is out of balance can still delete its credentials. After this, the authenticated-account tools (twitter_home_timeline, twitter_bookmarks, twitter_dm_list, twitter_dm_conversation, twitter_user_likes) and the write tools stop acting as that account until you register again. IMPORTANT: this deletes the stored copy only. It does NOT log the account out of x.com, so to invalidate the cookies themselves, also revoke the session from your X account settings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=false, destructiveHint=false, openWorldHint=true). The description adds crucial transparency: idempotency (revoking twice returns ok with deleted=false), zero cost (works even out of balance), self-serve nature, scoping to own API key, and the limitation about not logging out of X. This goes beyond structured fields and does not contradict 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 detailed but every sentence serves a purpose: action, result, side effects, and external behavior. It is well-structured with a clear front-loaded main statement. Slightly verbose due to the need to explain idempotency and external effects, but this is justified for a delete operation. Not overly long for the 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 the complexity of a session-deletion tool with side effects on other tools and external X account, the description covers all needed aspects: return behavior, cost, scope, idempotency, and the limitation regarding x.com cookies. The absence of an output schema is compensated by describing what the response looks like (deleted=false). This is complete for an agent to understand the full ramifications.
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 tool has zero parameters, and schema description coverage is 100%. The description explicitly states 'it takes no account identifier of any kind' and explains why, which adds semantic meaning about the absence of parameters beyond the schema. This is valuable for an agent to understand that no input is needed and why.
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 revokes an X account session and deletes stored credentials. It distinguishes from siblings like twitter_customer_session (which creates sessions) by explicitly mentioning it is the reverse operation. The verb 'revoke' is specific and the resource is well-defined.
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 explicit when-to-use: after registering with twitter_customer_session. It also tells when not to rely solely on this tool (does not log out of x.com) and suggests additional action. The effect on other authenticated tools is clearly explained, making usage context unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_customer_session_statusARead-only
Read back the X account session you registered with twitter_customer_session, without changing it. Returns registered (false if you never registered one), the resolved username and twitter_user_id the session actually maps to, status ('ok', or 'dead' once X has rejected the cookies), created_at, updated_at, last_used_at, and an egress block: source (one of session, sticky_residential, pool_residential, direct), customer_proxy_in_use (true when the proxy_url you registered is the one your writes leave from), and a note explaining that tier. Never returns auth_token, ct0, or any proxy URL. Use it to answer 'am I posting as the account I think I am', 'has my session expired', and 'is the proxy I supplied actually being used' without opening a support ticket. Free, and scoped to your own API key by construction: it takes no account identifier of any kind, so it cannot read another key's session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only/non-destructive, and the description goes well beyond that: it enumerates the returned fields, discloses the security posture (never returns auth_token, ct0, or proxy URLs), states cost ('Free'), and explains scoping by construction ('takes no account identifier of any kind, so it cannot read another key's session'). This is exactly the extra behavioral context annotations cannot carry.
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?
Front-loaded with the core action, then return fields, then use cases; every clause carries information. It is dense and delivered as one long run-on paragraph rather than being broken into scannable chunks, which slightly hurts structure but not substance.
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?
There is no output schema, so the description carries the full burden of describing the response — and it does, enumerating every field, the enum-ish values for status and egress.source, and what is deliberately withheld. Nothing an agent needs to call it correctly is missing.
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?
Zero parameters, so the baseline is 4. The description earns that by explaining the absence functionally — no account identifier of any kind, scoped to the caller's own API key — which tells the agent the empty schema is intentional rather than an omission.
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?
States a specific verb and resource ('Read back the X account session you registered with') and immediately demarcates it from the sibling twitter_customer_session ('without changing it'). An agent can tell this apart from twitter_customer_session, twitter_customer_session_delete, and twitter_account_me without opening any schema.
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?
Gives concrete use cases ('am I posting as the account I think I am', 'has my session expired', 'is the proxy I supplied actually being used') and contrasts with the registration sibling, so context is clear. It stops short of an explicit when-not-to-use statement (e.g. use twitter_customer_session to register, this to inspect), leaving that routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_delete_tweetADestructive
Delete a tweet AS your authenticated account. Irreversible: the tweet is permanently removed. You can only delete tweets your authenticated account authored. Provide the tweet id or url. Requires write capability behind your key.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Tweet/post numeric id (e.g. "1789012345678901234"). Provide exactly one of id or url. | |
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| url | No | Full tweet URL, e.g. "https://x.com/elonmusk/status/1789012345678901234". Provide exactly one of id or url. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by explicitly stating the tweet is 'permanently removed' (irreversible), reinforcing destructiveHint. It also discloses that only self-authored tweets can be deleted and that write capability is required, which are not present in the annotations. This adds critical context for safe invocation.
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 three concise sentences, each adding value: the action, the irreversible consequence, and the author restriction. No fluff or redundant information. It is front-loaded with the primary purpose and gets straight to the point.
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?
With a simple deletion tool and rich schema annotations, the description covers essential behavioral aspects: irreversibility, author scope, and authentication requirement. It does not explain error cases or post-delete behavior, but given the lack of output schema and the simplicity, it is sufficiently complete. Missing details like proxy usage are already in the 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 each parameter is already well-documented in the schema. The description only reiterates that id or url must be provided ('Provide the tweet id or url'), which matches the schema's mutual-exclusivity note. It adds no new parameter-level semantics beyond what the schema provides.
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: 'Delete a tweet AS your authenticated account.' It specifies the verb (delete) and resource (tweet), and distinguishes from siblings like twitter_unfavorite_tweet or twitter_unretweet by focusing on permanent deletion. The irreversibility and author restriction add precision.
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 clear usage context: you can only delete tweets your own account authored, and it requires write capability. It instructs to provide the tweet id or URL. However, it does not explicitly compare to alternative tools (e.g., unfavorite or unbookmark), though the destructive nature makes it distinct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_dm_conversationARead-only
Get the messages in one Direct Message conversation by its conversation_id (from twitter_dm_list). Requires an authenticated session behind your key. Returns each message with sender id, time, and text. Read-only: this does not send DMs.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. | |
| conversation_id | Yes | The conversation_id from a twitter_dm_list entry identifying which DM thread to read. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds that authentication is required and reinforces the read-only nature, which is consistent and adds 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?
Three sentences with no redundancy. The main action is stated first, followed by requirements and read-only declaration. All sentences contribute essential 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?
Despite lacking an output schema, the description specifies what is returned ('each message with sender id, time, and text'). It covers the key parameter and requirement. It could mention error handling, but is complete enough for a simple read 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 detailed parameter descriptions. The description adds value by explaining that conversation_id comes from a sibling tool, which aids in selection. Baseline is 3 due to high coverage, but the cross-reference earns a 4.
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 messages') and the resource ('Direct Message conversation'), and references the source of the identifier ('from twitter_dm_list'). This distinguishes it from other 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?
It specifies a requirement ('Requires an authenticated session') and declares the tool is read-only ('does not send DMs'). However, it does not explicitly state when to use or not use this tool vs. alternatives, though the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_dm_listARead-only
List YOUR authenticated account's Direct Message conversations (inbox), each with the participant and a conversation_id you can pass to twitter_dm_conversation. Requires an authenticated session behind your key. Read-only: this does not send DMs.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description reinforces with 'Read-only: this does not send DMs' and adds authentication requirement, which is useful beyond 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, concise and front-loaded. Every sentence adds value: first states purpose and output, second clarifies read-only nature and prerequisite.
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 list tool with annotations, description is complete: states what it returns (participant and conversation_id), usage context, and connection to sibling tool. No output schema needed.
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 adds no extra meaning beyond what schema provides for the 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?
Description states it lists your authenticated account's DM conversations (inbox), providing participant and conversation_id. It distinguishes from sibling twitter_dm_conversation by mentioning the conversation_id can be passed to that tool.
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?
Includes prerequisite: requires an authenticated session behind your key. Does not explicitly state when not to use, but the context is clear for listing DMs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_dm_sendA
Send a Direct Message AS your authenticated account. Provide the recipient's numeric user id (recipient_id, resolve a @handle with twitter_user_info first) and the message text. Requires an authenticated session with write capability behind your key; X soft-blocks writes from datacenter IPs, so route through a residential proxy_url for reliability. Returns message_id and conversation_id. Delivers a real DM and is not silently reversible.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| text | Yes | The Direct Message body text to send (non-empty). | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. | |
| recipient_id | Yes | Numeric Twitter/X user id of the recipient (e.g. '44196397'). Resolve a @handle to its id with twitter_user_info first. The recipient must allow DMs from you. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it sends a real, non-silently reversible DM, which goes beyond the readOnlyHint=false annotation. It also reveals the need for residential proxy to avoid IP-based blocks, and notes that it returns message_id and conversation_id. No contradictions with annotations; adds actionable 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?
The description is a single, information-dense sentence that front-loads the primary action. Every clause serves a purpose: action, destination, prerequisite, proxy recommendation, return info, and irreversibility warning. No redundant fluff; well-structured for quick agent comprehension.
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 write operation with auth and proxy requirements, the description covers all critical aspects: authentication, IP restrictions, parameter handling, and irreversibility. It also specifies the return fields, compensating for the lack of an output schema. Given the tool's complexity, this is 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?
With 100% schema coverage, the baseline is 3, but the description enriches parameter meaning: it explains the necessity of numeric recipient_id and how to resolve handles, recommends proxy_url for reliability, and clarifies that text must be non-empty. These practical hints are not in the schema, adding significant value.
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: send a Direct Message as the authenticated account. It specifies the resource (DM) and distinguishes itself from sibling read tools like twitter_dm_list and twitter_dm_conversation. It also notes this is a real, irreversible action, setting it apart from other write 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?
Provides explicit directives: resolve recipient_id via twitter_user_info, require authenticated session with write capability, and recommend residential proxy for reliability due to X's soft-blocking of datacenter IPs. It effectively tells the agent when and how to use the tool, including prerequisites and alternatives for handle resolution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_favorite_tweetA
Like (favorite) a tweet AS your authenticated account. Provide the tweet id or url. Requires write capability behind your key. Reverse with twitter_unfavorite_tweet.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Tweet/post numeric id (e.g. "1789012345678901234"). Provide exactly one of id or url. | |
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| url | No | Full tweet URL, e.g. "https://x.com/elonmusk/status/1789012345678901234". Provide exactly one of id or url. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the action requires write capability and is performed on behalf of the authenticated account, going beyond the annotation (readOnlyHint: false). It does not mention potential failure cases or side effects, but for a simple like operation this is acceptable.
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 succinct, consisting of three short sentences that convey the action, input requirement, permission note, and reverse operation. No redundant information 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?
Given the simplicity of the action and complete schema descriptions, the description adequately covers the core behavior, permission needs, and relationship to the opposite action. It stops short of mentioning error conditions or response format, but that is not critical for a like 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?
The schema already provides detailed descriptions for all six parameters (100% coverage). The description adds a brief note to 'Provide the tweet id or url,' but this is already embedded in the schema. No significant additional parameter context is given.
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 the action: 'Like (favorite) a tweet AS your authenticated account.' It distinctly identifies the resource (tweet) and the operation (like), and differentiates from the sibling tool by mentioning the reverse operation (twitter_unfavorite_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?
Explicitly instructs to 'Provide the tweet id or url,' and notes the requirement for write capability. It also directs when to use the reverse tool, providing clear context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_feedback_getARead-only
Check the status of a feedback report this account sent earlier (the server id returned by twitter_feedback_send action "send"): status new, triaged, shipped or declined, the team's response text if any, and updated_at, which moves only when the team acts on it. Free per call. 404 if the id is not on this account.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The server id of a sent report, as returned by twitter_feedback_send action "send" (a UUID). Not a local draft id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, and non-destructive nature. The description adds substantial behavioral detail beyond that: the possible status values (new, triaged, shipped, declined), the presence of a team response text, the semantics of updated_at (moves only when the team acts), the cost (free per call), and the 404 error condition for ids not on the account.
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 front-loaded with the core action, then efficiently packs in return fields, cost, and error behavior. Every sentence earns its place, and there is no redundant or filler text.
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?
With no output schema, the description fully explains what is returned (status, response text, updated_at) and what happens on error. Given the low complexity and existing annotations, nothing an agent needs to call this tool correctly is missing.
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 the schema already describes the id parameter as the server id from twitter_feedback_send action 'send', not a local draft id. The description repeats this same information without adding further syntax or format details, 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 states a specific verb (Check) and resource (status of a feedback report this account sent earlier), and distinguishes it from sibling feedback tools by referencing the send action. An agent can immediately tell this is for retrieving a single report's status, not sending or listing.
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 gives clear context: use the server id returned by twitter_feedback_send action 'send' and call it to check status of a previously sent report. It also notes 'Free per call' and a 404 condition. However, it does not explicitly name alternatives like twitter_feedback_list or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_feedback_listARead-only
List the feedback reports this account has already SENT to twitterapis.com, newest first. Use it when the user asks what they have reported, or to find the server id of an earlier report so twitter_feedback_get can read its full status. NOT the same as twitter_feedback_send action "list", which shows local drafts that have not been sent yet. Each item carries id, type, title, area, status (new, triaged, shipped or declined), the team's response if any, created_at and updated_at, and never details or evidence, so paging this can never bulk-export a report's body: read one by id with twitter_feedback_get for that. Page with cursor while next_cursor is non-null. Free per call, and shares a 10-per-minute limit with the other feedback tools.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Optional. Return only reports of this kind. Anything else is rejected with 400 naming type. | |
| limit | No | Max reports to return, 1 to 100. Defaults to 25. Anything outside that range is rejected with 400 naming limit. | |
| cursor | No | Opaque continuation token from a previous response's next_cursor. Omit it to start from the newest report. A cursor that cannot be decoded is a 400 naming cursor, never a silently empty page. | |
| status | No | Optional. Return only reports in this state. Anything else is rejected with 400 naming status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, destructiveHint=false, openWorldHint=true), the description discloses output fields, the deliberate omission of details/evidence, pagination via cursor and next_cursor, and a shared 10-per-minute rate limit. These are important operational traits not captured by the structured metadata.
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 definition is front-loaded with purpose and then efficiently layers usage, sibling distinction, output caveats, pagination, and rate limits. Despite its length, every sentence adds necessary context for this tool, and there is no redundant filler.
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?
With no output schema, the description compensates by naming the returned fields and explicitly stating what is never returned. It also covers pagination, rate limits, and the alternative read path, making it complete enough for an agent to invoke and interpret 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 description coverage is 100%, so all four parameters (type, limit, cursor, status) are already well documented in the input schema. The description adds little parameter-level meaning beyond restating cursor paging and newest-first ordering; baseline 3 applies.
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 first sentence gives a specific verb (List), resource (feedback reports), scope (this account, already SENT), and ordering (newest first). It further distinguishes the tool from the similarly named twitter_feedback_send local-draft list and points to twitter_feedback_get for report bodies, so an agent can select it correctly.
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 explicitly states when to use it ('when the user asks what they have reported, or to find the server id of an earlier report') and names the contrasting alternative (twitter_feedback_send action 'list' shows local drafts). The routing to twitter_feedback_get for full status makes the boundary complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_feedback_sendA
Report a product problem or gap in twitterapis.com to its team from inside this session, the way Claude Code's own feedback tool works: a report is DRAFTED to a local queue first (action "draft", the default) and SENT only after the user reviews it. Drafting sends nothing, needs no confirmation, and should not be announced mid-task. WHEN TO DRAFT, only at high-signal moments: a twitterapis tool call failed with an error that was not a missing key (401), credits (402), no linked session (409) or a rate limit (429), and the user had to work around it; the user asked for something no twitterapis tool covers; a documented field came back empty or wrong; the user was clearly frustrated with a result. One draft per distinct issue, never twice for the same one. FORMAT for details, four labelled bullets in this order: 'What happened:' observed vs expected, exact error text if short. 'What the user said:' quoted verbatim, or 'user did not comment'. 'Repro:' the minimal call that reproduces it. 'Evidence:' tool name, endpoint, HTTP status, request id (the last failing call is attached automatically where you leave a gap). Facts only: no guessing, no API keys or secrets, no personal names. REVIEW: when the user asks to see or send feedback, call action "list", then action "send" with ONLY the draft ids the user named in their own message, or action "discard". Sending posts each draft to POST /feedback (free) and returns a server id that twitter_feedback_get can check later.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | For action "send" or "discard": the draft ids to act on, exactly as shown by action "list" and named by the user. | |
| area | No | Optional. The endpoint or feature the report is about, e.g. "tweet/thread" or "monitoring". At most 80 characters. | |
| type | No | Required for a draft. "bug": a tool or endpoint misbehaved. "idea": a change that would have made the task easier. "missing_capability": the user needed something no tool provides. | |
| title | No | Required for a draft. One specific line, at most 120 characters, naming the tool or endpoint and the defect, e.g. "twitter_tweet_thread returns 502 when the root tweet is deleted". | |
| action | No | What to do. "draft" (default) queues a new report locally and sends nothing. "list" shows the pending drafts with their ids. "send" posts the drafts named in ids to twitterapis.com; use it only for ids the user named. "discard" drops the drafts named in ids. | |
| details | No | Required for a draft. At most 8000 characters, four labelled bullets in order: What happened, What the user said (verbatim), Repro, Evidence. | |
| evidence | No | Optional identifiers only, never payloads: {tool, endpoint, status, request_id}. Whatever you leave out is filled from the last failing call in this session; mcp_version and client are always attached. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, destructiveHint=false, openWorldHint=true. The description adds substantial context beyond that: drafting sends nothing and needs no confirmation, must not be announced mid-task, sending posts each draft to POST /feedback, and returns a server id retrievable via twitter_feedback_get. No contradiction with 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?
Long but information-dense and front-loaded: purpose first, then labelled WHEN TO DRAFT, FORMAT and REVIEW sections. Nearly every sentence carries a rule or constraint, though the volume is near the upper bound for a tool description.
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, and the description compensates by stating what each action returns (queued draft locally, listed draft ids, a server id from POST /feedback). For a 7-parameter, nested-object, 4-action tool this is 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 the baseline is 3. The description nonetheless adds real meaning: the four-bullet 'details' format, the facts-only constraint (no secrets/names), the auto-attachment of the last failing call where evidence is left blank, and the requirement that 'ids' match what list showed and the user named.
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?
States a specific verb+resource: report a product problem or gap in twitterapis.com to its team, from inside the session. It also disambiguates its own multi-action nature (draft/list/send/discard) despite the 'send' name, and distinguishes itself from sibling tools like twitter_feedback_get and twitter_feedback_list by role.
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 enumerates when to draft (failed call not caused by 401/402/409/429, uncovered request, empty/wrong documented field, user frustration), enforces one-draft-per-issue, and defines the review path: list, then send only ids the user named, or discard. This is when/when-not/alternatives in full.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_followers_you_knowARead-only
List the 'Followers you know' for a target user id: the followers of that account that YOUR authenticated account also follows (mutual-connection overlap). Requires an authenticated session behind your key. Returns profile data per overlap account plus a cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| user_id | Yes | Numeric user id of the target account to compute shared followers against. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral context the annotations do not: it requires an authenticated session behind the key and discloses the return shape (profile data per overlap account plus a cursor).
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 tight sentences: the first front-loads the operation and its precise semantics, the second covers the auth prerequisite and return values. No filler or repetition of the name.
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?
Covers purpose, auth prerequisite, and return payload, which is sufficient given a 100%-covered schema and no output schema. A mention of practical pagination behavior would complete it, but nothing essential for correct invocation is missing.
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 the schema already fully documents user_id, cursor, count, and the auth/cookie parameters. The description only restates the target user_id and cursor conceptually without adding syntax or format detail, 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?
States a specific verb+resource ('List the Followers you know for a target user id') and immediately defines the exact semantic scope: mutual-connection overlap between the target's followers and the caller's own follows. This distinguishes it from the many sibling follower tools such as twitter_user_followers and twitter_user_following.
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?
Gives clear context: requires an authenticated session behind your key, and the target user id is the input. It does not name an explicit alternative (e.g. twitter_check_follow_relationship) or state when-not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_follow_userA
Follow a user AS your authenticated account, by numeric user_id. Requires write capability behind your key. Reverse with twitter_unfollow_user.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| user_id | Yes | Numeric user id of the account to follow. Resolve a handle to a user_id first with twitter_user_info. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so the write nature is known. The description adds important behavioral context beyond those booleans: the action is performed AS the authenticated account and specifically requires write capability. It does not contradict annotations, and mentions the reversible counterpart. Some side-effect detail (e.g., rate limits or failure semantics) is absent, but annotations lower the burden.
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 deliver the core purpose, authentication requirement, and reverse-tool pointer without wasted words. The most critical information is front-loaded in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write operation with no output schema, the description covers what it does, how to authenticate, the required format of user_id, and the reverse operation. The schema fully documents all parameters, and annotations cover the safety profile. Minor gaps like expected response or failure behavior are not severe given the tool's simplicity.
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 the baseline is 3. The main description adds meaningful guidance for the key user_id parameter ('Resolve a handle to a user_id first with twitter_user_info') and reinforces the auth-token pairing context visible in the schema. This extra semantic hint justifies a 4.
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 ('Follow') plus a clear resource ('a user AS your authenticated account, by numeric user_id'), making the action unambiguous. It also distinguishes itself from the sibling tool twitter_unfollow_user by explicitly naming the reverse operation.
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 states a key prerequisite ('Requires write capability behind your key') and points to the alternative for reversing the action ('Reverse with twitter_unfollow_user'). It does not exhaustively enumerate when to use this vs. relationship-checking tools, but the context is clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_grok_chatA
Ask X's own Grok a question AS your authenticated account, and get ONE complete JSON reply with the answer plus the sources it cited. Unlike a general LLM, Grok reads X in real time, so it can answer about what is being said right now, and passing a bare tweet or status URL as the message returns a structured summary of that post. Returns answer text, citations (url, title, snippet) merged and de-duplicated across every search Grok ran, the searches themselves, and the model that ACTUALLY answered (which can differ from the one you asked for). Buffered, not streamed. STATELESS: nothing is stored, so to continue a conversation pass the prior turns back in messages[] along with conversation_id. Requires an authenticated session for the acting account.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| mode | No | Which Grok to use: 'auto' (default, balanced), 'fast' (quicker, less thorough) or 'expert' (slowest, most thorough). The response reports the model that actually answered, which can differ from the mode requested. | |
| message | No | The prompt, for a single-turn question. A bare tweet or status URL is a first-class input and comes back as a summary of that post. Provide either this or messages[]. | |
| messages | No | Prior turns for a multi-turn conversation, oldest first, each { role: 'user' | 'grok', content: '...' }. The endpoint stores nothing, so the full history you want Grok to see must travel in this array. Provide either this or message. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. | |
| image_count | No | How many images Grok may generate if the prompt calls for one. Defaults to the value X's own client sends. Set 0 for a text-only answer. | |
| conversation_id | No | Conversation id returned by a previous call. Omit on the first turn and one is created for you. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description candidly discloses that the tool is stateless, buffered not streamed, requires session auth, and may return a model different from the one requested. It also clarifies that citations are merged/de-duplicated and that full conversation history must be re-sent. This is rich behavioral transparency.
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 front-loaded with the purpose and remains information-dense without padding. Each sentence gives genuinely new context: realtime Grok behavior, output shape, statelessness, and auth requirements. The formatting with clear term emphasis helps an agent parse key constraints quickly.
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 complex tool with 9 optional parameters and no output schema, this description covers the needed operational context: what returns, how citations are merged, how conversation continuity works, proxy/authentication concerns, and how turns are affected by mode. This is sufficient for an agent to invoke it with reasonable expectations.
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 the baseline is already well served. The description adds useful semantics not obvious from the schema, such as treating a bare status URL as a first-class message for post summaries and showing that auth_token is never placed in the URL. Those details are not in the parameter names alone.
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 a specific action and resource: ask X's own Grok a question AS an authenticated account. It also describes the key output (single JSON reply with answer and citations) and the bare-tweet-URL summary use case, distinguishing it from the many other tweet/user/social-graph tools in the sibling list.
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 explains when this is uniquely useful, namely for questions about what is being said on X in real time, and that a bare status URL produces a structured post summary. It does not name sibling tools as alternatives or state explicit when-not-to-use cases, but the realtime Grok framing gives solid practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_grok_configARead-only
Check whether the authenticated account can use Grok, and which models it may pick. Returns eligibility, X's own reasons when it is NOT eligible (passed through verbatim, since we cannot know X's policy), whether free access is enabled, and the available model options. Eligibility is a property of the X ACCOUNT rather than of the API key, so ask this about the same account you intend to run twitter_grok_chat as. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond the annotations. It explains what the tool returns (eligibility, X's verbatim reasons when not eligible, free access status, model options) and explicitly states that eligibility is a property of the X account, not the API key. It also includes the 'Free' note, which is non-obvious. Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to repeat safety traits; it adds valuable return and account-dependency information.
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 and well-structured. It opens with the primary purpose, then lists what it returns, adds a key caveat about account vs. API key, and ends with 'Free.' Every sentence earns its place, with no superfluous content. It is front-loaded and easy to scan.
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 read-only configuration check with no output schema, the description is sufficiently complete. It covers the purpose, return contents, the account dependency, and cost. It does not mention error handling or authentication details, but the mention of 'authenticated account' and 'Free' implies the necessary context. Given the tool's simplicity and the rich schema annotations, it is adequately 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 description coverage is 100%, as each of the four parameters has a detailed description. The tool description itself does not elaborate on parameter usage, but it does hint at the account-based nature (auth_token and ct0) indirectly. With full schema coverage, the description adds minimal extra over the schema, 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 tool checks whether the authenticated account can use Grok and which models are available. It specifies the resource (Grok) and the action (check eligibility and models), and it distinguishes itself from the sibling twitter_grok_chat by focusing on configuration and eligibility rather than chat. The description also clarifies the account-based nature of eligibility, which is a specific and unique purpose.
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 directs usage: 'ask this about the same account you intend to run twitter_grok_chat as.' This provides clear guidance on when to use the tool (before using Grok chat) and ties it to the specific account. It also notes that the tool is 'Free,' which is a practical usage consideration. While it does not list exclusions, the instruction is specific and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_home_timelineARead-only
Get YOUR authenticated account's Home timeline (the 'Following'/'For you' feed), most recent first. Requires an authenticated session behind your key. Returns tweets with author and metrics plus a cursor. Use this to read what your account would see when it opens X.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/no-destructive, so the safety profile is covered. The description adds value the annotations don't: the authenticated-session requirement and the return shape ('tweets with author and metrics plus a cursor'), which matters since there is no output 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?
Three tight sentences, front-loaded with the scope and output. The closing sentence ('read what your account would see when it opens X') restates the first sentence's intent and could be trimmed without loss.
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?
Covers everything an agent needs for a read-only, no-required-param call: scope, auth prerequisite, ordering ('most recent first'), return contents and pagination signal, with annotations handling the safety profile.
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% and each parameter (ct0, auth_token, count, cursor, proxy_url, user_agent) is fully documented in the schema, so the baseline is 3. The description gestures at the auth requirement but adds no syntax or usage detail beyond what the schema already states.
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?
States a specific verb+resource ('Get YOUR authenticated account's Home timeline') and scopes it to the caller's own feed, which separates it from lookalikes such as twitter_list_timeline or twitter_user_tweets. The parenthetical frame ('the Following/For you feed') removes ambiguity about which timeline is meant.
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?
Gives clear context ('read what your account would see when it opens X') and a prerequisite (an authenticated session behind your key). It does not name an explicit alternative for scenarios such as reading a list's timeline or another user's feed, so exclusions are left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_list_add_memberA
Add one account to a Twitter/X List that YOUR registered X session owns, by numeric list id and numeric user id. Use it to curate a List from code, for example adding each speaker at a conference to a List as they are announced. Returns ok, action, list_id, user_id, the List's member_count read back from X after the write, and the full list object. Read member_count to confirm the change landed: it is null when X returned no list object at all, which is itself the not-applied signal. A write that does not apply (the account is already a member, the List is not yours) comes back with the SAME field layout plus a 422 and a machine-readable reason, and is not billed. Reverse with twitter_list_remove_member.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| list_id | Yes | Numeric id of the List you own. Found in the list URL: x.com/i/lists/<list_id>. | |
| user_id | Yes | Numeric user id of the account to add. Resolve a handle to a user_id first with twitter_user_info. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Exceptionally rich behavioral disclosure beyond the annotations: exact return fields, the member_count null-as-not-applied signal, the 422-with-identical-field-layout behavior for failed writes, and a 'not billed' note for non-applied writes. The description does not contradict readOnlyHint=false or openWorldHint=true; rather, it complements them with operational detail that annotations cannot convey.
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?
Dense single paragraph with zero filler — every sentence carries meaning (purpose, example, response format, edge-case signal, reversal). It's on the longer side and slightly run-on in the middle sentence, but the information density justifies the length. A touch of formatting (e.g., separating the reversal note) would make it perfect.
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 side-effect-heavy mutation with no output schema, the description is remarkably complete: full return value list, a concrete confirmation pattern (read member_count), explicit failure modes (already a member, not your list), status code (422), and billing implications. No output schema exists, so explaining the return shape in prose is exactly what's needed and it does so thoroughly.
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 baseline is 3; the description adds value by clarifying both IDs are numeric and connecting them to the write action. The schema descriptions themselves are strong (URL format for list_id, cross-reference to twitter_user_info for user_id resolution, proxy recommendation for writes). Slight deduction for the description text not adding much beyond 'numeric' since the schema already documents each parameter thoroughly.
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+resource pair ('Add one account to a Twitter/X List') and clarifies scope with 'that YOUR registered X session owns' and 'by numeric list id and numeric user id'. It clearly differentiates from the sibling twitter_list_remove_member by naming it as the reverse operation, and the ownership constraint distinguishes it from list-reading 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?
Provides a concrete use case ('adding each speaker at a conference to a List as they are announced') and explicitly names twitter_list_remove_member for reversal. The ownership prerequisite is stated upfront. Loses a point because it doesn't explicitly enumerate when NOT to use it relative to other write tools (e.g., twitter_create_list), though the reverse tool reference helps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_list_createA
Create a new Twitter/X List owned by YOUR registered X session, with a name and an optional description and privacy flag. This is the starting point for building a List from code: create it here, then fill it with twitter_list_add_member using the list id this returns. Returns ok, action, the new list_id, member_count, and the full list object X returned. A List is PUBLIC unless you explicitly ask for a private one, and a private List is not readable by the public List read tools (twitter_list_members, twitter_list_tweets, twitter_list_timeline).
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| name | Yes | Display name for the new List, e.g. "Founders". Required; an empty or whitespace-only name is rejected with a 400. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| is_private | No | Optional. Pass the string "true" to create a PRIVATE List. Defaults to false (public), because a public List can be made private later while a leak cannot be undone. Note a private List is not readable by the public List read tools. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. | |
| description | No | Optional. Description shown on the List, e.g. "People building in public". Defaults to empty. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly=false, destructive=false), the description discloses that the operation creates a resource, returns a list id, and explains the public/private visibility semantics. This adds meaningful behavioral detail not implied by the annotations alone.
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 informative but slightly verbose, repeating 'registered X session' and including detailed return values. However, it is well-structured and free of fluff, earning a score above average.
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, usage flow, return values (list_id, member_count, full list object), and privacy behavior. Given the lack of an output schema, it sufficiently explains what to expect from the call, making the context 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?
The input schema already provides 100% coverage for all 7 parameters with clear descriptions (e.g., ct0, proxy_url, is_private). The tool description does not add extra parameter guidance, but since schema coverage is high, 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 tool creates a new Twitter/X List and distinguishes it from related tools like twitter_list_add_member by positioning it as the initial step. The verb 'create' is specific and the resource is unambiguous.
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 explicitly instructs when to use it ('starting point for building a List') and how to chain it with twitter_list_add_member using the returned list id. It also clarifies privacy defaults and implications, giving clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_list_followersARead-only
Fetch a public List's followers by its numeric id, cursor-paginated. Followers and members are different sets of people: members are the accounts the List owner added to it, followers are the accounts that subscribed to read it. A List with hundreds of members commonly has only a handful of followers, so a small count here is normal and is not a truncated page. Use twitter_list_members for the member roster instead.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Max items to return for this page. Defaults to 20 and is clamped to 1-100. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call. next_cursor is null once X marks the follower list complete. | |
| list_id | Yes | Numeric Twitter/X List id. Found in the list URL: x.com/i/lists/<list_id>. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is known. The description adds valuable behavioral context: it notes cursor-paginated nature and clarifies that a small follower count is normal and not a truncated page. This goes beyond the annotations without contradicting them.
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 three sentences, tightly written. It opens with the core action, then adds differentiating clarity and a usage hint. No filler or redundancy.
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 read-only, open-world tool with three well-documented parameters and no output schema, the description covers the essential aspects: what it returns, how pagination works, and a critical distinction from a sibling tool. It could mention the expected response structure, but given the simplicity and the absence of an output schema, it is adequately 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 each parameter already has a clear description (count, cursor, list_id). The tool description itself adds little beyond mentioning 'cursor-paginated' and the normality of small counts, which slightly reinforces the count/cursor semantics but does not materially enhance what the schema provides. 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 verb 'Fetch' and the resource 'public List's followers' by numeric id, and specifies cursor-pagination. It also explicitly distinguishes from twitter_list_members, which is a sibling tool, ensuring the agent picks the right one.
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 says to use twitter_list_members for the member roster instead, and explains the conceptual difference between followers and members. It also preempts confusion about small result counts, providing clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_list_membersARead-only
List the members of a Twitter/X List by its numeric list id. Returns profile data for each member. Paginate with cursor. Use this to enumerate curated account sets, including competitor lists, industry watchlists, or media outlet lists. The list_id appears in the X.com list URL (x.com/i/lists/).
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| list_id | Yes | Numeric Twitter/X List id. Found in the list URL: x.com/i/lists/<list_id>. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds useful context beyond that: it returns profile data per member and pagination proceeds via cursor. It does not, however, note rate limits or the upstream page-size cap that the schema documents.
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?
Front-loaded with the core action, then returns, pagination, use cases, and id location. Efficient overall, though the trailing sentence about the list_id URL is redundant with the schema's own description.
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 read-only listing tool with no output schema, the description supplies the return content (profile data per member) and pagination approach, which is the information an agent most needs. It is essentially complete, with only rate-limit/paging-depth caveats left to the 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 three parameters are fully documented in the schema, including the nuanced page-size cap and cursor mechanics. The description's only added detail, the list_id URL location, merely restates the schema, so baseline 3 applies.
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?
States a specific verb (List) and resource (members of a Twitter/X List) and identifies the keying parameter (numeric list id). It does not explicitly distinguish itself from close siblings such as twitter_list_followers or twitter_list_tweets, so the agent must infer the difference from names alone.
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 concrete when-to-use context: 'enumerate curated account sets, including competitor lists, industry watchlists, or media outlet lists.' This orients the agent toward the intended scenario but offers no when-not guidance or explicit routing to alternatives like twitter_list_followers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_list_remove_memberADestructive
Remove one account from a Twitter/X List that YOUR registered X session owns, by numeric list id and numeric user id. Use it to prune a curated List, for example dropping accounts that have gone quiet. Returns ok, action, list_id, user_id, the List's member_count read back from X after the write, and the full list object. Read member_count to confirm the removal landed: it is null when X returned no list object at all, which is itself the not-applied signal. A write that does not apply (the account was never a member, the List is not yours) comes back with the SAME field layout plus a 422 and a machine-readable reason, and is not billed. Reverse with twitter_list_add_member.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| list_id | Yes | Numeric id of the List you own. Found in the list URL: x.com/i/lists/<list_id>. | |
| user_id | Yes | Numeric user id of the account to remove. Resolve a handle to a user_id first with twitter_user_info. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint: false and destructiveHint: true, but the description goes further: it details the exact response fields, the meaning of null member_count (not-applied signal), and that non-applied writes return a 422 with a machine-readable reason and are not billed. This is rich behavioral context beyond 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 dense but a bit long (4 sentences) and dives into response details and error semantics. However, it is front-loaded with the core purpose and use case, and every sentence adds value (response interpretation, billing, reversal). Slightly over-specified but still 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?
For a mutation tool with no output schemalint, the description thoroughly covers purpose, response fields, success/failure signals, and billing behavior. It also notes proxy recommendation for writes (in schema) and provides a clear reversal path. Complete for the tool's 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?
Schema coverage is 100%, with each parameter already described (e.g., list_id and user_id include URL and resolution guidance). The description adds little beyond schema, but the description does mention the dependency on resolving handle to user_id via twitter_user_info, which is implied in schema; 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 (remove one account from a Twitter/X List), specifies the required identifiers (numeric list id and user id), and scopes the operation to 'YOUR registered X session owns' a list. It explicitly distinguishes from sibling twitter_list_add_member by naming the reverse operation.
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 provides a concrete use case ('prune a curated List, for example dropping accounts that have gone quiet') and explicitly mentions the reverse tool (twitter_list_add_member) for undoing. It also states when the write will not apply (account not a member, list not yours), giving clear guidance on alternative actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_list_timelineARead-only
Read a public Twitter/X List's NATIVE feed, the same posts and the same ordering the List shows on x.com, including members' retweets. It takes only list_id, count and cursor: no date range and no reply filter exist on this endpoint, because a native timeline cannot honour search operators. Use twitter_list_tweets when you need a date range or want replies filtered out, and accept that it drops retweets in exchange. Paginate with cursor until the tweets array comes back empty.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Max posts to return for this page. Defaults to 20 and is clamped to 1-100, so a larger number returns at most 100 rather than erroring. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call. | |
| list_id | Yes | Numeric Twitter/X List id. Found in the list URL: x.com/i/lists/<list_id>. The List must be public. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only and non-destructive behavior, so the description adds valuable context: native feed semantics, retweet inclusion, inability to honor search operators, and pagination ending when the tweets array is empty. This goes beyond what annotations and schema alone 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?
Every sentence earns its place: purpose, constraint, alternative comparison, and pagination stopping condition are each addressed once. The description is dense but well-organized and free of repetition.
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 self-sufficient for this tool: it communicates the data scope, ordering behavior, retweet inclusion, endpoint limitations, pagination signal, and the sibling tool to use for alternate needs. With provided annotations and a fully-documented schema, this is a complete picture.
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 the schema already documents list_id, count, and cursor. The description adds helpful high-level information about pagination and the absence of date/reply parameters, but it does not expand on individual parameter syntax, which keeps it at 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 opens with a clear verb and direct object: 'Read a public Twitter/X List's NATIVE feed.' It specifies the exact behavior (same posts and ordering as x.com, including retweets) and differentiates itself from twitter_list_tweets.
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 explicit decision guidance: use twitter_list_tweets when you need a date range or filtered replies, and accept that the alternative drops retweets. It also clearly states what this endpoint cannot do (no date range, no reply filter).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_list_tweetsARead-only
Read the posts written by the members of a public Twitter/X List, newest first, through X's search index. This is the FILTERABLE List feed: it accepts since and until date bounds and an include_replies toggle. It does NOT return retweets, and search-index lag applies, so a post made moments ago can be missing for a short while. Use twitter_list_timeline instead when you want the List exactly as X shows it, retweets and native ordering included, and accept that it takes no filters. Paginate with cursor. The list_id appears in the X.com list URL (x.com/i/lists/).
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Max posts to return for this page. Defaults to 20 and is clamped to 1-100, so a larger number returns at most 100 rather than erroring. | |
| since | No | Optional. Only posts on or after this date, as YYYY-MM-DD (e.g. "2026-08-01"). Any other format is rejected with a 400. | |
| until | No | Optional. Only posts BEFORE this date, as YYYY-MM-DD. EXCLUSIVE, matching X's own until: search operator, so a post made on the until date is not returned. Any other format is rejected with a 400. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call. | |
| list_id | Yes | Numeric Twitter/X List id. Found in the list URL: x.com/i/lists/<list_id>. The List must be public. | |
| product | No | Which search ranking to read. 'Latest' (default) is reverse-chronological. 'Top' is X's ranked ordering. Any unrecognised value falls back to Latest rather than erroring. | |
| include_replies | No | Optional. Whether to include replies written by List members. Pass the string "true" or "false"; defaults to true when omitted. Any other value is rejected with a 400 rather than read as false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false; the description builds on this with genuinely non-obvious behavior: search-index lag causing missing recent posts, no retweets returned, and the filterable nature. This goes beyond annotations without contradicting them. A small deduction for not addressing return-format or error behavior, though pagination via cursor is mentioned.
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?
Five dense, front-loaded sentences, each earning its place: purpose → key filters → limitations/lag → alternative tool → pagination and ID location. No filler, no redundancy, and the critical differentiator ('FILTERABLE List feed') is bolded and appears early.
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 read-only 7-param list tool with 100% schema coverage, the description covers purpose, alternates, caveats, pagination, and ID discovery. With no output schema, it might briefly note the pagination response shape, but 'Paginate with cursor' plus the rich schema largely compensate. Minor gap keeps it from a 5.
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 exceptionally detailed parameter descriptions (clamping behavior, exclusive until semantics, 400 on bad format, string 'true'/'false' for include_replies). The description adds the 'Paginate with cursor' directive but this is also implied by the cursor schema entry. Per calibration, high coverage makes 3 the correct baseline since the schema carries the load.
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?
Uses a specific verb+resource pairing ('Read the posts written by the members of a public Twitter/X List, newest first, through X's search index') that fully specifies scope, ordering, and mechanism. Explicitly differentiates from sibling twitter_list_timeline by contrast ('Use twitter_list_timeline instead when...').
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 names the alternative (twitter_list_timeline) and states exactly when to choose it over this tool ('when you want the List exactly as X shows it, retweets and native ordering included'), including the tradeoff ('accept that it takes no filters'). This is textbook when-to-use-vs-alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_media_statusARead-only
Check whether an uploaded media_id has finished processing on X, before you attach it to a tweet. Video, GIF and large uploads are processed ASYNCHRONOUSLY: twitter_media_upload returns a media_id immediately, but attaching it via twitter_create_tweet FAILS until X reports state 'succeeded'. Poll this until then. Returns media_id, state ('pending', 'in_progress', 'succeeded' or 'failed'), check_after_secs (how long X asks you to wait before polling again, honour it rather than tight-looping), progress_percent, and an error object when state is 'failed'. Reads through YOUR OWN registered account session, the same one that performed the upload, so register first with twitter_customer_session or twitter_user_login, or pass auth_token/ct0 for this call. This is a READ: no daily write cap applies.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| media_id | Yes | Numeric media id returned by twitter_media_upload, e.g. '1234567890123456789'. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations by mentioning it's a read operation with 'no daily write cap applies' and pointing out that it 'Reads through YOUR OWN registered session', implying authentication side effects. However, it does not detail potential latency or error conditions beyond the error object in the return.
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 moderately lengthy but each sentence contributes unique information: purpose, usage, return fields, auth, and read-only status. It is structured logically, though the final sentence about read-only nature is a bit redundant with the annotations. Overall, 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 the lack of an output schema, the description provides essential return fields (media_id, state, check_after_secs, progress_percent, error object). It covers purpose, usage timing, authentication, and read-only nature. It could be more detailed about error handling or potential failures, but it is sufficiently complete for an agent to use the tool correctly.
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 already provides descriptions for all parameters (media_id, ct0, proxy_url, auth_token, user_agent). The description only reiterates the auth_token/ct0 requirement and mentions media_id, without adding further detail about proxy_url or user_agent. It does mention the output parameter check_after_secs, but that is not an input parameter, so the added value is limited.
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 function: 'Check whether an uploaded media_id has finished processing' and distinguishes it from the upload tool by explaining the asynchronous nature. It uses specific verbs and provides a precise scope.
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 instructs when to use it: 'before you attach it to a tweet' and explains the polling behavior: 'Poll this until then'. It also gives a clear directive to honor check_after_secs to avoid tight-looping, which serves as practical usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_media_uploadA
Upload an image to X and get a media_id to attach to a tweet via twitter_create_tweet's media_ids. Provide media_data as base64-encoded image bytes. Acts as your registered account session (register first with twitter_customer_session or twitter_user_login, or pass auth_token/ct0 for this call). Returns ok and the media_id. Only base64 image data is supported over this tool's JSON transport.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| media_data | Yes | Base64-encoded image bytes to upload. Sent in the JSON request body. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already marking the tool as non-read-only and non-destructive, the description adds valuable context: it acts as the registered account session, supports only base64 image data over JSON transport, and returns ok and the media_id. This goes beyond the structured annotations without contradicting them.
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 four sentences with no filler. It front-loads the core action and return value, then provides essential auth and format constraints. Every sentence contributes distinct, useful 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 has 5 parameters, no output schema, and rich descriptions in the schema, the description covers the essential operational context: purpose, prerequisites, supported input format, and return shape. It could mention success/failure details or size limits, but it is sufficiently complete for an agent to invoke it correctly when paired with the 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 the baseline is 3. The description reinforces the meaning of media_data and the auth_token/ct0 pairing, but does not add substantial new parameter semantics beyond what the schema already documents. The return-value mention is useful but not parameter-specific.
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 opens with a specific verb and resource: 'Upload an image to X and get a media_id to attach to a tweet via twitter_create_tweet's media_ids.' This clearly states the tool's function and distinguishes it from read-only Twitter tools and the media_status sibling by emphasizing the upload-and-return-media_id flow.
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 clear usage context: it is for uploading images meant to be attached to tweets, it names the dependent tool (twitter_create_tweet), and it explains the required session setup ('register first with twitter_customer_session or twitter_user_login, or pass auth_token/ct0 for this call'). It does not explicitly list exclusions or alternative upload tools, but such alternatives are not evident among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_monitor_account_healthARead-only
Account-wide monitoring rollup in ONE call, distinct from twitter_monitor_health (which needs an id and reports one monitor's cursor): service status ('operational' or 'degraded'), active/paused/total counts across every monitor you own, and pending/delivered/failed delivery counts from the last 24 hours. Takes no arguments. A key with zero monitors gets zeroed counts back, never an error. Free per call.
| 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 and destructiveHint=false, but the description adds valuable behavioral details: it reports service status and counts, zero-monitor behavior returns zeroed counts, takes no arguments, and mentions 'Free per call.' 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?
The description is two sentences but packs a wealth of information: purpose, contrast with sibling, output details, edge case, and cost. It is front-loaded with the main purpose and remains concise without superfluous text.
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 fully explains the tool's scope, return values, time window, and edge-case behavior. Given the tool has no parameters and no output schema, this description is complete and highly informative.
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 tool has zero parameters, and the description explicitly states 'Takes no arguments.' Per the rubric, zero parameters merit a baseline of 4, and this is adequately handled.
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: 'Account-wide monitoring rollup in ONE call' and distinguishes it from sibling twitter_monitor_health by specifying that the sibling requires an id and reports per-monitor cursor data. It also enumerates the exact outputs: service status, active/paused/total counts, and delivery counts from the last 24 hours.
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 contrast with a specific alternative (twitter_monitor_health), giving clear context for when to use this rollup versus the per-monitor tool. It also notes the behavior for zero monitors ('A key with zero monitors gets zeroed counts back, never an error'), but does not include explicit 'when not to use' or other alternatives beyond the sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_monitor_createA
Start watching an X account for new posts. Every new post from that handle is HMAC-signed and delivered to your registered webhook(s) on a shared poll interval (see twitter_monitor_webhook_create to register a delivery URL first). Free: monitor creation is account administration, not a metered read. Returns the new monitor's id, plus its normalized handle, status, and poll_interval_ms.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | The X username to watch, without the leading @ (e.g. 'elonmusk'). | |
| webhook_ids | No | Optional. Comma-separated webhook id(s) from twitter_monitor_webhook_create to restrict this monitor's deliveries to. Omit to deliver to every active webhook on the account (the default). | |
| domain_filter | No | Optional. A bare hostname ('example.com') or a full URL ('https://example.com/blog') to restrict delivery to only the new posts that link to that host or a subdomain of it (e.g. 'example.com' matches both example.com and blog.example.com). Normalized server-side: lowercased, scheme/path/query/fragment/leading www./trailing :port stripped. Omit for no filter, the default (deliver every new post). Rejected with a 400 if what remains after normalization is not a valid hostname shape. A post with no matching link is filtered out of delivery, never silently dropped: it still advances the monitor's cursor and counts toward the account's tweets_domain_filtered health metric. | |
| include_replies | No | Optional boolean. true delivers the account's replies as well as its own posts, which is the default and what every monitor has always done; false holds replies back and delivers only the account's own posts. Must be a real boolean: the string "false" and the number 0 are rejected with a 400 rather than coerced, because coercing them would quietly give you the opposite of what you typed, and the wrong answer here is invisible since it looks exactly like the account not having posted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish openWorldHint=true, readOnlyHint=false, and destructiveHint=false; the description goes further by disclosing HMAC signing of deliveries, a shared poll interval, and the non-metered cost profile. It doesn't surface auth/permission requirements or rate limits, so it adds real value but not full behavior 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?
Three sentences, front-loaded with the core action and the prerequisite, followed by cost and return shape. Dense but every sentence carries information; the return-value list could arguably be trimmed given no output schema burden.
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?
With no output schema, the description usefully enumerates what is returned (id, normalized handle, status, poll_interval_ms) and covers the prerequisite and cost model. It is close to complete for this complexity level, missing only edge behavior on invalid handles or duplicate monitors.
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 the schema already documents handle, webhook_ids, domain_filter, and include_replies thoroughly. The description only names webhook_ids indirectly via the webhook sibling; it adds little parameter-level meaning beyond the schema, so the baseline 3 applies.
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?
States a specific verb and resource ('Start watching an X account for new posts') and distinguishes this write/administration tool from siblings like twitter_monitor_list and twitter_monitor_update. The delivery mechanism and returned fields are spelled out, so an agent knows exactly what this tool does.
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 names the prerequisite: register a delivery URL first via twitter_monitor_webhook_create. It also clarifies the cost model ('Free: monitor creation is account administration, not a metered read'). It stops short of stating when NOT to use it versus twitter_monitor_update, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_monitor_deleteADestructive
Stop and remove a monitor by id. Irreversible: create a new monitor with twitter_monitor_create if you want to watch that handle again. Delivery history referencing this monitor is retained, not cascade-deleted. Free per call.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The monitor's id, from twitter_monitor_create or twitter_monitor_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint, readOnlyHint), the description adds crucial behavioral context: 'Irreversible' clarifies the permanence, and 'Delivery history referencing this monitor is retained, not cascade-deleted' discloses the exact side-effect on related data. The 'Free per call' note also provides cost transparency. This meaningfully exceeds what annotations already convey.
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 three sentences, each serving a distinct purpose: action and irreversibility, alternative for future use, and retention of delivery history plus cost. It is tightly written, front-loaded with the core purpose, and contains zero filler.
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 delete operation, this description is complete. It covers the action, irreversibility, relevant side-effect (delivery history retention), and cost. With no output schema required and the schema fully documenting the parameter, there are no significant gaps.
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 already covers the sole parameter 'id' with a description ('The monitor's id, from twitter_monitor_create or twitter_monitor_list'), so the description does not need to add param semantics. The description references 'by id' but adds no new information beyond the schema. Baseline of 3 is appropriate given 100% 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's purpose with a specific verb ('Stop and remove') and resource ('a monitor by id'). It distinguishes itself from sibling tools by explicitly mentioning the irreversible nature and referring to twitter_monitor_create as the way to re-create a monitor, making it distinct from update/list/health.
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 clear guidance on when to use this tool (to stop and remove a monitor) and gives an explicit alternative for the same goal after deletion ('create a new monitor with twitter_monitor_create'). However, it does not mention when not to use it, such as if a temporary pause is needed (which might warrant twitter_monitor_update instead). This slightly limits the guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_monitor_deliveriesARead-only
List your most recent monitor delivery events across every monitor, most recent first: id, monitor_id, tweet_id, status, tweet_created_at, and the real measured latency (detected_lag_ms, from X's own post timestamp to enqueue; delivery_lag_ms, the separate queue-to-webhook-POST time; total_lag_ms). Free per call.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max delivery events to return, 1 to 200. Defaults to 50 when omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds genuine value by explaining the three-phase latency model (detected_lag from tweet post to enqueue, delivery_lag for queue-to-webhook, total_lag), revealing the underlying pipeline architecture that helps agents interpret results. 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?
Front-loaded with the action verb and resource, with a dense but justified parenthetical explaining the latency semantics. The trailing 'Free per call' is slightly odd and the single-sentence structure with semicolons is dense, but every element serves a purpose in about 50 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?
For a simple list tool with one optional parameter, zero required params, and strong annotations, the description covers exactly the non-obvious parts: the latency breakdown definitions and cross-monitor scope. Nothing material is left unexplained that schema or annotations don't already handle.
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% — the limit parameter is fully documented with range (1-200) and default (50). The description's field list provides result context but doesn't add parameter-level meaning beyond 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?
Specific verb+resource+scope: 'List your most recent monitor delivery events across every monitor, most recent first' with an explicit field list. Clearly distinguishes from siblings like twitter_monitor_webhook_list (webhook config) and twitter_monitor_list (monitors themselves) by scoping this to delivery events with latency metrics.
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?
'Across every monitor' and 'most recent first' establish clear scope and ordering. The explanation of the three latency fields signals when this tool is needed (latency diagnosis). However, there's no explicit when-not-to-use guidance or named alternatives as seen in the top-tier calibration example.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_monitor_healthARead-only
Read one monitor's current status, degradation flag, poll interval, possibly-missed-event count, and cursor position (last_tweet_id, last_poll_at), for building your own health dashboard. Free per call.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The monitor's id, from twitter_monitor_create or twitter_monitor_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description's 'Read' is consistent. It adds valuable context beyond annotations by noting the call is 'Free per call' and by listing the specific status fields returned, which helps the agent anticipate the response shape.
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?
A single, front-loaded sentence that immediately states the action and resource, then enumerates the returned fields and the dashboard use case. No filler or redundant content; each 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?
For a simple one-parameter read tool with no output schema, the description covers the return fields, purpose, and cost. It could mention error conditions or how the 'possibly-missed-event count' is computed, but the level of detail is adequate for an agent to select and call the tool correctly.
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% description coverage for the single 'id' parameter, including its provenance from twitter_monitor_create or twitter_monitor_list. The tool description itself adds no extra parameter detail, so the schema carries the semantic burden; baseline 3 applies.
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 ('Read') and identifies the exact resource ('one monitor's current status') plus enumerates the fields returned (degradation flag, poll interval, possibly-missed-event count, cursor position). It clearly differentiates from sibling tools like twitter_monitor_list (all monitors) and twitter_monitor_account_health (account-level health).
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 phrase 'for building your own health dashboard' provides a clear use case, and 'one monitor' signals this is for single-monitor checks rather than bulk listing. However, it does not explicitly mention alternatives or when not to use this tool, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_monitor_listARead-only
List every monitor on your account: id, subject (its from: query), kind, status ('active' or 'paused'), degraded flag, events_possibly_missed, webhook_ids restriction, and created_at. Takes no arguments.
| 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 and destructiveHint=false, and the description does not contradict them. It adds the fact that no arguments are accepted and enumerates returned fields, but it does not go beyond annotations with behavioral context like pagination, rate limits, or the semantics of 'degraded flag' or 'events_possibly_missed.'
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 the primary purpose front-loaded. The field enumeration is dense but directly useful for an agent selecting or invoking the tool, and there is no filler 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?
For a read-only list tool with no parameters, the description covers the action, output fields, and argument expectation well. However, terms like 'degraded flag,' 'events_possibly_missed,' and 'webhook_ids restriction' are left unexplained, and with no output schema, the description carries the full burden of clarifying return value semantics.
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 tool has zero parameters and the schema shows empty properties. The description explicitly states 'Takes no arguments,' which removes ambiguity and meets the 0-parameter baseline; no further parameter explanation is possible.
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 opens with 'List every monitor on your account,' giving a specific verb and resource, then details the exact fields returned. This clearly distinguishes it from sibling monitor tools like twitter_monitor_health and twitter_monitor_deliveries.
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 implied by the resource name and the direct 'List every monitor on your account' phrasing, but there is no explicit guidance about when to use this tool versus alternatives such as twitter_monitor_health, twitter_monitor_deliveries, or twitter_monitor_account_health. No exclusions or alternative tool names are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_monitor_updateA
Partially update an existing monitor: pause or resume it via status, change which webhooks receive its events via webhook_ids, change or clear its domain_filter, or any combination in the same call (applied atomically). Resuming a paused monitor re-runs the same capacity and per-account cap checks as creating a new one, since it adds load back to the shared pool. Free per call. All three fields are optional; omit any of them to leave that part unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The monitor's id, from twitter_monitor_create or twitter_monitor_list. | |
| status | No | 'paused' to pause the monitor, 'active' to resume it. Omit to leave status unchanged. | |
| webhook_ids | No | Optional. Comma-separated webhook id(s) to restrict delivery to. Pass an empty string to clear the restriction back to 'deliver to every active webhook'. Omit entirely to leave it unchanged. | |
| domain_filter | No | Optional. A bare hostname or full URL to restrict delivery to, same shape and normalization as twitter_monitor_create's domain_filter. Pass an empty string (or null) to clear an existing filter back to 'deliver every new post'. Omit entirely to leave the current filter unchanged. Rejected with a 400 if a non-empty value does not normalize to a valid hostname. | |
| include_replies | No | Optional boolean. true delivers the account's replies as well as its own posts, false holds replies back and delivers only its own posts. Omit the field entirely to leave it unchanged. Same boolean-only validation as twitter_monitor_create: a non-boolean is a 400 rather than a coercion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which only say non-read-only, non-destructive, open-world), the description discloses that changes are applied atomically, that the call is free, and that resuming has side effects on a shared capacity pool. It does not cover failure behavior for webhook_ids or per-call rate limits, so it is strong but not exhaustive.
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?
Front-loaded with the purpose, then the mutation options, then the resume caveat and the partial-update rule. Every sentence carries information, though the closing 'all fields optional' sentence partially repeats what the per-parameter schema descriptions already say.
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 mutating tool with no output schema this covers atomicity, cost, and the side effects of resuming, which is most of what an agent needs. The gap is the unrecognized include_replies parameter and the inaccurate 'three fields' claim, which could mislead an agent into thinking that field is unsupported.
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 each parameter's omit/clear semantics are already documented in the schema; the description adds no syntax or format detail beyond it. It also undercounts the fields, saying 'All three fields are optional' when the schema has four optional fields, omitting include_replies entirely.
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?
Opens with a specific verb+resource ('Partially update an existing monitor') and enumerates exactly what can be changed (status, webhook_ids, domain_filter), which cleanly separates it from twitter_monitor_create and twitter_monitor_delete. An agent can pick this tool without opening the schema.
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 explains the partial-update contract ('omit any of them to leave that part unchanged') and gives a non-obvious precondition: resuming re-runs capacity/per-account cap checks. It does not name sibling alternatives or state when-not-to-use this tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_monitor_webhook_createA
Register an HTTPS endpoint to receive signed monitor events. The HMAC signing secret is returned ONLY in this response, store it immediately: it cannot be retrieved again, and it is what you use to verify the X-TwitterAPIs-Signature header on every delivery. Free per call.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Your https delivery endpoint, e.g. 'https://example.com/webhooks/twitterapis'. Private, loopback, link-local, and metadata IPs are refused, re-checked at every delivery, not just at registration. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It discloses critical behavior well beyond the annotations: the HMAC signing secret is returned only once, must be stored immediately, cannot be retrieved again, and is used to verify the X-TwitterAPIs-Signature header on every delivery. It also notes that IP restrictions are re-checked at every delivery, not just at registration.
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 sentences and every sentence earns its place: the first states the purpose, the second delivers the crucial secret-handling and signature-verification warning. No filler or repetition.
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 one-parameter creation tool with no output schema, the description covers purpose, side effects, secret handling, signature verification, URL validation, and cost. It could more explicitly describe the full response shape or mention limits, but the essential operational information is present.
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 already provides 100% coverage for the url parameter, including constraints on private, loopback, link-local, and metadata IPs. The tool description itself adds no additional parameter-level meaning, so the baseline of 3 applies.
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 opens with a specific verb and resource: 'Register an HTTPS endpoint to receive signed monitor events.' This clearly distinguishes it from sibling tools like twitter_monitor_webhook_list, twitter_monitor_webhook_delete, and twitter_monitor_webhook_test.
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 clearly states the use case: registering an HTTPS endpoint to receive signed monitor events, and adds the cost note 'Free per call.' However, it does not explicitly contrast with the list/delete/test siblings or mention when not to use it, so it falls short of full alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_monitor_webhook_deleteADestructive
Soft-delete a webhook by id: it stops receiving deliveries immediately and disappears from twitter_monitor_webhook_list, but delivery history referencing it is retained rather than cascade-deleted. Irreversible from the caller's side (register a new webhook with twitter_monitor_webhook_create to resume delivery). Free per call.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The webhook's id, from twitter_monitor_webhook_create or twitter_monitor_webhook_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint: true, but the description adds valuable nuance: it is a soft delete, not a cascade delete, and delivery history is retained. It also discloses irreversibility from the caller's side and the fact that it is free per call. This goes beyond the raw annotation and gives the agent a precise behavioral model, though it does not detail any side effects on the delivery history beyond retention.
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 exceptionally concise: two sentences that front-load the primary action and effect, then immediately address retention, irreversibility, and recovery. Every clause earns its place, and there is zero filler or repetition. This is an ideal example of efficient, high-signal writing.
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 (one parameter, no output schema, clear destructive intent) and the strong annotations, the description covers all essential aspects: the action, immediate consequence, historical data handling, irreversibility, and the path to restore functionality. The combination of annotations and description fully equips the agent to make an informed call.
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 already fully describes the single 'id' parameter with 100% coverage, including its source. The description adds no additional semantic detail beyond the phrase 'by id', which is redundant. Baseline of 3 is appropriate because the description does not need to compensate for schema gaps, but it also does not enrich the 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 soft-deletes a webhook by id, explains the immediate effect (stops deliveries, disappears from list), and explicitly references sibling tools (twitter_monitor_webhook_list and twitter_monitor_webhook_create) to differentiate its role. The verb 'delete' combined with the resource and the nuanced 'soft' qualifier leaves no ambiguity about what this tool does.
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 strong contextual guidance: it notes the action is irreversible and recommends creating a new webhook via twitter_monitor_webhook_create to resume delivery. This effectively tells the caller when this tool is appropriate (when stopping a webhook) and what to do as an alternative. However, it does not explicitly state when not to use it or contrast it with other deletion-like tools (e.g., hard delete if it existed), so it stops short of a perfect 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_monitor_webhook_listARead-only
List every webhook registered on your account: id, url, status ('active' delivers, 'disabled' means the endpoint returned a 410 Gone and needs re-registering to reactivate), and created_at. The signing secret is never returned here, only at creation. Takes no arguments.
| 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 and destructiveHint=false, so the safety profile is known. The description adds useful behavioral details: the signing secret is only returned at creation, and the status meanings are explained (e.g., 'disabled' means 410 Gone and requires re-registering). This goes 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 concise sentences: the first fronts the purpose and fields, the second provides a key caveat about the signing secret and confirms no arguments. Every sentence adds value with zero redundancy.
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 list tool with no output schema, the description fully covers what will be returned (id, url, status, created_at), explains status semantics, and notes the exclusion of the signing secret. It is complete for its purpose.
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?
There are zero parameters and the schema is empty (100% coverage). The description explicitly states 'Takes no arguments,' which reinforces the schema and removes any ambiguity. Baseline for 0 params is 4, and this meets it.
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 every webhook registered on your account' and specifies the exact fields returned (id, url, status, created_at). It uses a specific verb and resource, and implicitly distinguishes itself from sibling tools like webhook_create, webhook_delete, and webhook_test.
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 name and description make it obvious this is the listing operation; it provides context on when to use it (to see webhooks and check their status). However, it does not explicitly mention alternatives for create/delete/test operations, relying on sibling names for differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_monitor_webhook_redriveA
Replay deliveries that dead-lettered while your endpoint was down. A delivery is dead-lettered after it fails all 8 attempts across 21 minutes, so an outage longer than that window loses those events; this re-queues them with a full retry budget, oldest first. Bounded by default so a recovered endpoint is not flooded: max_age_hours defaults to 24 and limit to 100. Returns requeued and skipped_permanent. A delivery that died for a permanent reason, a 410 Gone, a deleted webhook, or a URL egress refused, is not replayed, because it would fail the same way and spend the budget again. Replayed events carry the same signature and payload as the original, so make your handler idempotent on the event id if a duplicate would matter. Returns 409 if the webhook is disabled, which happens after your endpoint answers 410 Gone: re-register it first. Free per call.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The webhook's id, from twitter_monitor_webhook_create or twitter_monitor_webhook_list. | |
| limit | No | Optional. Most deliveries to replay in one call, 1 to 1000, oldest first. Defaults to 100. | |
| max_age_hours | No | Optional. How far back to look for dead-lettered deliveries, 1 to 168 hours. Defaults to 24. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true); the description goes far beyond them by disclosing retry semantics (8 attempts across 21 minutes, full budget on replay), oldest-first ordering, bounded defaults to avoid flooding, the 409-on-disabled behavior, and the idempotency requirement for duplicate event ids.
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?
Front-loaded with the core action and the outage context, and dense with operational detail rather than filler. It is longer than average, but nearly every clause carries a distinct behavioral fact (retry budget, defaults, permanent-failure exclusion, idempotency, 409, cost), so the length is largely justified.
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 mutation-style webhook operation with no output schema, the description explicitly covers the return values (requeued, skipped_permanent), the failure case (409), the safety implications (idempotency), and the cost model. Nothing an agent needs to invoke it correctly is missing.
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 already 100% (both optional params document ranges and defaults), so the baseline is 3. The description adds meaning the schema lacks: why the bounds exist ('so a recovered endpoint is not flooded') and the oldest-first replay order, which is not stated in either param 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?
States a specific verb (replay/redrive) and resource (dead-lettered webhook deliveries), plus the exact trigger condition ('dead-lettered while your endpoint was down'). An agent can distinguish this from sibling webhook tools like twitter_monitor_webhook_list or twitter_monitor_deliveries without opening a schema.
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 scopes when to use (after an outage that exceeded the retry window) and when not to (permanent failures such as 410 Gone, deleted webhook, or egress-refused URLs are never replayed, with the reason given). It also names the prerequisite for the 409 case: re-register a disabled webhook first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_monitor_webhook_testA
Send one HMAC-signed test event to this webhook's URL right now and return the outcome synchronously: delivered (true if your endpoint returned a 2xx within the delivery timeout), status_code, and error. Unlike a real monitor event, a test send is never queued, retried, or dead-lettered, it is a one-shot diagnostic to confirm your endpoint and signature verification both work before relying on the webhook. Free per call.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The webhook's id, from twitter_monitor_webhook_create or twitter_monitor_webhook_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations indicate readOnlyHint=false and destructiveHint=false, the description adds substantial behavioral details: the event is HMAC-signed, sent synchronously with a delivery timeout, returns delivered/status_code/error, is never queued/retried/dead-lettered, and is free. This goes beyond the annotations and provides a clear understanding of the tool's side effects and guarantees.
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 and front-loaded, immediately stating the primary action and return values. Every sentence adds value: the synchronous nature, the outcome fields, the contrast with real events, and the free pricing. No unnecessary repetition or filler.
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 (one parameter, no output schema), the description is remarkably complete. It explains the exact behavior (synchronous send, timeout, outcome), the difference from regular events, and the purpose. It covers authentication (HMAC-signed), and the free aspect, leaving little ambiguity for an agent selecting this 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?
The input schema already fully documents the 'id' parameter, including its source ('from twitter_monitor_webhook_create or twitter_monitor_webhook_list'). The description does not add any additional semantic meaning beyond what the schema provides, so the baseline score of 3 applies due to high 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 action: 'Send one HMAC-signed test event to this webhook's URL right now and return the outcome synchronously'. It identifies the specific verb (send) and resource (webhook), and the return values (delivered, status_code, error). It distinguishes itself from sibling tools like create/list/delete by focusing on testing.
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 explicit timing: 'to confirm your endpoint and signature verification both work before relying on the webhook' and contrasts with real events: 'Unlike a real monitor event, a test send is never queued, retried, or dead-lettered'. It gives clear context for when to use, though it does not explicitly name alternative tools or state when not to use it; the contrast with real events implies alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_mutingARead-only
List the accounts YOUR authenticated account has MUTED, as full user objects, cursor-paginated. Muting hides an account's posts from your timeline without blocking it, so this is a different list from twitter_blocking and an account can appear in one and not the other. Requires an authenticated session behind your key. There is no user_id argument: X provides no way to read another account's mute list. An empty users array means you mute nobody, never a silent failure.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/destructive/openWorld, so the added value is real: an authenticated session is required, there is deliberately no user_id argument, and an empty users array is a genuine empty result rather than a silent failure. This failure-mode disclosure goes beyond the annotations, though it doesn't note rate limits.
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?
Front-loaded with the verb+resource+scope, then each subsequent sentence earns its place (sibling distinction, auth requirement, no user_id, empty-array semantics). No filler.
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, and the description compensates by stating the return shape (full user objects, cursor-paginated) and the empty-result semantics, plus the auth requirement. An agent has everything needed to call and interpret the call correctly.
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 baseline is 3, but the description adds meaning by noting cursor-pagination and, notably, the absence of a user_id argument as a deliberate design constraint. That is useful context the schema cannot convey for an omitted parameter.
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?
States a specific verb and resource ('List the accounts YOUR authenticated account has MUTED'), and explicitly distinguishes itself from the sibling twitter_blocking by explaining muting vs blocking. An agent can tell these two apart without opening either schema.
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?
Names the alternative (twitter_blocking) and the condition that separates them ('an account can appear in one and not the other'), and clarifies the no-user_id constraint. It lacks an explicit 'use this when you want X' framing but the routing context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_retweetA
Retweet a tweet AS your authenticated account. Provide the tweet id or url. Requires write capability behind your key. Reverse with twitter_unretweet.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Tweet/post numeric id (e.g. "1789012345678901234"). Provide exactly one of id or url. | |
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| url | No | Full tweet URL, e.g. "https://x.com/elonmusk/status/1789012345678901234". Provide exactly one of id or url. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds that it requires write capability, which is consistent with the readOnlyHint=false annotation. It does not disclose further side effects (e.g., visibility, rate limits) but annotations already cover the read-only nature, so the added value is moderate.
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 short sentence that conveys all essential information (action, subject, requirement, and alternative) without ambiguity or unnecessary words. It is well-structured and easily parsed.
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 write operation, the description covers the core functionality (retweet), identifies the target via id or url, states the authentication requirement, and points to the reverse operation. Since there is no output schema, return values need not be described. It is complete for its scope.
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 descriptions fully cover all 6 parameters (id, url, etc.), and the description redundantly notes 'Provide the tweet id or url,' which is already stated in the schema. Since coverage is 100% and no additional semantic detail is given, the description adds minimal value 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: 'Retweet a tweet AS your authenticated account.' It specifies the resource (a tweet) and the context (authenticated account), making the purpose unambiguous and distinct from other tweet actions.
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 provides a precondition: 'Requires write capability behind your key,' and mentions the reverse operation ('Reverse with twitter_unretweet'). However, it does not explicitly compare to other tweet creation tools (e.g., twitter_create_tweet) or indicate when retweeting is preferred, but the purpose alone makes usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_spaces_infoARead-only
Get metadata and the participant roster for one X Space by id, live or ended: title, lifecycle state (Scheduled, NotStarted, Running or Ended), host, topics, scheduled and actual start/end times, peak live listener count, replay view count, and the admin, speaker and listener rosters. Returns metadata only, NOT the Space audio. Note that X does not retain the per-person listener roster once a Space ends, so listeners comes back empty for an ended Space while total_live_listeners and total_replay_watched still reflect the real audience. All timestamps are millisecond-epoch numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The Space id: the trailing token of a x.com/i/spaces/<id> URL, e.g. '1RKZzjkoYRAKB'. A '/peek' suffix on the URL is not part of the id. | |
| with_replays | No | Optional. Include replay availability and related metadata. Defaults to true. | |
| with_listeners | No | Optional. Include the listener roster. Defaults to true. X drops this roster once a Space ends, so it is empty for an ended Space regardless of this flag. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description discloses critical behavioral details: the listener roster becomes empty for ended Spaces due to X's retention policy, and timestamps are given in millisecond-epoch format. It also clarifies that only metadata is returned, not audio. These are valuable additions that prevent misinterpretation and enrich agent understanding.
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, dense paragraph that front-loads the purpose and then lists returned fields, followed by important caveats and timestamp format. Every sentence contributes substantive information, but it is slightly long with many clauses. It is structured logically and avoids redundancy, so it earns a 4 rather than a 5.
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 tool with 3 parameters and no output schema, the description provides a comprehensive list of returned fields and explains important behavioral nuances (e.g., empty listener roster for ended Spaces). It does not mention pagination, limits, or exact response structure, but given the tool's simplicity, these are not necessary. It successfully covers the key aspects an agent needs to know.
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 already covers all three parameters with descriptions (id, with_replays, with_listeners). The tool description does not add extra parameter-specific explanations; it only indirectly mentions listener behavior in the context of ended Spaces, which relates to with_listeners. Since schema coverage is 100%, a baseline of 3 is appropriate, and the description doesn't elevate it further.
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 function: 'Get metadata and the participant roster for one X Space by id, live or ended' and enumerates the exact fields returned (title, lifecycle state, host, topics, times, counts, rosters). It also explicitly distinguishes itself by noting it returns metadata only, not audio, which differentiates it from any audio-related tools. This is specific and unambiguous.
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 clear context about when the tool is appropriate (fetching Space metadata and rosters) and explicitly notes what it does NOT do (returns no audio). However, it does not mention any alternative tools for audio or other use cases, nor does it state explicit exclusions like 'use only for live Spaces'. Still, the context is sufficient for an agent to infer its use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_trendsARead-only
Get the current top trends for a location. With no location parameter, returns Worldwide (WOEID 1, X's own default). Pass country (an ISO code or country name, e.g. 'US' or 'Japan') or a numeric woeid from twitter_trends_locations; woeid wins when both are given. Returns the resolved location, the as_of / created_at timestamps, and the ranked trends list. Use count to truncate the list. A location X will not serve returns a 400.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Truncate the returned trends list to at most this many. Omit to return X's full list for the location. | |
| woeid | No | Numeric WOEID from twitter_trends_locations. Takes precedence over country when both are supplied. | |
| country | No | Country name or ISO code to get trends for, e.g. 'US' or 'Japan'. Resolved against the trends locations list. Omit for Worldwide. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a safe read operation. The description adds useful behavioral details: default Worldwide behavior, precedence rules, returned timestamps and resolved location, and count truncation. The final sentence about 'A location X will not serve returns a 400' is garbled and slightly undermines the transparency, but the overall behavioral picture is strong.
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 appropriately short and front-loaded with the core purpose. However, the final sentence is malformed ('A location X will not serve returns a 400') and does not communicate clearly, so not 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 read-only tool with no output schema, the description does a good job covering what the caller gets back: resolved location, as_of/created_at timestamps, and ranked trends. It also covers defaults and parameter precedence, making it largely self-sufficient, though the error-case sentence needs repair for full clarity.
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 schema carries the parameter definitions. The description adds value by clarifying inter-parameter behavior: woeid precedence over country, country resolution against the locations list, omission meaning Worldwide, and count truncation semantics. This goes beyond a simple restatement of the schema fields.
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 opens with a specific verb and resource: 'Get the current top trends for a location.' This clearly distinguishes the tool from siblings like twitter_trends_locations, which is about available locations rather than the trends themselves.
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 clear usage context: no location returns Worldwide, country or woeid can be used, and woeid wins if both are given. It implies the companion tool twitter_trends_locations as the source for woeids, though it does not explicitly say 'use twitter_trends_locations to find WOEIDs'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_trends_locationsARead-only
List every location X publishes trends for, each with the numeric WOEID to pass back to twitter_trends as woeid. Takes no parameters. Use this to resolve a country or city to its WOEID before requesting trends for that place.
| 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 and destructiveHint=false, so the description doesn't need to repeat safety. It adds transparency by specifying the output (list of locations with WOEIDs) and its purpose, which goes 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 concise sentences that state the action, the output format, and the usage context. Every sentence earns its place with no redundancy or filler.
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, but the description explains the return value (list of locations with WOEIDs) and how it integrates with twitter_trends. For a simple lookup tool, this is complete and enables correct invocation without further documentation.
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 tool has zero parameters, so schema coverage is 100%. The description explicitly states 'Takes no parameters,' which is sufficient for a parameterless tool. Baseline 4 applies.
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 lists every location with its numeric WOEID, specifically for use with twitter_trends. It distinguishes itself from siblings by explaining its role as a lookup prerequisite, not just a generic list.
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 instructs when to use it: 'Use this to resolve a country or city to its WOEID before requesting trends for that place.' Also notes it takes no parameters, making invocation trivial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_tweet_detailARead-only
Get the full detail of a single tweet: text, author profile, post timestamp, like/retweet/reply/quote counts, attached media, referenced quoted tweet, and parent reply context. Use this to inspect a specific tweet before fetching its replies or thread. Accepts either the tweet id or its full URL.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Tweet/post numeric id (e.g. "1789012345678901234"). Provide exactly one of id or url. | |
| url | No | Full tweet URL, e.g. "https://x.com/elonmusk/status/1789012345678901234". Provide exactly one of id or url. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description lists specific data returned, adding context beyond annotations (readOnlyHint, destructiveHint). No contradiction; it aligns with read-only nature and enriches what the tool outputs.
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 key details. First sentence lists returned fields; second provides usage context and parameter clarification. 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?
For a read-only tool with no output schema, the description adequately covers return fields. Does not mention potential nested objects or size limitations, but these are minor for a single-tweet detail tool. Good enough for agent selection.
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 description adds: 'Accepts either the tweet id or its full URL' and clarifies exactly one should be provided. This adds value 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?
Description clearly states 'Get the full detail of a single tweet' and lists specific fields (text, author profile, timestamp, engagement counts, media, quoted tweet, parent reply context). It distinguishes from siblings like twitter_tweet_replies and twitter_tweet_thread by noting use before fetching replies or thread.
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?
Includes explicit guidance: 'Use this to inspect a specific tweet before fetching its replies or thread.' Also clarifies that either id or URL can be provided. Does not provide when-not-to-use or alternatives, but the context is sufficient for basic differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_tweet_quotesARead-only
List the tweets that QUOTE a specific tweet, cursor-paginated as full tweet objects, so you get the commentary people attached rather than just a number. Different from twitter_tweet_retweeters (a plain retweet carries no text) and from twitter_tweet_replies (a reply is not a quote). IMPORTANT, state this to the user whenever you report a number from it: this endpoint is SEARCH-BACKED, because X exposes no dedicated quote-tweets operation, so it runs the query quoted_tweet_id: against X's search index. The returned 'count' is therefore how many quotes THIS SEARCH returned, never the tweet's true total; the authoritative total is 'quote_count' on the tweet object from twitter_tweet_detail, and the two WILL differ because of index lag and because deleted, protected, suspended and region-withheld quotes are absent from search. Every response carries 'source' (always "search"), 'search_query' (the exact query sent), and 'quote_matched' (how many returned tweets demonstrably quote the requested id). quote_matched equal to count means every row is genuine; quote_matched 0 on a NON-EMPTY page means X stopped honouring the operator and the rows are junk, so discard that page rather than reporting it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Tweet/post numeric id (e.g. "1789012345678901234"). Provide exactly one of id or url. | |
| url | No | Full tweet URL, e.g. "https://x.com/elonmusk/status/1789012345678901234". Provide exactly one of id or url. | |
| count | No | Max quote tweets to request for this page. Defaults to 20 and is clamped to 1-100 by the underlying search, so a larger number returns at most 100 rather than erroring. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call. | |
| strict | No | Set true to DROP every returned row that does not demonstrably quote the requested tweet, instead of only counting them in quote_matched. Default false, because X does not embed the quoted original on every search result, so strict trades a false-positive risk for a false-negative one. Billing follows what you receive, so rows dropped by strict are not charged. | |
| product | No | Search ordering. 'Latest' (default) is reverse-chronological and cheap. 'Top' is X's ranked ordering and is materially slower upstream. Any other value falls back to Latest rather than changing what the tool means. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already indicating read-only and non-destructive, the description adds extensive behavioral context: the endpoint is search-backed, count is not authoritative, and quote_matched indicates result quality. It also warns about junk pages, which is beyond 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 dense but every sentence adds value, starting with purpose, then differentiation, then critical caveats. It is logically structured, though the single-paragraph format could be improved with line breaks for readability. Still, it is appropriately sized for the 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?
With no output schema, the description explains return fields (source, search_query, quote_matched) and edge cases like quote_matched zero on non-empty pages. It covers pagination via cursor and the fallback behavior of product, making it comprehensive for a complex 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?
The input schema already provides 100% coverage with detailed parameter descriptions. The description does not add additional parameter-level meaning, though it contextualizes the importance of 'count' versus 'quote_count' in output interpretation. This meets the baseline for high 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 lists tweets that quote a specific tweet, with a specific verb and resource. It explicitly differentiates from sibling tools twitter_tweet_retweeters and twitter_tweet_replies, eliminating ambiguity.
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 provides explicit when-to-use and when-not-to-use guidance by contrasting with retweets and replies. It also warns about the search-backed nature and explains how to interpret the count, giving clear context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_tweet_repliesARead-only
Get replies to a specific tweet. Returns each reply tweet with author, text, and metrics. Paginate with cursor to load more. Use this to read the conversation under a tweet, gauge sentiment, or find notable responses.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Tweet/post numeric id (e.g. "1789012345678901234"). Provide exactly one of id or url. | |
| url | No | Full tweet URL, e.g. "https://x.com/elonmusk/status/1789012345678901234". Provide exactly one of id or url. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds useful behavioral context: it returns reply tweet fields and supports pagination with a cursor. This goes beyond annotation defaults without contradicting them.
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 four short, front-loaded sentences. Each sentence contributes either purpose, output details, pagination guidance, or usage context with no filler or redundancy.
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 read-only paginated list endpoint, the description covers inputs, output, pagination, and intended use. There is no output schema, so the description appropriately summarizes return contents instead of leaving them unexplained.
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 id/url described as mutually exclusive alternatives and cursor explained as an opaque pagination token. The description reinforces cursor usage but does not need to add much 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 opens with a specific verb and resource, "Get replies to a specific tweet," and clarifies the output shape: each reply with author, text, and metrics. It naturally distinguishes itself from sibling tools like quotes, retweets, and thread views by focusing on replies.
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 states intended use cases: "read the conversation under a tweet, gauge sentiment, or find notable responses." It does not mention alternative tools or when not to use it, but the guidance is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_tweet_retweetersARead-only
List the accounts that retweeted a specific tweet. Returns profile data for each retweeter. Paginate with cursor. Useful for finding who amplified a piece of content or mapping a tweet's distribution network.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Tweet/post numeric id (e.g. "1789012345678901234"). Provide exactly one of id or url. | |
| url | No | Full tweet URL, e.g. "https://x.com/elonmusk/status/1789012345678901234". Provide exactly one of id or url. | |
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, covering the safety profile. The description adds return content ('profile data for each retweeter') and a pagination instruction, but does not mention rate limits, auth requirements, or the upstream page-size cap noted only in 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?
Four short sentences, front-loaded with the core action followed by return content, pagination, and use cases. Efficient with barely any waste, though the use-case sentence borders on optional.
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 read-only list endpoint with full param coverage and no output schema, the description covers purpose, pagination, and return content adequately. The count-cap nuance lives in the schema, so the description is complete enough to invoke correctly.
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 id/url, count, and cursor are all fully documented, including the advisory page-size caveat. The description adds nothing beyond the schema for parameter meaning, so the baseline 3 applies.
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?
States a specific verb and resource ('List the accounts that retweeted a specific tweet') that cleanly distinguishes it from siblings like twitter_tweet_replies, twitter_tweet_quotes, and twitter_tweet_thread. An agent can identify the resource without opening the schema.
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?
Gives concrete use cases ('finding who amplified a piece of content or mapping a tweet's distribution network'), which clarifies when the tool is appropriate. However, it offers no explicit exclusions or named alternatives for adjacent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_tweet_threadARead-only
Get all tweets in a thread: the connected chain of tweets posted by the SAME author in sequence (a tweetstorm or numbered thread). Pass any tweet id/url from the thread and the API returns the full ordered sequence in a single call. Does NOT return replies from other users, use twitter_tweet_replies for that. Accepts either the tweet id or its full URL.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Tweet/post numeric id (e.g. "1789012345678901234"). Provide exactly one of id or url. | |
| url | No | Full tweet URL, e.g. "https://x.com/elonmusk/status/1789012345678901234". Provide exactly one of id or url. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only safety (readOnlyHint: true, destructiveHint: false). The description adds value by explaining the tool returns the full ordered sequence in a single call and specifically excludes replies, providing context on the output shape without contradicting 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 sentences, front-loaded with the core purpose, includes a critical exclusion, and contains zero redundant words. It efficiently conveys all essential information without excess.
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 no output schema, the description fully covers what it does, how to invoke it (any id/url), and what it excludes, making it sufficient for an agent to correctly select and use it. No significant behavioral details are missing.
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 descriptions for id and url, and the schema already notes 'Provide exactly one of id or url'. The description adds the crucial detail that any tweet id or URL from the thread works, reinforcing flexibility beyond the schema's basic field 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 uses a specific verb+resource ('Get all tweets in a thread') and clearly defines the scope (same author, ordered sequence). It distinguishes itself from the sibling tool twitter_tweet_replies by explicitly limiting to the author's own tweets, avoiding confusion.
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 explicitly states when NOT to use it ('Does NOT return replies from other users') and directs to the alternative twitter_tweet_replies. It also gives practical usage guidance ('Pass any tweet id/url from the thread'), but does not exhaustively cover all possible exclusions or alternative tools, so not a perfect 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_unbookmark_tweetADestructive
Remove a tweet from YOUR authenticated account's bookmarks. Provide the tweet id or url. Requires write capability behind your key.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Tweet/post numeric id (e.g. "1789012345678901234"). Provide exactly one of id or url. | |
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| url | No | Full tweet URL, e.g. "https://x.com/elonmusk/status/1789012345678901234". Provide exactly one of id or url. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With destructiveHint=true and readOnlyHint=false in annotations, the description correctly reinforces the mutating nature by using 'Remove' and adds the need for 'write capability behind your key.' It explains the authentication context without contradicting annotations, though it could also mention the requirement to be authenticated as the account owner.
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 only two sentences long, front-loads the core action, and wastes no words. Every clause earns its place, making it highly scannable 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 mutating tool with 6 parameters and no output schema, the description covers the essential behavioral context: what is removed, whose bookmarks are affected, what inputs are needed, and what permission is required. It is slightly light on post-conditions (e.g., what a successful removal returns), but this 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?
The input schema already has 100% coverage with detailed descriptions for every parameter, including the mutual exclusivity of id/url and header mappings. The description adds minimal new parameter information beyond restating 'Provide the tweet id or url,' so a baseline score is appropriate given the schema's completeness.
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 ('Remove') and resource ('a tweet from YOUR authenticated account's bookmarks'), making the tool's purpose unmistakable. It clearly distinguishes this from sibling tools like twitter_bookmark_tweet or twitter_bookmarks by focusing on removal from the user's own 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?
The description tells the agent to 'Provide the tweet id or url' and notes that write capability is required. While it doesn't explicitly describe when NOT to use this tool or name alternatives, the prerequisite and primary input are clear, providing solid practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_unfavorite_tweetADestructive
Remove a like (unfavorite) from a tweet AS your authenticated account. Provide the tweet id or url. Requires write capability behind your key.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Tweet/post numeric id (e.g. "1789012345678901234"). Provide exactly one of id or url. | |
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| url | No | Full tweet URL, e.g. "https://x.com/elonmusk/status/1789012345678901234". Provide exactly one of id or url. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the destructive nature (remove a like) and requires write capability, adding context beyond 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 concise sentences with clear action and requirements, no unnecessary 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?
Sufficient for a simple action; no output schema needed and input requirements are stated, though error handling is not mentioned.
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?
Clarifies that exactly one of id or url should be provided, which is not enforced in schema, adding value.
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 removes a like from a tweet, with verb and resource, and distinguishes from sibling favorite_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?
Provides instruction to provide tweet id or url and mentions write capability requirement, but lacks explicit comparison to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_unfollow_userADestructive
Unfollow a user AS your authenticated account, by numeric user_id. Requires write capability behind your key.
| Name | Required | Description | Default |
|---|---|---|---|
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| user_id | Yes | Numeric user id of the account to unfollow. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as destructive and non-read-only. The description adds valuable context beyond those annotations by specifying that the action applies to the authenticated account and requires write capability, which is important behavioral information.
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, focused sentence that front-loads the verb and target, then adds the key auth requirement. There is no fluff, repetition, or wasted wording.
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 write operation, the description plus annotations and full schema coverage provide enough context for selection and invocation. It lacks explicit return or error behavior, but no output schema exists and the operation is straightforward, so this is not a major 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 description coverage is 100%, so all five parameters are already documented with their own descriptions. The tool description only restates that user_id is numeric, adding no meaningful semantic value beyond the structured 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 names a specific action ('Unfollow a user') and resource ('by numeric user_id'), and clarifies it operates on the authenticated account. This clearly distinguishes it from related siblings such as twitter_follow_user or read-only user info 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 provides clear context: this unfollow acts AS the authenticated account and requires write capability behind the key. It does not explicitly name alternatives or when-not scenarios, but the auth and capability framing gives enough guidance for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_unretweetADestructive
Undo a retweet AS your authenticated account. Provide the tweet id or url. Requires write capability behind your key.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Tweet/post numeric id (e.g. "1789012345678901234"). Provide exactly one of id or url. | |
| ct0 | No | Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header. | |
| url | No | Full tweet URL, e.g. "https://x.com/elonmusk/status/1789012345678901234". Provide exactly one of id or url. | |
| proxy_url | No | Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header. | |
| auth_token | No | Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL. | |
| user_agent | No | Optional. User-Agent string to send for this session. Sent as the x-user-agent header. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so destructive nature is known. The description adds 'Requires write capability behind your key', which hints at authentication, but does not detail consequences (e.g., irreversible, rate limits) or mention that it acts on the authenticated account specifically beyond the title. No 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?
The description is brief and front-loaded with the action. It includes a necessary caveat about write capability and proxy for writes, but could be trimmed. However, every sentence adds value, so conciseness is good.
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 has 6 parameters and no output schema, the description covers the essence but lacks details on return values or edge cases. Annotations handle safety. For a simple undo action, this is adequate but not exceptional. The description could mention what happens if the tweet is already unretweeted.
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 baseline is 3. The description adds the crucial requirement of providing exactly one of id or url, which is not fully explicit in schema descriptions but helps disambiguate parameter usage. It also emphasizes the write capability and proxy recommendation, adding context beyond 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 ('Undo a retweet') and the resource (AS your authenticated account). It distinguishes from sibling tools like twitter_retweet by explicitly stating the undo action and scope.
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 indicates when to use it (to undo a retweet) and specifies input requirements (tweet id or url). However, it does not explicitly contrast with alternative tools or state when not to use it, but the unique action makes alternatives obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_aboutARead-only
Get a user's full 'About' object: the structured profile facts X surfaces beyond the bio, including account category and professional/business labels, verification and identity-verification flags, joined date, location and linked website, follower/following counts, and X's 'About this account' transparency panel (the account's country, how the account was created, and its username-change history). Provide a username or a user_id. Use this to enrich a profile beyond what twitter_user_info returns.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | Numeric Twitter/X user id (e.g. "44196397"). Provide exactly one of username or user_id. | |
| username | No | Twitter/X handle WITHOUT the leading @ (e.g. "elonmusk", "openai"). Provide exactly one of username or user_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description does not contradict these. It adds value by detailing the fields returned (e.g., account category, verification flags, transparency panel), but does not introduce any new behavioral aspects beyond the read-only nature already annotated.
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 somewhat lengthy due to enumerating many returned fields, but each item is relevant and contributes to the tool's purpose. It is well-structured, front-loaded with the main function, and avoids unnecessary fluff, though it could be slightly tightened without loss of meaning.
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?
With no output schema, the description fully compensates by naming the specific attributes returned (account category, labels, verification flags, joined date, location, etc.). It also provides usage context and differentiates from a sibling tool, making it complete for an agent to understand what it will get and when 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 schema already describes both parameters and their exclusivity. The description reinforces this by stating 'Provide a username or a user_id,' which adds clarity on the mutual exclusivity but does not introduce significant new meaning beyond the schema. Given 100% schema coverage, this is above the baseline of 3.
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 retrieves a user's full 'About' object with detailed profile facts, and explicitly distinguishes itself from twitter_user_info by indicating it provides richer data beyond that tool. The verb 'Get' and specific resource are precise, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage instructions: 'Provide a username or a user_id' and 'Use this to enrich a profile beyond what twitter_user_info returns.' This tells the agent exactly when to employ this tool and mentions the alternative (twitter_user_info), offering clear contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_affiliatesARead-only
List the affiliated accounts of an organization profile (the smaller accounts X displays under a company's 'Affiliated' badge, e.g. employees or sub-brands). Provide a username or user_id. Returns profile data per affiliate plus a pagination cursor. Returns empty for accounts with no affiliations.
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | Optional team/sub-group name to filter affiliates by, when the org exposes named teams. | |
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| user_id | No | Numeric Twitter/X user id (e.g. "44196397"). Provide exactly one of username or user_id. | |
| username | No | Twitter/X handle WITHOUT the leading @ (e.g. "elonmusk", "openai"). Provide exactly one of username or user_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=true, destructiveHint=false), so the bar is lower. The description adds substantive behavioral context beyond the annotations: the return shape ('profile data per affiliate plus a pagination cursor') and the empty-result behavior for unaffiliated accounts, which an agent needs to avoid misinterpreting an empty list as an error.
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 short sentences, front-loaded with the core purpose, followed by the invocation requirement and the empty-case caveat. No filler or repetition.
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?
There is no output schema, so the description usefully covers the return shape (per-affiliate profile data and a pagination cursor) and the empty case. Combined with the rich input schema and annotations, an agent has enough to call it correctly; only the absence of guidance on sibling selection keeps it from a 5.
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 the schema already documents team, count, cursor, user_id, and username in detail — including the unusual advisory nature of count. The description only restates the username/user_id either-or requirement, adding little beyond the schema. 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?
States a specific verb and resource ('List the affiliated accounts of an organization profile') and immediately disambiguates with a concrete gloss of what affiliates are ('the smaller accounts X displays under a company's Affiliated badge, e.g. employees or sub-brands'). This clearly separates it from sibling follow/follower tools like twitter_user_followers and twitter_user_following.
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?
Gives the prerequisite for invocation ('Provide a username or user_id') and an important edge-case expectation ('Returns empty for accounts with no affiliations'). It does not explicitly contrast with the adjacent sibling tools (e.g. when to prefer this over user_following), so it falls short of a full when/when-not/alternatives statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_followersARead-only
List the accounts that follow a given user. Returns profile data for each follower (username, display name, bio, follower count). Paginate with cursor for large audiences. Useful for audience analysis, finding who follows a brand or influencer.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| user_id | No | Numeric Twitter/X user id (e.g. "44196397"). Provide exactly one of username or user_id. | |
| username | No | Twitter/X handle WITHOUT the leading @ (e.g. "elonmusk", "openai"). Provide exactly one of username or user_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds real value beyond that by enumerating the returned profile fields and flagging cursor-based pagination for large audiences — important since there is no output schema to document the shape.
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?
Four short sentences, front-loaded with the core action, then returns, then pagination, then use case. Every sentence contributes; there is no filler or repetition.
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?
With no output schema, the description usefully names the returned fields and explains pagination, and the schema covers parameter requirements. It is complete enough to invoke correctly, with only the lack of sibling differentiation as a 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 description coverage is 100%, so the schema already documents count, cursor, user_id, and username in depth, including the count caveat and the exactly-one-of constraint. The description only echoes cursor pagination, adding nothing new. Baseline 3 applies when the schema 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?
States a specific verb and resource: 'List the accounts that follow a given user.' An agent immediately knows this fetches followers. However, it does not distinguish itself from close siblings such as twitter_user_followers_v2 or twitter_user_verified_followers, leaving the agent to guess which variant applies.
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?
'Useful for audience analysis, finding who follows a brand or influencer' gives implied motivation for reaching for this tool, but there is no explicit when-to-use vs when-not, and no routing away from the v2/verified-followers siblings. Usage is suggested, not prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_followers_v2ARead-only
List a user's followers using the v2 response shape (richer profile fields and more reliable cursoring for large audiences). Same inputs as twitter_user_followers; prefer this when you need the fuller v2 payload or are paging deep follower lists.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| user_id | No | Numeric Twitter/X user id (e.g. "44196397"). Provide exactly one of username or user_id. | |
| username | No | Twitter/X handle WITHOUT the leading @ (e.g. "elonmusk", "openai"). Provide exactly one of username or user_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds payload-shape and cursor-reliability context, but the reconnection/pagination mechanics are already detailed in the cursor schema field, so the marginal behavioral disclosure is modest.
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, purpose front-loaded, no filler. The comparative detail and the selection rule follow immediately after the core verb+resource statement.
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 read-only 4-parameter list tool with rich schema coverage and full annotation coverage, the description is nearly sufficient; it even hints at the payload ('richer profile fields'). The absence of any output schema means a brief note on the response envelope would have closed the remaining 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 description coverage is 100%, with count, cursor, user_id and username each fully documented including the advisory count cap and the exactly-one-of constraint. The description contributes only 'same inputs as twitter_user_followers,' adding no meaning beyond the schema, so baseline 3 applies.
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?
States a specific verb (list) and resource (a user's followers) and explicitly frames itself as the v2 variant with 'richer profile fields and more reliable cursoring for large audiences.' This directly distinguishes it from the sibling twitter_user_followers, which it names.
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?
Gives an explicit selection rule ('prefer this when you need the fuller v2 payload or are paging deep follower lists') and names the alternative tool with the note that inputs are identical. An agent can choose between the two follower tools without opening either schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_followingARead-only
List the accounts that a given user follows. Returns profile data for each account followed. Paginate with cursor. Useful for mapping a user's information sources, influencer networks, or competitor monitoring lists.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| user_id | No | Numeric Twitter/X user id (e.g. "44196397"). Provide exactly one of username or user_id. | |
| username | No | Twitter/X handle WITHOUT the leading @ (e.g. "elonmusk", "openai"). Provide exactly one of username or user_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds the pagination behavior ('Paginate with cursor') and the return content, which is useful but limited; it discloses nothing about rate limits or auth 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?
Three compact sentences, with the core purpose front-loaded before the use-case list. No filler, though the trailing use-case clause is the least essential part and could be trimmed.
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?
There is no output schema, and the description only loosely characterizes the return ('profile data'), which is adequate. However, given the presence of a v2 sibling and a v1 followers counterpart, the description leaves the agent without guidance on why to pick this tool over those.
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 four parameters (including the quirky advisory cap on 'count' and the exact-one-of username/user_id rule) are already fully documented in the schema. The description's brief 'Paginate with cursor' adds nothing beyond that. Baseline 3 applies.
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?
States a specific verb and resource ('List the accounts that a given user follows') and immediately says what it returns ('profile data for each account followed'). An agent can distinguish this from twitter_user_followers (which is the inverse direction) directly from the description.
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 use-case hints ('mapping a user's information sources, influencer networks, or competitor monitoring lists') but no explicit when-to-use rules. Critically, it does not differentiate itself from the near-identical sibling twitter_user_following_v2, nor state the username/user_id exclusivity described only in the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_following_v2ARead-only
List the accounts a user follows using the v2 response shape (richer profile fields and more reliable cursoring). Same inputs as twitter_user_following; prefer this when you need the fuller v2 payload or are paging deep following lists.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| user_id | No | Numeric Twitter/X user id (e.g. "44196397"). Provide exactly one of username or user_id. | |
| username | No | Twitter/X handle WITHOUT the leading @ (e.g. "elonmusk", "openai"). Provide exactly one of username or user_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=true), so the description's job is to add behavior beyond that. It does: it discloses that cursoring is 'more reliable' and profile fields are 'richer,' which is real behavioral context for choosing between the two variants. It stops short of auth requirements, rate limits, or pagination freshness limits, so not a full 5.
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 tightly written sentences with zero waste; the v2 response-shape distinction is front-loaded before the preference guidance. Every clause 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 read-only list tool with a fully documented schema and annotations covering safety, the description supplies what's needed to pick this over its v1 sibling. Since no output schema exists, it partially compensates by noting 'richer profile fields,' though it doesn't enumerate them. Adequate overall.
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 the schema already documents count, cursor, user_id, and username in detail. The description adds nothing parameter-specific beyond 'same inputs as twitter_user_following,' so the baseline 3 applies.
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?
States a specific verb and resource ('List the accounts a user follows') and explicitly differentiates itself from the sibling twitter_user_following by naming it and explaining the v2 payload differences. An agent can distinguish this from twitter_user_following, twitter_user_followers_v2, and twitter_user_followers without opening any schema.
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?
Names the alternative ('Same inputs as twitter_user_following') and gives explicit selection conditions: 'prefer this when you need the fuller v2 payload or are paging deep following lists.' The when-to-use and the alternative tool are both spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_infoARead-only
Get a user's complete public profile by their @handle: display name, bio, follower count, following count, verification status, location, website, account creation date, and pinned tweet. Use this before fetching tweets or followers to confirm the account exists and resolve the numeric user_id.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | Twitter/X handle WITHOUT the leading @ (e.g. 'elonmusk', 'openai', 'sama'). |
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 disclosed. The description adds that it resolves the numeric user_id, but no further behavioral details are provided.
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 sentences, front-loaded with the main function, and contains 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 the simple tool (one parameter, no output schema) and presence of annotations, the description covers purpose, usage, output fields, and parameter format. Missing authentication mention but not critical.
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 the same detail as the tool description (handle without leading @, examples). The tool description does not add new parameter information 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 'Get a user's complete public profile' and lists specific fields. It differentiates from siblings like twitter_user_info_by_id by specifying 'by their @handle'.
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 says 'Use this before fetching tweets or followers to confirm the account exists and resolve the numeric user_id,' providing clear when-to-use guidance. It lacks explicit exclusions but is still helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_info_by_idARead-only
Get a user's complete public profile by their numeric user id. Identical response to twitter_user_info. Use this when you already have a user_id from a previous API response and want to avoid a handle lookup.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | Numeric Twitter/X user id (e.g. '44196397' for @elonmusk). Found in responses from other tools as user_id or author_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds that it returns 'complete public profile' and is identical to twitter_user_info, providing useful context beyond 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 main action, no redundancy. 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?
Simple tool with one required param and read-only nature. Description, schema, and annotations together provide sufficient context for an agent to use correctly. Could be improved by mentioning return fields, but not essential given the tool's simplicity.
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 a detailed description for user_id. Tool description only mentions 'numeric user id', adding no extra meaning beyond what schema provides. 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?
Clearly states verb (get), resource (public profile), and method (by numeric id). Explicitly distinguishes from sibling twitter_user_info by noting identical response but different input.
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 states when to use: when user_id is already known and handle lookup is to be avoided. Implicitly contrasts with twitter_user_info which likely requires a handle.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_likesARead-only
Get the tweets a user has liked (their public Likes tab), most recent first. Returns each liked tweet with author and metrics, plus a pagination cursor. Use this to infer interests or find content a user has endorsed. Returns empty if the account hides its likes. Requires the numeric user_id (resolve a handle first with twitter_user_info).
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| user_id | Yes | Numeric Twitter/X user id (e.g. '44196397'). Required: this endpoint does not accept a username. Resolve a handle to a user_id first with twitter_user_info. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and non-destructive behavior, so the safety profile is covered. The description adds meaningful context beyond that: ordering, that it returns a pagination cursor, and the edge case that an account hiding likes yields an empty result.
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?
Four sentences, front-loaded with the core action and return shape before usage and prerequisites. The 'infer interests' sentence is slightly ancillary but earns its place by signaling intent. No filler or repetition.
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?
With no output schema, the description compensates by describing the return shape (liked tweets with author and metrics, plus a pagination cursor) and an edge case. Combined with annotations and full schema coverage, an agent has enough to call it correctly, though return detail is summarized rather than exhaustive.
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 the schema already documents count, cursor, and user_id thoroughly (including the advisory page-size caveat). The description only reinforces the numeric-user_id requirement already covered by the schema, adding no new parameter semantics. Baseline 3 applies.
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?
States a specific verb and resource (get tweets a user has liked), scopes it to the public Likes tab, and specifies ordering (most recent first). This clearly distinguishes it from siblings like twitter_user_tweets, twitter_bookmarks, and twitter_favorite_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?
Gives an explicit use case ('infer interests or find content a user has endorsed') and states the prerequisite to resolve a handle with twitter_user_info first. It does not name an explicit when-not or a directly competing alternative, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_loginA
Log in to X with a username and password (plus totp_secret if the account has 2FA) and store the resulting session against your API key, so the authenticated-account reads and the write tools then act as that account. On success returns { ok, username, message }; it does NOT return the session cookies (auth_token/ct0 are minted and kept server-side, never sent back). Typical failures: bad_credentials (401), two_factor_required (400, add totp_secret), captcha_required (422), acid_challenge (409, confirm the login from the account then retry). This handles real account credentials; never log or echo the values you pass.
| Name | Required | Description | Default |
|---|---|---|---|
| password | Yes | The X account password. | |
| username | Yes | The X account username/handle (without the leading @). Some accounts also accept the login email here. | |
| proxy_url | No | Optional. HTTP or SOCKS proxy URL to perform the login through, e.g. 'http://user:pass@host:port'. Stored with the session and reused for its later requests. Omit to log in directly from the service's own IP. A residential proxy is recommended: X treats datacenter logins as automated. | |
| user_agent | No | Optional. Browser User-Agent to mint and use the session with. Defaults to a current Chrome UA. Keep it consistent with the environment the account normally signs in from; a mismatch between the UA and the session is itself a signal to X. | |
| totp_secret | No | The account's base32 two-factor (TOTP) secret. Required only when the account has 2FA enabled. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, destructiveHint=false), the description discloses that it stores a session server-side and does not return cookies, warns against logging credentials, and lists typical failure states (bad_credentials, two_factor_required, etc.). This is valuable transparency 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?
The description is a single dense yet compact paragraph that efficiently packs key info: purpose, dependencies, return format, typical failures, and security advice. It is front-loaded with the core purpose and doesn't include filler. Slightly dense but concise overall.
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 complexity (5 parameters, no output schema), the description fully covers the needed context: what it does, what it doesn't return, typical error codes with suggestions, and critical security warnings. It leaves no major gaps for an agent to misuse 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?
With 100% schema description coverage, the schema already documents each parameter. The description adds context: totp_secret is only required if 2FA, proxy_url is recommended to be a residential proxy (X treats datacenter logins as automated), user_agent should match the account's typical environment. These additional notes enhance parameter understanding 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 'Log in' and targets the resource 'X' (account). It clearly states the purpose: authenticate and store the session for subsequent authenticated reads/writes. It distinguishes from siblings (e.g., twitter_account_me) by being the login action and explicitly not returning session cookies.
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 provides clear context for when to use: to authenticate before other account-scoped tools. It gives typical failure codes and how to resolve them. It doesn't explicitly mention when not to use or alternatives, but given the sibling set, there is no obvious alternative. Thus it lacks explicit exclusions but still useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_mediaARead-only
Get the images and videos a user has posted. Returns media-containing tweets with URLs to the media files, dimensions, and type (photo/video/animated_gif). Paginate with cursor. Use this to pull a user's visual content history.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| user_id | No | Numeric Twitter/X user id (e.g. "44196397"). Provide exactly one of username or user_id. | |
| username | No | Twitter/X handle WITHOUT the leading @ (e.g. "elonmusk", "openai"). Provide exactly one of username or user_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so safety is covered. The description adds real behavioral context beyond that: the return payload shape (media URLs, dimensions, type including photo/video/animated_gif) and cursor-based pagination.
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, front-loaded with the core purpose, and no filler. The final sentence is somewhat redundant with the first but is short enough not to waste much space.
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?
There is no output schema, so the description usefully covers what comes back (media URLs, dimensions, media type) plus pagination behavior. It omits any statement about page-size limits, though the schema's count field already explains the upstream cap, so little is missing.
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%, and the cursor parameter is thoroughly documented in the schema itself, so the baseline is 3. The description's only parameter-related addition is mentioning cursor pagination, which duplicates what the schema already explains in more detail.
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?
States a specific verb and resource: retrieves images and videos a user has posted, and clarifies these are media-containing tweets. This clearly distinguishes it from siblings like twitter_user_tweets, twitter_user_likes, and twitter_user_mentions.
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 closing sentence gives a use case ('pull a user's visual content history'), which implies when to use it, but no explicit exclusions or named alternatives are offered against the many sibling tweet-fetching tools. Usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_mentionsARead-only
Get recent public tweets that mention (@ tag) a user. Searches for tweets directed at the username using the to: operator. Returns matching tweets with author info and metrics. Paginate with cursor. Use this to monitor brand mentions, replies directed at an account, or public conversations about a person.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| username | Yes | Twitter/X handle WITHOUT the leading @ of the user to find mentions for (e.g. 'openai' to find tweets mentioning @openai). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, non-destructive, and open-world, so the safety profile is covered. The description adds real behavioral context beyond that: the to: operator search mechanism, the return contents (author info and metrics), and cursor pagination. It stops short of 5 because it doesn't note rate limits or result-cap quirks.
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?
Front-loaded with the core purpose, then mechanism, return shape, pagination, and use cases in four tight sentences with no filler. Every sentence carries distinct 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?
With read-only/open-world annotations and no output schema, the description is largely self-sufficient: it explains purpose, mechanism, returns, and pagination. It could add a note on the upstream page-size quirk already present in the schema, but nothing essential is missing for correct invocation.
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 three parameters (username, count, cursor) are already fully documented in the schema, including the count advisory. The description only echoes pagination with cursor and adds no syntax or format detail beyond the schema. Baseline 3 applies.
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?
States a specific verb (Get) and resource (recent public tweets mentioning a user) and clarifies the mechanism via the to: operator, which distinguishes it from a plain user-timeline tool. It does not explicitly name or contrast against the closest siblings like twitter_user_tweets or twitter_tweet_replies, so it stops short of a 5.
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?
Gives concrete when-to-use cases (monitor brand mentions, replies directed at an account, public conversations about a person). No when-not guidance or named alternative tool, so it lacks the routing/exclusion detail a 5 would need.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_searchARead-only
Search for Twitter/X user accounts by name, keyword, or topic. Returns matching profiles (username, display name, bio, follower count, verification status) with a pagination cursor. Use this to discover accounts in a niche, find brand handles, or locate a person when you only know their name.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| query | Yes | Name, keyword, or topic to search accounts for. Examples: 'OpenAI', 'AI researcher', 'tech founder'. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered structurally. The description adds the return shape (username, display name, bio, follower count, verification status) and the presence of a pagination cursor, but discloses no rate limits, auth requirements, or result-capping quirks that the schema reveals for count.
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 tight sentences: capability first, then use cases. Every clause earns its place with no redundancy or filler.
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?
With no output schema, the description correctly compensates by enumerating returned profile fields, and the schema covers all three parameters. It is nearly complete for a read-only search tool; only the sibling-tool routing and upstream pagination quirk are left to the schema to surface.
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%, and the schema itself carries rich detail (the count advisory cap, cursor semantics, query examples), so the baseline applies. The description only echoes 'with a pagination cursor' and adds no syntax or formatting guidance 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?
States a specific verb and resource ('Search for Twitter/X user accounts') plus the search dimensions (name, keyword, topic), which is clearly distinct from fetch-style siblings like twitter_user_info or twitter_user_info_by_id. However, it never names or distinguishes itself from the closest overlapping sibling, twitter_advanced_search, so an agent must infer the boundary.
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?
Gives three concrete use cases (discover accounts in a niche, find brand handles, locate a person by name), which is clear context for when to reach for this tool. It stops short of exclusions or routing, e.g. 'use twitter_user_info when you already have a username', so it isn't a full when/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_statusARead-only
Check whether a Twitter/X account is alive, suspended, or deleted. Returns a status field that is one of 'alive', 'suspended', 'not_found', or 'unavailable', plus the numeric id when the account is alive and X's own reason when it gives one. Use this instead of twitter_user_info when the QUESTION is whether the account still exists: user info answers a suspended account, a deleted account, and a handle that never existed all the same way, so it cannot tell a ban from a typo. Every outcome here is a successful response, so read the status field rather than treating a suspension as an error. A protected (private) account counts as alive, since protection is a visibility setting and not an account state.
| Name | Required | Description | Default |
|---|---|---|---|
| userName | Yes | Twitter/X handle WITHOUT the leading @ (e.g. 'elonmusk', 'openai', 'sama'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=true, openWorldHint=true, destructiveHint=false) already declare a safe read operation; the description enriches this by explaining that every outcome is a successful HTTP response, that protected accounts count as 'alive', and how to interpret X's own reason. 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 long but well-structured and front-loaded: purpose first, then return semantics, then comparisons, then edge cases. Every sentence contributes—the only quibble is the length could be trimmed, but nothing is wasteful.
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 single-parameter status-check tool with no output schema, the description provides everything needed: all four status values, conditions for each, numeric id disclosure, and the protected-account edge case. It is complete for the tool's complexity level.
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%—the single parameter already includes a clear description with examples ('WITHOUT the leading @ (e.g. 'elonmusk', 'openai', 'sama')'). The description adds no parameter-specific info, but the schema carries the full burden, so the baseline 3 applies.
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 opens with a specific verb+resource+scope ('Check whether a Twitter/X account is alive, suspended, or deleted') and enumerates the exact statuses returned. It further distinguishes itself from twitter_user_info by explaining that the sibling cannot distinguish a ban from a typo, which is strong differentiation in a large sibling list.
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 names the alternative tool ('Use this instead of twitter_user_info') and gives a precise decision rule—when the QUESTION is whether the account still exists—with a rationale (user info answers all miss-cases the same way). Adds operational guidance: 'read the status field rather than treating a suspension as an error.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_tweetsARead-only
Get a user's recent posting timeline. IMPORTANT: this endpoint does NOT filter server-side, so the response routinely includes retweets and replies alongside original posts. Every item carries is_retweet, is_reply and is_quote booleans, so filter client-side on those flags if you need originals only, and read author.username rather than assuming every item was written by the requested user (a retweet's retweeted_tweet holds the original author). Returns tweet text, id, timestamp, and engagement metrics. Paginate with cursor to go further back. To pull a back-catalogue in bulk with fewer round-trips, use twitter_user_tweets_complete (which is also cursor-paged, not one-shot).
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| user_id | No | Numeric Twitter/X user id (e.g. "44196397"). Provide exactly one of username or user_id. | |
| username | No | Twitter/X handle WITHOUT the leading @ (e.g. "elonmusk", "openai"). Provide exactly one of username or user_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive), and the description adds non-obvious behavior beyond them: no server-side filtering, retweets/replies appearing in results, and the author.username pitfall where a retweet's author differs from the requested user. That is exactly the operational nuance an agent needs.
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?
Front-loads the critical caveat ('does NOT filter server-side') and the client-side filter instruction before the return-shape and pagination notes. Dense but every sentence carries actionable information with no filler.
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?
With no output schema, the description compensates by enumerating returned fields (text, id, timestamp, engagement metrics) and the retweet/reply flags. Combined with the pagination and alternative-tool guidance, an agent has everything needed to call it correctly.
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%, and the schema itself documents cursor, count (including the upstream 13-20 advisory cap), and the username/user_id exclusivity. The description only restates cursor pagination, so it adds little semantic meaning beyond structured data. Baseline 3 applies.
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?
Specific verb+resource ('Get a user's recent posting timeline') with an explicit scope statement about unfiltered retweets/replies. It names the sibling it is not (twitter_user_tweets_complete), so an agent can distinguish it without opening schemas.
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 routes the agent: use twitter_user_tweets_complete for bulk back-catalogue with fewer round-trips, and paginate this one with cursor. It also states the client-side filtering condition (is_retweet/is_reply/is_quote) for callers who need originals only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_tweets_and_repliesARead-only
Get a user's full activity timeline: their original tweets AND replies to others. Useful for understanding how someone engages with a community, not just what they post. Paginate with cursor. Items carry is_retweet, is_reply and is_quote booleans; filter on those if you need a specific subset. Note that twitter_user_tweets does NOT filter replies or retweets out either, so on many accounts the two endpoints return overlapping or identical pages.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| user_id | No | Numeric Twitter/X user id (e.g. "44196397"). Provide exactly one of username or user_id. | |
| username | No | Twitter/X handle WITHOUT the leading @ (e.g. "elonmusk", "openai"). Provide exactly one of username or user_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, open-world), so credit goes to the added context: that this endpoint does not filter retweets/replies and that it produces overlapping/identical pages with twitter_user_tweets. This overlap disclosure is genuinely useful behavior an agent cannot get from annotations or 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?
Four tight sentences, front-loaded with the core purpose before the pagination and overlap notes. Each sentence earns its place, though the final caveat sentence is slightly wordy.
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 usefully surfaces the is_retweet/is_reply/is_quote booleans and the cursor-based paging that an agent needs to interpret results. It does not describe the response envelope or next_cursor field names, but coverage is otherwise sufficient.
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 the schema already documents user_id/username exclusivity, the cursor format, and the count cap. The description only echoes 'paginate with cursor', adding no syntax or format detail beyond the schema. 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?
States a specific verb and resource ('Get a user's full activity timeline') and explicitly scopes it to original tweets AND replies. It names and differentiates a sibling (twitter_user_tweets), so an agent can separate the two without opening schemas.
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?
Gives a clear use case (understanding how someone engages with a community) and names the overlapping alternative twitter_user_tweets with the condition under which pages overlap. It stops short of explicit when-not-to-use guidance, but the routing context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_tweets_completeARead-only
Get a large batch of a user's tweet history in one call, auto-paginating server-side across upstream pages. Heavier than twitter_user_tweets; use it to pull a back-catalogue with fewer round-trips. Returns { count, next_cursor, has_more, tweets }. IMPORTANT, this does NOT guarantee the whole history in one call: next_cursor is the completion signal, NOT count. A non-null next_cursor means the history is TRUNCATED and more remains, so call this tool again with cursor set to that value, and repeat until next_cursor is null (has_more is the same signal as a boolean). Each call is bounded by BOTH max and a server-side wall-clock budget, so a response can be truncated even when it returned fewer tweets than you asked for, which is why count must never be used to decide whether you are done. Requires the numeric user_id (resolve a handle first with twitter_user_info). Billed a flat $0.0024 per call regardless of how many tweets come back, so fewer, larger calls are cheaper than many small ones.
| Name | Required | Description | Default |
|---|---|---|---|
| max | No | Target number of tweets to collect in this call. Defaults to 200 when omitted. This is a MINIMUM target, not a hard cap: pages arrive in whole chunks, so a response may contain up to one page (<=100) more than requested (measured live 2026-09-05: max=10 returned 20). Never assume count === max. Twitter's ~3200-per-user history ceiling still applies overall. | |
| cursor | No | Resume point from a previous response's next_cursor. Omit on the first call. Pass it back to continue collecting where the last call stopped, and keep repeating while next_cursor is non-null. | |
| user_id | Yes | Numeric Twitter/X user id. Required: this endpoint does not accept a username. Resolve a handle to a user_id first with twitter_user_info. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly/openWorld/non-destructive, but the description adds substantial behavioral context beyond them: server-side auto-pagination, a wall-clock budget that can truncate responses, and the critical rule that next_cursor (not count) is the completion signal. The flat $0.0024 per-call cost is also disclosed.
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?
Front-loaded with purpose, then pagination caveats, then prerequisites and cost. It is somewhat long and restates the count-vs-next_cursor warning in multiple phrasings, but nearly every sentence carries information an agent needs to avoid a truncation mistake.
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?
Although no output schema exists, the description enumerates the return shape ({ count, next_cursor, has_more, tweets }) and explains how to interpret each field for pagination. For a paginated, billed, truncation-prone read tool, nothing essential is missing.
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 schema already documents all three params, but the description reinforces the semantics that matter operationally: user_id must be numeric, and cursor must be fed back from the prior next_cursor and repeated until null. It adds genuine usage meaning beyond field documentation, though not format/syntax detail.
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+resource ('Get a large batch of a user's tweet history') and explicitly positions itself against the sibling 'twitter_user_tweets' ('Heavier than twitter_user_tweets'). An agent can distinguish the two without opening either schema.
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 states when to prefer this tool ('pull a back-catalogue with fewer round-trips') versus the lighter sibling, gives the prerequisite (resolve a handle with twitter_user_info), and explains the repeat-until-null loop. The billing note ('fewer, larger calls are cheaper') further guides call strategy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_user_verified_followersBRead-only
List a user's followers who have a verified account (checkmark). Filters the follower list to verified accounts only, useful for identifying notable or institutional followers. Paginate with cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Requested page size, capped at 200. Advisory only for this endpoint: X's own search backend typically returns around 13 to 20 tweets per page regardless of the value requested here, an upstream limit, not something this API controls. To retrieve more results, page with the cursor from the previous response rather than raising this value. | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor field. Omit on the first call; pass on subsequent calls to fetch the next page. | |
| user_id | No | Numeric Twitter/X user id (e.g. "44196397"). Provide exactly one of username or user_id. | |
| username | No | Twitter/X handle WITHOUT the leading @ (e.g. "elonmusk", "openai"). Provide exactly one of username or user_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds no behavioral context beyond that and the pagination remark, which is already documented in the cursor schema field; nothing about result volume, rate limits, or auth scope is disclosed.
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 short sentences, front-loaded with the defining filter and ending with the operational hint. Nothing is padded, though the third sentence largely restates schema content.
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 paginated read tool with full schema coverage and no output schema, the description covers what the tool returns (verified followers only) and how to page. It omits any note about who may query this or the practical page-size ceiling, but those live in the 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%, including the detailed count cap, the upstream 13-20-per-page limit, and the mutually exclusive username/user_id pairing. The description's only parameter-related statement ("Paginate with cursor") duplicates the schema, so baseline 3 applies.
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?
States a specific verb and resource ("List a user's followers") plus the defining filter ("who have a verified account"), which implicitly separates it from twitter_user_followers and twitter_list_followers. It never names those siblings explicitly, so an agent must infer the routing rather than read it.
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?
"Useful for identifying notable or institutional followers" gives a use case but no when-to-use-vs-when-not guidance and no named alternative. An agent can infer that the unfiltered twitter_user_followers is the fallback, but the description never says so.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_x_user_stream_add_userA
Compat drop-in for twitter_monitor_create using an x_user_stream-shaped request/response envelope: watch an X account for new posts, translated onto the same underlying monitor system. Free per call. Prefer twitter_monitor_create for new integrations; this exists for migrating an existing x_user_stream-shaped integration without a rewrite.
| Name | Required | Description | Default |
|---|---|---|---|
| x_user_name | Yes | The X username to watch, without the @. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate it's not read-only (readOnlyHint=false) and not destructive (destructiveHint=false). The description adds context by saying 'watch an X account' implying a monitoring setup, but it doesn't explicitly disclose potential side effects like creating a monitor or adding to an existing stream. However, it doesn't contradict annotations, and the annotation provides a baseline, so a score of 4 is appropriate.
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 bit verbose with the colon-separated explanatory phrase and the migration note, but it remains focused and informative. It could be slightly more concise, but every sentence adds value (purpose, migration context, cost).
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 there is no output schema, the description doesn't explain what the tool returns, but it's a compat drop so the output might be implied. It covers the main purpose, usage, and the existence of an alternative. It doesn't mention error conditions or limitations, but for a simple one-parameter tool, 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?
The only parameter (x_user_name) is described clearly: 'The X username to watch, without the @.' This provides both the meaning and format. Schema coverage is 100%, and the description adds value by specifying the absence of '@'.
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: 'watch an X account for new posts' and explicitly distinguishes it from twitter_monitor_create by positioning it as a compat drop for migration. The verb 'watch' and resource 'X account' are specific, and it differentiates from the sibling tool twitter_monitor_create.
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 explicit usage guidance: 'Prefer twitter_monitor_create for new integrations; this exists for migrating an existing x_user_stream-shaped integration without a rewrite.' It also notes 'Free per call' which is a cost consideration. This clearly indicates when to use and when to avoid the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twitter_x_user_stream_list_usersARead-only
Compat drop-in for twitter_monitor_list using an x_user_stream-shaped envelope: list every account you are currently tweet-monitoring. Honest field mapping, not fabricated: x_user_id is always null (this API stores no numeric Twitter user id) and is_monitor_profile is always 0 (profile-change monitoring is not a capability this API has). Free per call.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description honestly documents that x_user_id is always null and is_monitor_profile is always 0, plus 'Free per call.' This is rich behavioral context and does not contradict any 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 short sentences: the core purpose in the first, important field caveats in the second, and cost in the third. It is front-loaded and contains no filler.
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?
There is no output schema, so the description carries the burden for return behavior. It explains key envelope fields and the monitoring scope, but does not enumerate the full output shape or pagination; still sufficient for a zero-param list 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?
The tool has zero parameters, so the baseline is 4. No parameter documentation is needed, and the description adds useful output-field semantics instead.
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 and resource: 'list every account you are currently tweet-monitoring.' It also explicitly positions itself as a 'Compat drop-in for twitter_monitor_list', which distinguishes it from sibling list/add/remove 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?
'Compat drop-in for twitter_monitor_list' gives clear context that this is the x_user_stream-shaped replacement for that sibling tool. It implies when to use it relative to the native monitor list, though it does not spell out 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.
twitter_x_user_stream_remove_userBDestructive
Compat drop-in for twitter_monitor_delete using an x_user_stream-shaped envelope: stop watching an account. Irreversible. Free per call.
| Name | Required | Description | Default |
|---|---|---|---|
| id_for_user | Yes | The monitor id, from twitter_x_user_stream_list_users. Same value as a twitter_monitor_* tool's monitor id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the action is irreversible, which is a key side effect. However, it does not mention other potential consequences (e.g., immediate stop of tweets, data retention) or the exact behavior beyond stopping the watch.
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, using two sentences to convey the function, compatibility, irreversibility, and cost. No 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?
While the core action is described, the description lacks details on how this tool fits into the larger workflow (e.g., when to use it after adding a user) and does not clarify the relationship with twitter_monitor_delete beyond a vague 'drop-in'. More context 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 parameter id_for_user is explained as 'The monitor id, from twitter_x_user_stream_list_users. Same value as a twitter_monitor_* tool's monitor id.' This clarifies its source and equivalency, making it clear.
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 primary function: 'stop watching an account'. It also positions it as a compat drop-in for twitter_monitor_delete, which adds context, though the 'x_user_stream-shaped envelope' phrase is somewhat obscure.
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 mentions being a drop-in for twitter_monitor_delete but does not explicitly state when to use this tool versus that alternative. There is no guidance on prerequisites or scenarios where this specific tool is preferred.
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.
99 tool updates
v0.9.9- First observed
twitter_account_me - First observed
twitter_account_payments - First observed
twitter_advanced_search - First observed
twitter_article_create - First observed
twitter_article_delete - First observed
twitter_article_get - First observed
twitter_article_list - First observed
twitter_article_publish - First observed
twitter_article_unpublish - First observed
twitter_article_update_content - First observed
twitter_article_update_cover_media - First observed
twitter_article_update_title - First observed
twitter_blocking - First observed
twitter_bookmark_folder_timeline - First observed
twitter_bookmark_folders - First observed
twitter_bookmark_search - First observed
twitter_bookmark_tweet - First observed
twitter_bookmarks - First observed
twitter_check_follow_relationship - First observed
twitter_community_about - First observed
twitter_community_info - First observed
twitter_community_members - First observed
twitter_community_memberships - First observed
twitter_community_moderators - First observed
twitter_community_search - First observed
twitter_community_tweets - First observed
twitter_create_tweet - First observed
twitter_customer_session - First observed
twitter_customer_session_delete - First observed
twitter_customer_session_status - First observed
twitter_delete_tweet - First observed
twitter_dm_conversation - First observed
twitter_dm_list - First observed
twitter_dm_send - First observed
twitter_favorite_tweet - First observed
twitter_feedback_get - First observed
twitter_feedback_list - First observed
twitter_feedback_send - First observed
twitter_follow_user - First observed
twitter_followers_you_know - First observed
twitter_grok_chat - First observed
twitter_grok_config - First observed
twitter_home_timeline - First observed
twitter_list_add_member - First observed
twitter_list_create - First observed
twitter_list_followers - First observed
twitter_list_members - First observed
twitter_list_remove_member - First observed
twitter_list_timeline - First observed
twitter_list_tweets - First observed
twitter_media_status - First observed
twitter_media_upload - First observed
twitter_monitor_account_health - First observed
twitter_monitor_create - First observed
twitter_monitor_delete - First observed
twitter_monitor_deliveries - First observed
twitter_monitor_health - First observed
twitter_monitor_list - First observed
twitter_monitor_update - First observed
twitter_monitor_webhook_create - First observed
twitter_monitor_webhook_delete - First observed
twitter_monitor_webhook_list - First observed
twitter_monitor_webhook_redrive - First observed
twitter_monitor_webhook_test - First observed
twitter_muting - First observed
twitter_retweet - First observed
twitter_spaces_info - First observed
twitter_trends - First observed
twitter_trends_locations - First observed
twitter_tweet_detail - First observed
twitter_tweet_quotes - First observed
twitter_tweet_replies - First observed
twitter_tweet_retweeters - First observed
twitter_tweet_thread - First observed
twitter_unbookmark_tweet - First observed
twitter_unfavorite_tweet - First observed
twitter_unfollow_user - First observed
twitter_unretweet - First observed
twitter_user_about - First observed
twitter_user_affiliates - First observed
twitter_user_followers - First observed
twitter_user_followers_v2 - First observed
twitter_user_following - First observed
twitter_user_following_v2 - First observed
twitter_user_info - First observed
twitter_user_info_by_id - First observed
twitter_user_likes - First observed
twitter_user_login - First observed
twitter_user_media - First observed
twitter_user_mentions - First observed
twitter_user_search - First observed
twitter_user_status - First observed
twitter_user_tweets - First observed
twitter_user_tweets_and_replies - First observed
twitter_user_tweets_complete - First observed
twitter_user_verified_followers - First observed
twitter_x_user_stream_add_user - First observed
twitter_x_user_stream_list_users - First observed
twitter_x_user_stream_remove_user
TDQS
Scored across 99 tools
Many tools have genuinely overlapping purposes: twitter_user_tweets vs twitter_user_tweets_and_replies (descriptions admit they return 'overlapping or identical pages'), twitter_user_tweets vs twitter_user_tweets_complete, twitter_user_followers/following vs their _v2 twins, and the twitter_x_user_stream_* compat drop-ins duplicating twitter_monitor_* operations. The descriptions are unusually thorough at drawing the boundaries and warning about pitfalls, which prevents outright misselection, but the sheer number of near-duplicate surfaces keeps this from being clean.
Tool names use a strict namespace_topic_action snake_case pattern throughout (twitter_user_info, twitter_tweet_replies, twitter_list_members, twitter_monitor_webhook_create). Verb/noun ordering is predictable within each family, and even the few outliers (twitter_grok_chat, twitter_account_me, twitter_trends) read consistently with the surrounding convention.
99 tools is far beyond what any agent can reliably navigate in one context; the surface spans tweets, users, lists, communities, Spaces, DMs, bookmarks, articles, webhooks, monitors, sessions and feedback. Many of the 99 are redundant versions (v1/v2 pairs, compat shims) that inflate the count without adding capability.
The surface is exceptionally complete: full read/write CRUD across tweets, articles, lists, monitors and webhooks, plus session lifecycle, media upload/status, DMs, bookmarks, communities, Spaces and feedback. Both read and write paths have their create/update/delete counterparts and lifecycle edge cases are explicitly covered.
Maintenance
Related MCP Connectors
Twitter/X read-only MCP server — 12 tools: search, users, tweets, followers, timelines, trends.
X / Twitter public post, comment, reply, user, and search tools.
X (formerly Twitter): X (formerly Twitter) public and private data API for search, posts (Tweets).
X (formerly Twitter) posts, profiles, and search for AI agents. Free key, self-minted, no signup.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to access Twitter/X data including user profiles, tweets, search, and follower events via a set of MCP tools.1MIT
- AlicenseNot gradedqualityDmaintenanceProvides programmatic X (Twitter) engagement via MCP, offering 24 tools for search, timelines, notifications, bookmarks, profiles, and tweet actions through a headless browser.MIT
- AlicenseBqualityDmaintenanceEnables interacting with Twitter/X through natural language, including searching tweets, posting, sending DMs, and managing timelines via any MCP client.8MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to automate Twitter/X tasks (scraping, posting, following, etc.) via 140+ MCP tools, no API key required.340 npm1Apache 2.0