Skip to main content
Glama

x-mcp

An MCP (Model Context Protocol) server that gives AI agents full access to the X (Twitter) API. Post tweets, search, read timelines, like, retweet, upload media -- all through natural language.

Works with Claude Code, Claude Desktop, OpenAI Codex, Cursor, Windsurf, Cline, and any other MCP-compatible client.

If you're an LLM/AI agent helping a user set up this project, read LLMs.md for step-by-step instructions you can walk the user through.


What Can It Do?

Category

Tools

What You Can Say

Status

Post

post_tweet, quote_tweet, delete_tweet

"Post 'hello world' on X"

OK

Read

get_tweet, search_tweets, get_timeline, get_mentions

"Show me @elonmusk's latest posts"

OK

Users

get_user, get_followers, get_following

"Look up @openai" / "Who does this user follow?"

OK

Engage

retweet

"Retweet this"

OK

Media

upload_media

"Upload this image and post it with the caption..."

OK

Analytics

get_metrics

"How many impressions did my last post get?"

OK

Bookmarks

get_bookmarks, bookmark_tweet, unbookmark_tweet

"Show my bookmarks"

Requires Basic+ tier

Reply

reply_to_tweet

"Reply to this tweet saying thanks"

Restricted (see below)

Like

like_tweet

"Like that tweet"

Removed on Free tier (see below)

Accepts tweet URLs or IDs interchangeably -- paste https://x.com/user/status/123 or just 123.


Related MCP server: tweetly

Setup

1. Clone and build

git clone https://github.com/INFATOSHI/x-mcp.git
cd x-mcp
npm install
npm run build

2. Get your X API credentials

You need 5 credentials from the X Developer Portal. Here's exactly how to get them:

a) Create an app

  1. Go to the X Developer Portal

  2. Sign in with your X account

  3. Go to Apps in the left sidebar

  4. Click Create App (you may need to sign up for a developer account first)

  5. Give it a name (e.g., my-x-mcp)

  6. You'll immediately see your Consumer Key (API Key), Secret Key (API Secret), and Bearer Token

  7. Save all three now -- the secret won't be shown again

b) Enable write permissions

By default, new apps only have Read permissions. You need Read and Write to post tweets, like, retweet, etc.

  1. In your app's page, scroll down to User authentication settings

  2. Click Set up

  3. Set App permissions to Read and write

  4. Set Type of App to Web App, Automated App or Bot

  5. Set Callback URI / Redirect URL to https://localhost (required but won't be used)

  6. Set Website URL to any valid URL (e.g., https://x.com)

  7. Click Save

c) Generate access tokens (with write permissions)

After enabling write permissions, you need to generate (or regenerate) your Access Token and Secret so they carry the new permissions:

  1. Go back to your app's Keys and Tokens page

  2. Under Access Token and Secret, click Regenerate

  3. Save both the Access Token and Access Token Secret

If you skip step (b) before generating tokens, your tokens will be Read-only and posting will fail with a 403 error.

3. Configure credentials

Copy the example env file and fill in your 5 credentials:

cp .env.example .env

Edit .env:

X_API_KEY=your_consumer_key
X_API_SECRET=your_secret_key
X_BEARER_TOKEN=your_bearer_token
X_ACCESS_TOKEN=your_access_token
X_ACCESS_TOKEN_SECRET=your_access_token_secret

Connect to Your Client

Pick your client below. You only need to follow one section.

Claude Code

claude mcp add --scope user x-twitter -- node /ABSOLUTE/PATH/TO/x-mcp/dist/index.js

Replace /ABSOLUTE/PATH/TO/x-mcp with the actual path where you cloned the repo. Then restart Claude Code.

Claude Desktop

Add to your claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "x-twitter": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/TO/x-mcp/dist/index.js"],
      "env": {
        "X_API_KEY": "your_consumer_key",
        "X_API_SECRET": "your_secret_key",
        "X_ACCESS_TOKEN": "your_access_token",
        "X_ACCESS_TOKEN_SECRET": "your_access_token_secret",
        "X_BEARER_TOKEN": "your_bearer_token"
      }
    }
  }
}

Cursor

Add to your Cursor MCP config:

  • Global (all projects): ~/.cursor/mcp.json

  • Project-scoped: .cursor/mcp.json in your project root

{
  "mcpServers": {
    "x-twitter": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/TO/x-mcp/dist/index.js"],
      "env": {
        "X_API_KEY": "your_consumer_key",
        "X_API_SECRET": "your_secret_key",
        "X_ACCESS_TOKEN": "your_access_token",
        "X_ACCESS_TOKEN_SECRET": "your_access_token_secret",
        "X_BEARER_TOKEN": "your_bearer_token"
      }
    }
  }
}

You can also verify the connection in Cursor Settings > MCP Servers.

OpenAI Codex

Option A: CLI

codex mcp add x-twitter --env X_API_KEY=your_consumer_key --env X_API_SECRET=your_secret_key --env X_ACCESS_TOKEN=your_access_token --env X_ACCESS_TOKEN_SECRET=your_access_token_secret --env X_BEARER_TOKEN=your_bearer_token -- node /ABSOLUTE/PATH/TO/x-mcp/dist/index.js

Option B: config.toml

Add to ~/.codex/config.toml (global) or .codex/config.toml (project-scoped):

[mcp_servers.x-twitter]
command = "node"
args = ["/ABSOLUTE/PATH/TO/x-mcp/dist/index.js"]

[mcp_servers.x-twitter.env]
X_API_KEY = "your_consumer_key"
X_API_SECRET = "your_secret_key"
X_ACCESS_TOKEN = "your_access_token"
X_ACCESS_TOKEN_SECRET = "your_access_token_secret"
X_BEARER_TOKEN = "your_bearer_token"

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "x-twitter": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/TO/x-mcp/dist/index.js"],
      "env": {
        "X_API_KEY": "your_consumer_key",
        "X_API_SECRET": "your_secret_key",
        "X_ACCESS_TOKEN": "your_access_token",
        "X_ACCESS_TOKEN_SECRET": "your_access_token_secret",
        "X_BEARER_TOKEN": "your_bearer_token"
      }
    }
  }
}

You can also add it from Windsurf Settings > Cascade > MCP Servers.

Cline (VS Code)

Open Cline's MCP settings (click the MCP Servers icon in Cline's top nav > Configure), then add to cline_mcp_settings.json:

{
  "mcpServers": {
    "x-twitter": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/TO/x-mcp/dist/index.js"],
      "env": {
        "X_API_KEY": "your_consumer_key",
        "X_API_SECRET": "your_secret_key",
        "X_ACCESS_TOKEN": "your_access_token",
        "X_ACCESS_TOKEN_SECRET": "your_access_token_secret",
        "X_BEARER_TOKEN": "your_bearer_token"
      },
      "alwaysAllow": [],
      "disabled": false
    }
  }
}

Other MCP Clients

This is a standard stdio MCP server. For any MCP-compatible client, point it at:

node /ABSOLUTE/PATH/TO/x-mcp/dist/index.js

With these environment variables: X_API_KEY, X_API_SECRET, X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET, X_BEARER_TOKEN.


API Restrictions (as of 2025-2026)

X has progressively restricted what automated/API clients can do. Here's what affects x-mcp:

Likes removed from Free tier (Aug 2025)

The like_tweet endpoint (POST /2/users/:id/likes) was removed from the Free API tier in August 2025. If you're on the Free tier, like_tweet will return a permissions error. Paid tiers (Basic, Pro, Enterprise) are unaffected.

Programmatic replies restricted (Feb 2026)

Replies via the API now only succeed if the original post's author @mentioned you or quoted your post. This applies to all self-serve tiers (Free, Basic, Pro, Pay-Per-Use). Only Enterprise is exempt. Use quote_tweet as a workaround.

Bookmarks require Basic+ tier

Bookmark endpoints have never been available on the Free tier. You need at least Basic ($200/mo) to use get_bookmarks, bookmark_tweet, and unbookmark_tweet.

Post volume caps

Free tier: 500 posts/month. Basic: 10,000/month. Pro: 1,000,000/month.


Troubleshooting

403 "oauth1-permissions" error when posting

Your Access Token was generated before you enabled write permissions. Go to the X Developer Portal, ensure App permissions are set to "Read and write", then Regenerate your Access Token and Secret.

401 Unauthorized

Double-check that all 5 credentials in your .env are correct and that there are no extra spaces or line breaks.

429 Rate Limited

The error message includes exactly when the rate limit resets. Wait until then, or reduce request frequency.

Reply fails with a permissions/restriction error

As of Feb 2026, X restricts programmatic replies via the API on all self-serve tiers. You can only reply if the original author @mentions you or quotes your post. This applies to Free, Basic, Pro, and Pay-Per-Use tiers (Enterprise is exempt). Use quote_tweet as a workaround.

Server shows "Connected" but tools aren't used

Make sure you added the server with the correct scope (user/global, not project-scoped if you want it everywhere), then restart your client.


Rate Limiting

Every response includes rate limit info: remaining requests, total limit, and reset time. When a limit is hit, you get a clear error with the exact reset timestamp.

Pagination

List endpoints return a next_token in the response. Pass it back to get the next page of results. Works on: search_tweets, get_timeline, get_mentions, get_followers, get_following.

Search Query Syntax

The search_tweets tool supports X's full query language:

  • from:username -- posts by a specific user

  • to:username -- replies to a specific user

  • #hashtag -- posts containing a hashtag

  • "exact phrase" -- exact text match

  • has:media / has:links / has:images -- filter by content type

  • is:reply / -is:retweet -- filter by post type

  • lang:en -- filter by language

  • Combine with spaces (AND) or OR


License

MIT

Available Tools

15 tools
delete_tweetC

Delete a post on X by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
tweet_idYesThe tweet ID or URL to delete

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action is a deletion, implying a destructive mutation, but doesn't cover critical aspects like authentication requirements, irreversibility, rate limits, error conditions (e.g., if the tweet doesn't exist), or what happens upon success. For a destructive tool with zero annotation coverage, this is a significant gap.

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

Conciseness5/5

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

The description is a single, direct sentence with zero waste—it states the action, resource, and key input concisely. It's appropriately sized and front-loaded, making it easy for an agent to parse quickly.

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

Completeness2/5

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

Given the tool's complexity (a destructive mutation with no annotations and no output schema), the description is incomplete. It lacks information on behavioral traits, usage context, and expected outcomes. While the schema covers the parameter well, the overall context for safe and effective use is insufficient.

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

Parameters3/5

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

Schema description coverage is 100%, with the parameter 'tweet_id' fully documented in the schema as 'The tweet ID or URL to delete'. The description adds no additional meaning beyond this, such as format examples or constraints. Baseline 3 is appropriate 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.

Purpose4/5

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

The description clearly states the action ('Delete') and the resource ('a post on X by its ID'), making the purpose unambiguous. However, it doesn't differentiate this tool from potential alternatives like 'unlike' or 'unretweet' operations, which might be relevant in a Twitter/X context but aren't present in the sibling list, so it misses the highest score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing to own the tweet), exclusions (e.g., cannot delete others' tweets), or related tools like 'post_tweet' for creation. This leaves the agent with minimal 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.

get_followersC

List followers of a user by their numeric user ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesThe numeric user ID
max_resultsNoNumber of results (1-1000, default 100)
next_tokenNoPagination token from previous response

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions listing followers but does not cover critical aspects like pagination behavior (implied by 'next_token' in schema but not explained), rate limits, authentication needs, or error handling. This leaves significant gaps in understanding how the tool operates beyond basic functionality.

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

Conciseness5/5

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

The description is a single, direct sentence that efficiently conveys the core action without unnecessary words. It is front-loaded with the main purpose, making it easy to parse quickly, and every part of the sentence contributes to understanding the tool's function.

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

Completeness2/5

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

Given the complexity of a tool with 3 parameters, no annotations, and no output schema, the description is insufficient. It lacks details on return values (e.g., format of follower data), error cases, or behavioral traits like pagination. For a data retrieval tool in a social media context, more context is needed to ensure proper usage by an AI agent.

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

Parameters3/5

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

The schema description coverage is 100%, with clear descriptions for all parameters (user_id, max_results, next_token). The description adds minimal value by mentioning 'numeric user ID', which is already covered in the schema. Since the schema does the heavy lifting, the baseline score of 3 is appropriate, as the description does not significantly enhance parameter understanding.

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

Purpose4/5

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

The description clearly states the verb ('List') and resource ('followers of a user'), making the purpose specific and understandable. However, it does not explicitly differentiate from sibling tools like 'get_following' or 'get_user', which might also involve user-related data retrieval, leaving room for ambiguity in tool selection.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, such as 'get_following' (which might list users followed by a user) or 'get_user' (which might retrieve user details). It lacks context on prerequisites, exclusions, or comparisons with siblings, offering minimal usage direction.

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

get_followingC

List who a user follows by their numeric user ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesThe numeric user ID
max_resultsNoNumber of results (1-1000, default 100)
next_tokenNoPagination token from previous response

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions listing by user ID but doesn't disclose behavioral traits like pagination handling (implied by next_token), rate limits, authentication needs, error conditions, or return format. For a read operation with pagination, this is a significant gap in transparency.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. It's appropriately sized for a straightforward tool, with zero waste or redundancy.

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

Completeness2/5

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

Given no annotations, no output schema, and a read operation with pagination (implied by next_token), the description is incomplete. It doesn't explain what the output contains (e.g., list of users, pagination tokens), error handling, or constraints like rate limits. For a tool in a social media context with siblings, more context is needed.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents parameters (user_id, max_results, next_token). The description adds minimal value beyond the schema by specifying 'numeric user ID' for user_id, but doesn't explain parameter interactions or usage nuances. Baseline 3 is appropriate as the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the action ('List') and resource ('who a user follows'), specifying it's by user ID. It distinguishes from siblings like get_followers (who follows the user) and get_user (user details), though not explicitly. However, it lacks explicit sibling differentiation, keeping it at 4 rather than 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like get_followers or get_user. It states the basic function but doesn't mention context, prerequisites, or exclusions, leaving the agent to infer usage from tool names alone.

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

get_mentionsC

Fetch recent mentions of the authenticated user.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_resultsNoNumber of results (5-100, default 10)
next_tokenNoPagination token from previous response

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions fetching 'recent mentions' but doesn't specify time ranges, sorting order, or what constitutes a 'mention' (e.g., replies, tags). It also omits details on rate limits, error handling, or response format, leaving significant gaps for a tool with potential complexity.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and wastes no space, making it easy to parse quickly.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what the return values look like (e.g., list structure, fields included) or address behavioral aspects like pagination beyond the 'next_token' parameter hint. For a tool fetching social media data, more context on output and constraints is needed.

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

Parameters3/5

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

The input schema has 100% description coverage, clearly documenting both parameters ('max_results' and 'next_token') with their types and constraints. The description adds no additional parameter semantics beyond what the schema provides, which is acceptable given the high schema coverage, resulting in a baseline score.

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

Purpose4/5

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

The description clearly states the action ('Fetch') and target resource ('recent mentions of the authenticated user'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'search_tweets' or 'get_timeline' that might also retrieve mentions in different contexts, preventing a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'search_tweets' or 'get_timeline', nor does it mention prerequisites such as authentication requirements. It simply states what it does without contextual usage instructions.

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

get_metricsA

Get engagement metrics for a specific post (impressions, likes, retweets, replies, quotes, bookmarks). Requires the tweet to be authored by the authenticated user for non-public metrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
tweet_idYesThe tweet ID or URL to get metrics for

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden. It discloses key behavioral traits: it requires the tweet to be authored by the authenticated user for non-public metrics, which is crucial for permission/access context. However, it lacks details on rate limits, error handling, or response format.

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

Conciseness5/5

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

Two sentences, front-loaded with the core purpose and followed by an important constraint. Every sentence earns its place with no wasted words, making it efficient and easy to parse.

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

Completeness3/5

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

Given no annotations and no output schema, the description is moderately complete. It covers purpose and a key constraint, but lacks details on return values (e.g., metric types, units) or other behavioral aspects like pagination or errors, which are important for a metrics tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents the tweet_id parameter. The description does not add meaning beyond what the schema provides (e.g., format examples or constraints), but it implies the parameter is used to identify the post for metrics retrieval.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'engagement metrics for a specific post', with explicit examples (impressions, likes, retweets, replies, quotes, bookmarks). It distinguishes from siblings like get_tweet (general tweet data) or search_tweets (multiple tweets) by focusing on metrics for a single post.

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

Usage Guidelines4/5

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

The description provides clear context on when to use it: for engagement metrics of a specific post. It implies usage for the authenticated user's tweets for non-public metrics, but does not explicitly state when NOT to use it or name alternatives (e.g., get_tweet for basic data).

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

get_timelineA

Fetch a user's recent posts. Requires the user's numeric ID (use get_user first to resolve username to ID).

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesThe numeric user ID
max_resultsNoNumber of results (5-100, default 10)
next_tokenNoPagination token from previous response

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the requirement for a numeric user ID and implies a read-only operation ('Fetch'), but lacks details on rate limits, authentication needs, error handling, or what 'recent' means temporally. It adds some context (the ID resolution step) but misses key behavioral traits for a tool with no annotations.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose and followed by a crucial prerequisite. Every word earns its place—no redundancy or fluff—making it highly efficient and easy to parse for an agent.

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

Completeness3/5

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

Given no annotations and no output schema, the description is incomplete for a tool with 3 parameters and behavioral complexity. It covers the basic purpose and ID requirement but omits details on return values, error cases, or operational constraints (e.g., rate limits). For a read operation with pagination, more context would be needed to achieve a higher score.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters (user_id, max_results, next_token) thoroughly. The description adds marginal value by emphasizing the need for a numeric ID and hinting at pagination ('previous response'), but does not provide additional syntax or format details beyond what the schema specifies. Baseline 3 is appropriate here.

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

Purpose5/5

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

The description clearly states the specific action ('Fetch') and resource ('user's recent posts'), distinguishing it from siblings like get_tweet (single tweet) or search_tweets (keyword-based). It specifies the scope as 'recent posts' for a particular user, making the purpose unambiguous and differentiated.

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

Usage Guidelines4/5

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

The description provides clear context on when to use it: for fetching a user's posts, with a prerequisite to 'use get_user first to resolve username to ID'. However, it does not explicitly state when not to use it or name alternatives (e.g., get_mentions for mentions or search_tweets for broader queries), which prevents a perfect score.

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

get_tweetA

Fetch a tweet and its metadata by ID or URL. Returns author info, metrics, and referenced tweets.

ParametersJSON Schema
NameRequiredDescriptionDefault
tweet_idYesThe tweet ID or URL to fetch

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the return content ('author info, metrics, and referenced tweets'), which is helpful, but omits critical details like rate limits, authentication requirements, error conditions, or whether it's a read-only operation. For a tool with zero annotation coverage, this leaves significant gaps.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose and includes key details without waste. Every part earns its place by clarifying input, output, and scope.

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

Completeness3/5

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

Given the tool's moderate complexity (single parameter, no output schema, no annotations), the description is adequate but incomplete. It covers purpose and output types but lacks behavioral context like safety or performance traits, which is a notable gap for a tool with zero annotation support.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents the tweet_id parameter fully. The description adds marginal value by noting it accepts 'ID or URL,' but this is implied in the schema's description. Baseline 3 is appropriate as the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the specific action ('Fetch') and resource ('a tweet and its metadata'), distinguishes it from siblings by focusing on individual tweet retrieval rather than timelines, searches, or user-related operations, and specifies the input method ('by ID or URL').

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

Usage Guidelines4/5

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

The description implies usage context by specifying 'by ID or URL,' which differentiates it from tools like search_tweets or get_timeline that handle multiple tweets. However, it lacks explicit when-not-to-use guidance or named alternatives for similar operations.

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

get_userC

Look up a user profile by username or user ID. Returns bio, metrics, verification status, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameNoUsername (without @)
user_idNoNumeric user ID

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It mentions the return fields ('bio, metrics, verification status, etc.') but lacks critical behavioral details: authentication requirements, rate limits, error handling (e.g., for invalid inputs), or whether it's read-only (implied but not stated). For a lookup tool with zero annotation coverage, this is inadequate.

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

Conciseness5/5

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

The description is appropriately sized and front-loaded: two concise sentences that directly state the action and returns. Every sentence earns its place with no wasted words.

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

Completeness2/5

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

Given the complexity (a lookup tool with 2 parameters) and lack of annotations/output schema, the description is incomplete. It omits authentication needs, error cases, and detailed return structure (beyond a vague list). For a tool in a social media context with siblings like delete_tweet, more context on safety and usage is warranted.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters (username and user_id). The description adds minimal value by restating 'by username or user ID' without clarifying exclusivity, precedence, or format beyond the schema. Baseline 3 is appropriate 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.

Purpose4/5

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

The description clearly states the tool's purpose: 'Look up a user profile by username or user ID' (specific verb+resource). It distinguishes from siblings like get_followers or get_timeline by focusing on user profiles rather than social interactions or content. However, it doesn't explicitly differentiate from get_metrics (which might overlap with 'metrics' in returns).

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication), exclusions, or comparisons to siblings like get_metrics (which might handle similar data). The context is implied but not explicit.

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

like_tweetC

Like a post on X.

ParametersJSON Schema
NameRequiredDescriptionDefault
tweet_idYesThe tweet ID or URL to like

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('like') but doesn't describe what this entails (e.g., is it reversible, does it require specific permissions, are there rate limits, what happens on success/failure). For a mutation tool, this leaves significant gaps.

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

Conciseness5/5

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

The description is extremely concise with a single sentence ('Like a post on X.'), front-loading the core action. There is no wasted language, making it efficient and easy to parse.

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

Completeness2/5

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

Given the complexity of a mutation tool (liking a tweet) with no annotations and no output schema, the description is incomplete. It lacks details on behavioral aspects (e.g., effects, error handling) and doesn't compensate for the missing structured data, leaving the agent with insufficient context.

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

Parameters3/5

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

The schema description coverage is 100%, with the parameter 'tweet_id' fully documented in the schema. The description adds no additional parameter semantics beyond what the schema provides, so it meets the baseline score of 3 for high schema coverage.

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

Purpose4/5

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

The description 'Like a post on X' clearly states the action (like) and resource (post on X), making the purpose immediately understandable. However, it doesn't distinguish this tool from sibling tools like 'retweet' or 'reply_to_tweet' beyond the basic action, missing explicit differentiation.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication, tweet visibility), exclusions (e.g., cannot like own tweets), or comparisons to similar tools like 'retweet' or 'reply_to_tweet'.

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

post_tweetC

Create a new post on X (Twitter). Supports text, polls, and media attachments.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe text content of the tweet (max 280 characters)
poll_optionsNoPoll options (2-4 choices)
poll_duration_minutesNoPoll duration in minutes (default 1440 = 24h)
media_idsNoMedia IDs to attach (from upload_media)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the action ('Create') and supported features, but fails to disclose critical traits: it doesn't state that this is a write operation (implied but not explicit), mention authentication requirements, rate limits, or what happens on success/failure. For a mutation tool with zero annotation coverage, this is a significant gap.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose and lists key features without waste. Every word earns its place, making it easy to parse quickly.

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

Completeness2/5

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

Given the complexity of a write operation (posting to X/Twitter) with no annotations and no output schema, the description is incomplete. It lacks essential context: authentication needs, error handling, rate limits, and response format. For a tool with 4 parameters and mutation behavior, this leaves the agent under-informed.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all parameters. The description adds minimal value beyond the schema by listing supported content types ('text, polls, and media attachments'), which loosely maps to parameters but doesn't provide additional syntax or format details. 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.

Purpose4/5

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

The description clearly states the verb ('Create') and resource ('new post on X (Twitter)'), and specifies supported content types ('text, polls, and media attachments'). It distinguishes from siblings like 'delete_tweet' or 'reply_to_tweet' by focusing on creation, though it doesn't explicitly contrast with similar tools like 'quote_tweet' or 'retweet'.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication), when to choose this over 'reply_to_tweet' or 'quote_tweet', or any constraints like rate limits. This leaves the agent with minimal 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.

quote_tweetB

Quote retweet a post on X. Adds your commentary above the quoted post.

ParametersJSON Schema
NameRequiredDescriptionDefault
tweet_idYesThe tweet ID or URL to quote
textYesYour commentary text
media_idsNoMedia IDs to attach

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. While it states the tool performs a quote retweet with commentary, it doesn't mention authentication requirements, rate limits, whether the action is reversible (e.g., via 'delete_tweet'), potential side effects, or what the response looks like. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core action ('quote retweet a post on X') and adds essential detail ('adds your commentary above the quoted post'). There is zero waste, and every word earns its place by clarifying the tool's purpose.

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

Completeness2/5

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

Given this is a mutation tool with no annotations and no output schema, the description is incomplete. It lacks information about authentication, error handling, return values, and behavioral constraints. While the purpose is clear, the description doesn't provide enough context for safe and effective use by an AI agent without additional assumptions.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters (tweet_id, text, media_ids) with clear descriptions. The description adds no additional meaning beyond what the schema provides, such as formatting examples or constraints on the commentary text. Baseline 3 is appropriate 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.

Purpose5/5

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

The description clearly states the specific action ('quote retweet'), the resource ('a post on X'), and the exact functionality ('adds your commentary above the quoted post'). It distinguishes this tool from siblings like 'retweet' (which doesn't add commentary) and 'reply_to_tweet' (which creates a reply thread rather than a quote retweet).

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

Usage Guidelines3/5

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

The description implies usage when you want to share a tweet with your own commentary, but it doesn't explicitly state when to use this tool versus alternatives like 'retweet' or 'reply_to_tweet'. No guidance is provided about prerequisites, limitations, or when not to use this tool, leaving the agent to infer context from the action described.

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

reply_to_tweetC

Reply to an existing post on X. Provide the tweet ID or URL to reply to.

ParametersJSON Schema
NameRequiredDescriptionDefault
tweet_idYesThe tweet ID or URL to reply to
textYesThe reply text
media_idsNoMedia IDs to attach

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but lacks behavioral details. It doesn't disclose permissions needed, rate limits, whether replies are editable/deletable, character limits, or response format. 'Reply to' implies mutation but offers no safety or operational context.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero wasted words. It front-loads the core action and key parameters, making it easy to parse quickly.

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

Completeness2/5

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

For a mutation tool with no annotations and no output schema, the description is incomplete. It lacks critical context: authentication requirements, error conditions, return values, and how it differs from sibling tools like 'quote_tweet'. The 100% schema coverage helps but doesn't compensate for missing behavioral transparency.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are fully documented in the schema. The description adds no additional meaning beyond implying 'tweet_id' and 'text' are required (matching schema), but doesn't explain parameter interactions or constraints like media attachment limits.

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

Purpose4/5

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

The description clearly states the action ('Reply to') and target resource ('an existing post on X'), distinguishing it from siblings like 'post_tweet' or 'quote_tweet'. However, it doesn't explicitly differentiate from 'reply_to_tweet' (itself) or mention alternatives like 'quote_tweet' for different reply types.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'quote_tweet' or 'post_tweet', nor does it mention prerequisites (e.g., authentication, tweet visibility). It only states the basic action without context for selection.

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

retweetC

Retweet a post on X.

ParametersJSON Schema
NameRequiredDescriptionDefault
tweet_idYesThe tweet ID or URL to retweet

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('retweet') but doesn't describe key traits such as whether this is a mutation (implied but not explicit), authentication requirements, rate limits, or what happens on success/failure. For a tool that likely modifies data, this is a significant gap in transparency.

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

Conciseness5/5

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

The description is a single, clear sentence with zero waste—it directly states the tool's purpose without unnecessary words. It's appropriately sized for a simple tool and front-loaded with essential information, making it highly efficient.

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

Completeness2/5

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

Given the tool's complexity (a mutation with no annotations and no output schema), the description is incomplete. It lacks details on behavioral traits, usage context, and expected outcomes. For a tool that performs an action like retweeting, more information is needed to guide the agent effectively.

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

Parameters3/5

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

The input schema has 100% description coverage, with the single parameter 'tweet_id' documented as 'The tweet ID or URL to retweet'. The description adds no additional meaning beyond this, such as format examples or constraints. Since the schema does the heavy lifting, the baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the action ('retweet') and the resource ('a post on X'), making the purpose immediately understandable. It distinguishes itself from siblings like 'like_tweet', 'quote_tweet', and 'reply_to_tweet' by specifying the retweet action. However, it doesn't explicitly differentiate from all siblings (e.g., 'post_tweet' could be ambiguous), keeping it from a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication, permissions), exclusions (e.g., when retweeting is not allowed), or comparisons to siblings like 'quote_tweet' or 'like_tweet'. This lack of context leaves the agent without usage direction.

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

search_tweetsA

Search recent tweets by query. Supports keywords, hashtags, from:user, to:user, is:reply, has:media, etc. Uses the recent search endpoint (last 7 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query (e.g. 'from:elonmusk', '#ai', 'machine learning')
max_resultsNoNumber of results (10-100, default 10)
next_tokenNoPagination token from previous response

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It discloses key behavioral traits: the temporal constraint ('last 7 days'), endpoint type ('recent search endpoint'), and query syntax support. However, it doesn't mention rate limits, authentication requirements, or what the response format looks like, leaving gaps for a search tool.

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

Conciseness5/5

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

The description is extremely concise with just two sentences that each earn their place: the first states purpose and capabilities, the second adds critical behavioral context about temporal scope. No wasted words, perfectly front-loaded.

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

Completeness3/5

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

For a search tool with 3 parameters, 100% schema coverage, but no annotations and no output schema, the description provides adequate purpose and behavioral context but lacks information about response format, error conditions, or authentication requirements that would be helpful for an AI agent.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents all 3 parameters. The description adds minimal value beyond the schema by mentioning query syntax examples ('keywords, hashtags, from:user, etc.') but doesn't provide additional semantic context about parameters beyond what's in the schema descriptions.

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

Purpose5/5

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

The description clearly states the specific action ('Search recent tweets by query') and resource ('tweets'), distinguishing it from siblings like get_timeline or get_mentions by specifying it's a search operation. It explicitly mentions the 'recent search endpoint' which further clarifies scope.

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

Usage Guidelines4/5

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

The description provides clear context about when to use this tool ('Search recent tweets by query') and mentions the temporal limitation ('last 7 days'), but doesn't explicitly state when NOT to use it or name specific alternatives among siblings like get_timeline or get_mentions for different use cases.

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

upload_mediaB

Upload an image or video to X. Returns a media_id that can be attached to posts. Provide the file as base64-encoded data.

ParametersJSON Schema
NameRequiredDescriptionDefault
media_dataYesBase64-encoded media file data
mime_typeYesMIME type (e.g. 'image/png', 'image/jpeg', 'video/mp4')
media_categoryNoCategory: 'tweet_image', 'tweet_gif', or 'tweet_video' (default: tweet_image)

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries full burden but provides minimal behavioral context. It mentions the return value (media_id) but lacks details on error conditions, rate limits, authentication requirements, or side effects (e.g., whether uploads are public or private).

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

Conciseness5/5

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

Two concise sentences with zero waste: the first states purpose and outcome, the second provides key parameter guidance. It's front-loaded and appropriately sized for the tool's complexity.

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

Completeness3/5

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

For a mutation tool with no annotations and no output schema, the description is adequate but incomplete. It covers the basic purpose and parameter format but lacks critical context like error handling, usage constraints, or integration with sibling tools (e.g., post_tweet).

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents parameters. The description adds marginal value by clarifying that media_data is 'base64-encoded' and that the media_id is for attaching to posts, but doesn't provide additional semantics beyond what the schema already covers.

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

Purpose5/5

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

The description clearly states the specific action ('upload'), resource ('image or video to X'), and outcome ('returns a media_id that can be attached to posts'), distinguishing it from sibling tools that focus on reading, deleting, or interacting with tweets rather than uploading media.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication), constraints (e.g., file size limits), or how it relates to sibling tools like post_tweet (which might use the media_id).

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

TDQS

A3.7/5.0
Disambiguation5/5

Every tool has a clearly distinct purpose with no ambiguity; for example, get_tweet retrieves a single tweet, get_timeline fetches a user's recent posts, and search_tweets searches across tweets, all serving different functions. Actions like like_tweet, retweet, quote_tweet, and reply_to_tweet are well-separated in their specific interactions with posts, ensuring agents can easily select the correct tool.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case, such as get_user, post_tweet, and delete_tweet, with no deviations in style or convention. This predictability makes the tool set easy to navigate and understand at a glance, enhancing usability for agents.

Tool Count5/5

With 15 tools, the server is well-scoped for interacting with X (Twitter), covering core functionalities like posting, retrieving, and engaging with tweets and users. Each tool earns its place by addressing specific needs without redundancy, making the count ideal for the domain's complexity.

Completeness5/5

The tool surface provides complete CRUD/lifecycle coverage for X interactions, including creating (post_tweet), reading (get_tweet, get_timeline, search_tweets), updating (like_tweet, retweet, quote_tweet, reply_to_tweet), and deleting (delete_tweet), along with user management and media handling. No obvious gaps exist, supporting seamless agent workflows.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    Not graded
    maintenance
    An MCP server that integrates X (Twitter) API access with Grok-powered intelligence for real-time social media analysis and account management. It provides tools for reading and writing tweets, managing direct messages, and generating AI-powered topic summaries or daily briefings.
    23
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that enables AI agents to automate actions on X (Twitter) through a real browser session, including posting, engaging, and reading via over 40 tools. It supports self-hosting and provides a panel for API key management.
    8
    7
    MIT
  • F
    license
    Not graded
    quality
    F
    maintenance
    A local MCP server that exposes the X API (formerly Twitter API) as tools, enabling operations like posting, searching, user management, and more via natural language commands.
    853

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Infatoshi/x-mcp'

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