TwittrAPI
Server Details
Read public Twitter/X data: tweets, profiles, followers, search. No X developer account.
- Status
- Healthy
- Uptime
- 77.6% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- twittrapi/twittrapi-mcp
- GitHub Stars
- 0
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 23 tools
Most tools target a distinct resource+action (communities, lists, trends, tweet engagement, user timelines), and descriptions explicitly cross-reference each other (e.g. get_trend_locations → get_trends WOEIDs). The only genuine overlap is the user-lookup cluster (get_user_by_username vs get_user_by_id vs username_to_id vs users_by_ids), but the descriptions disambiguate cost, key type, and bulk use well.
The dominant pattern is a consistent verb_noun scheme (get_community_tweets, get_list_members, search_tweets, get_user_by_username) that is readable and predictable. Two names break the pattern (username_to_id, users_by_ids) but they read naturally and their irregularity signals a different shape of operation.
23 tools is on the heavy side, but the surface is cleanly partitioned into five coherent families (users, tweets, search, lists/communities, trends), so no tool feels redundant. Slightly over-scoped for a minimal client, but each entry covers a real X API endpoint.
Read coverage is strong: profiles, timelines (with/without replies), media, followers/following, engagement (likes/quotes/retweets), search with operators, lists, communities, and trends are all present with pagination. The notable gap is the entire write surface (post, reply, like, follow) and DMs/Spaces, so agents cannot complete any mutating workflow.
Available Tools
23 toolsget_communityGet communityBRead-onlyIdempotentInspect
Get an X Community's name, description, rules, member count and admins.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. | |
| communityId | Yes | Numeric community ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered without the description's help. The description adds only the field list; it says nothing about auth requirements, rate limits, or data freshness for a live GraphQL-backed read.
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 tight sentence with no filler; the verb and resource lead and the returned-field list follows immediately. Nothing could be cut without losing 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 no output schema, the description correctly carries the burden of summarizing return values by naming the fields returned. Combined with annotations covering safety and a 100%-covered schema, the only remaining gap is guidance on obtaining a valid communityId.
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 communityId, format, and max_chars are already fully documented with defaults, ranges, and enum semantics. The description adds no syntax or format detail beyond what the schema provides, 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?
Names a specific verb (Get) and resource (X Community) and enumerates the returned fields — name, description, rules, member count, admins — which clearly separates it from sibling get_community_tweets. It stops short of explicitly differentiating itself from search_communities or the other get_* tools in prose.
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?
There is no when-to-use or when-not-to-use guidance and no mention of the alternative path (search_communities) for discovering a community ID. The only usable signal is the required communityId parameter, which the agent must infer from the schema rather than the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_community_tweetsGet community tweetsBRead-onlyIdempotentInspect
Get tweets posted in an X Community. Paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | How many tweets to request per page (default 20). X may return slightly more or fewer. | |
| cursor | No | Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page. | |
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. | |
| communityId | Yes | Numeric community ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, covering the safety profile. The description adds only that results are paginated, with no auth, rate-limit, or ordering context; minimal but not contradictory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and scope. No wasted 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?
For a five-parameter tool with full schema coverage and read-only annotations, the description is minimally adequate. However, it omits any comparison to sibling tools and gives no context on community ID source or result shape, leaving an agent to infer usage.
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 detailed parameter descriptions for count, cursor, format, max_chars, and communityId. The description adds no parameter 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?
The description names a specific verb and resource: 'Get tweets posted in an X Community.' It is clearly distinguishable from siblings like get_user_tweets or get_list_tweets by the Community scope, though it does not explicitly name those alternatives.
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 only usage hint is 'Paginated,' which does not explain when to choose this tool over search_tweets, get_user_tweets, or get_list_tweets, nor 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.
get_followersGet followersARead-onlyIdempotentInspect
Get accounts that follow a user, newest followers first. Paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | How many users to request per page (default 20). X may return slightly more or fewer. | |
| cursor | No | Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page. | |
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| userId | No | Numeric X user ID (rest_id). Provide this or username. Using the ID is faster. | |
| username | No | X handle, used when you do not have the user ID. Provide this or userId. | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds two useful traits beyond that — result ordering (newest first) and that the result set is paginated — but says nothing about rate limits, result caps, or stability of the ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core operation and ordering front-loaded before the pagination note. Every clause carries 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 paginated read tool with full schema coverage, no output schema, and annotations covering the safety profile, the description covers what is needed to invoke it. It would be complete with a brief note on return shape or sibling routing, but 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?
Schema description coverage is 100%, so count, cursor, format, userId/username and max_chars are all fully documented in the schema itself. The description adds no parameter-level meaning beyond what the schema provides, which is the expected 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?
States a specific verb+resource ('accounts that follow a user') and adds ordering ('newest followers first'), so it is clearly distinct from get_following by direction. It does not, however, differentiate itself from the sibling get_verified_followers, which an agent might confuse it with.
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?
Usage is implied by the resource ('followers of a user'), and 'Paginated' hints that cursor iteration is expected. But there is no explicit when-to-use guidance and no mention of the close alternatives (get_following, get_verified_followers) or when a caller should prefer one over another.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_followingGet followingCRead-onlyIdempotentInspect
Get accounts a user follows. Paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | How many users to request per page (default 20). X may return slightly more or fewer. | |
| cursor | No | Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page. | |
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| userId | No | Numeric X user ID (rest_id). Provide this or username. Using the ID is faster. | |
| username | No | X handle, used when you do not have the user ID. Provide this or userId. | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, openWorld, so the safety profile is fully covered. The only added trait is "Paginated", which merely restates what the cursor/count schema fields already document in detail, so the description contributes almost no behavioral context of its own.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the resource and scope, with no filler. It is arguably too sparse rather than bloated, but there is zero wasted 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?
For a six-parameter tool there is no output schema, yet the description never mentions the simple/raw format choice, the max_chars truncation behavior, or that either userId or username must be supplied. The schema covers all of this, so the definition is workable but thin 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 description coverage is 100% and each of the six parameters carries a substantive description (defaults, truncation marker, simple vs raw format trade-offs). The description adds nothing 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 ("Get accounts a user follows") and the directionality implicitly distinguishes it from the sibling get_followers. However it never names that sibling or any other alternative, so sibling disambiguation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no alternatives, no prerequisites stated. "Paginated" hints at context but the description never says when to prefer this over get_followers or get_verified_followers, nor mentions the userId-vs-username choice that the schema requires the caller to make.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_list_detailsGet list detailsARead-onlyIdempotentInspect
Get an X list's name, description, owner, and member/follower counts.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| listId | Yes | Numeric list ID, from the list URL. | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered without the description. The description adds the concrete return fields, but says nothing about auth requirements, rate limits, or behavior for private/suspended lists.
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 naming the resource and its returned fields, with zero filler. Nothing is redundant with the title beyond the unavoidable resource 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?
With no output schema, the description usefully enumerates the returned fields, and the schema plus annotations cover parameters and safety. It is nearly complete for a simple read tool; only list-access edge cases (private lists, invalid IDs) are unaddressed.
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 listId pattern, the simple/raw enum, and the max_chars truncation behavior all documented in the schema. The description adds no parameter-level meaning beyond that, 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 (Get) and resource (X list) plus the exact fields returned (name, description, owner, member/follower counts). That distinguishes it from siblings like get_list_members and get_list_tweets, though it never names those alternatives 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?
Usage is only implied: an agent can infer this is the list-metadata tool as opposed to get_list_members or get_list_tweets, but the description never says when to choose it or what it is not for. No prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_list_membersGet list membersBRead-onlyIdempotentInspect
Get the accounts that are members of an X list. Paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | How many users to request per page (default 20). X may return slightly more or fewer. | |
| cursor | No | Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page. | |
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| listId | Yes | Numeric list ID. | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered structurally. The description's one behavioral addition, 'Paginated', duplicates what the cursor and count parameter descriptions already say, and it omits rate-limit or response-shape context. With annotations carrying the load, this is merely adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler. The fragment 'Paginated.' is terse but does convey one piece of information; there is no redundancy or padding to trim.
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 tool with a fully documented schema and explicit annotations, the description is functionally sufficient to invoke it. However, with no output schema, it gives no indication of what a member record looks like, and it omits the list-ID sourcing and pagination-loop context an agent would benefit from.
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 (listId, count, cursor, format, max_chars) are already fully documented in the schema, including the simple/raw format trade-off and the truncation marker behavior. The description adds nothing beyond the schema, which is the baseline expectation when coverage is complete.
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 (accounts that are members of an X list), which cleanly separates it from get_list_details and get_list_tweets. It does not, however, explicitly name or contrast with those siblings, so an agent must infer the distinction from the resource noun 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?
There is no when-to-use guidance, no preconditions (e.g., that a list ID must come from list lookup or URL), and no note on when to prefer this over get_list_details or get_list_tweets. The only usage signal is the trailing word 'Paginated'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_list_tweetsGet list tweetsARead-onlyIdempotentInspect
Get the tweet timeline of an X list (tweets from its members), newest first. Paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | How many tweets to request per page (default 20). X may return slightly more or fewer. | |
| cursor | No | Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page. | |
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| listId | Yes | Numeric list ID. | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds a genuine behavioral trait not present in the structured fields: results are returned 'newest first' (ordering). It does not add anything on auth, rate limits, or truncation behavior, but the pagination note reinforces the cursor contract.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core resource/scope statement front-loaded before the ordering and pagination facts. Every clause carries information and nothing is repeated from the schema.
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, but the format parameter's description explains the simple-vs-raw return shapes and token tradeoff, so return values are adequately covered. For a read tool with fully documented parameters the description is close to complete; only the lack of any explicit alternative-selection guidance keeps it from the top.
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 all five parameters (count, cursor, format, listId, max_chars) carry rich, self-contained descriptions including defaults, enums, and truncation semantics. The description adds no additional parameter meaning, so the 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 the tweet timeline of an X list') and immediately disambiguates the resource with the parenthetical '(tweets from its members)'. This cleanly separates it from get_list_details and get_list_members, and from the user-scoped get_user_tweets, without needing to open 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?
Usage is only implied by the description: the agent infers it should call this when it wants tweets from a list's members. There is no explicit when-to-use statement, no guidance on choosing between this and search_tweets or get_user_tweets, and no stated prerequisites beyond the required listId shown in the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trend_locationsGet trend locationsARead-onlyIdempotentInspect
List the locations (countries and cities) that have trends, with their WOEIDs for get_trends.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds that results include WOEIDs, which is useful content context, but says nothing about response size, truncation, or the format parameter's effect on output.
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 sentence, front-loaded with the resource, with no redundant or filler text. Every clause earns its place by naming the resource, its content, and the downstream consumer.
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 two-optional-param read tool with no output schema, the description tells the agent what comes back (locations and their WOEIDs) and what they're for. Coverage of output shape is adequate, though it doesn't mention whether the list is exhaustive or truncated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters (format, max_chars) are fully documented in the schema itself. The description adds no parameter guidance 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 (List) and resource (locations — countries and cities) and clarifies the payload's purpose: WOEIDs for get_trends. This cleanly separates it from the sibling get_trends, which consumes those identifiers rather than listing them.
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?
Frames the tool as the lookup step feeding get_trends, which implies when to use it (to discover valid location identifiers). It doesn't state exclusions or explain what to do if a location isn't listed, but the workflow context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trendsGet trendsARead-onlyIdempotentInspect
Get trending topics for a location by WOEID (1 = worldwide, 23424977 = United States, 23424975 = United Kingdom). Use get_trend_locations to look up other WOEIDs.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. | |
| locationId | Yes | Yahoo WOEID of the location, e.g. "1" for worldwide. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered by structured data. The description adds the WOEID-lookup workflow but says nothing about freshness (trends are time-sensitive despite idempotentHint), rate limits, or response shape, so it adds only modest behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the primary action and scope come first, then the cross-tool routing hint. No filler, nothing repeated from the schema.
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-only tool with 100% schema coverage, no output schema, and annotations covering safety, the description gives everything needed to call it correctly. It could optionally note that trends are time-sensitive, but nothing blocks 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 format, max_chars and locationId are already documented, and the baseline is 3. The description only adds two extra example WOEIDs (US, UK) on top of the schema's own '1' for worldwide, which is marginal added meaning for the required 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 ('Get trending topics') plus the scoping key ('for a location by WOEID'), and contrasts itself with get_trend_locations, which looks up WOEIDs rather than returning trends. An agent can distinguish it from the sibling 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?
Explicitly routes the agent: 'Use get_trend_locations to look up other WOEIDs,' which is a clear alternative for the prerequisite step. It stops short of a full when/when-not framing (no mention of caching, freshness, or rate limits), so it lands just below the top.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tweetGet tweetARead-onlyIdempotentInspect
Get a tweet by ID with full text, author, media, engagement counts and the reply thread (conversation). Use cursor to load more replies.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page. | |
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| tweetId | Yes | Numeric tweet ID, the number at the end of a tweet URL. | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. | |
| rankingMode | No | Sort order. Default Relevance. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare read-only, idempotent, non-destructive, open-world behavior. The description adds meaningful behavioral context by saying the response includes the reply thread and that cursor pagination applies to replies. It does not repeat safety traits, so it adds real value 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 two sentences, front-loads the return contents, and then gives the only operational hint about cursor pagination. Every sentence carries useful 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 full schema coverage and annotations covering safety, the description adequately explains returned fields and reply pagination. It does not need to explain return values because no output schema exists, though it could briefly mention truncation or format selection, which 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 all five parameters, including cursor, format, max_chars, and rankingMode, are already documented. The description reinforces cursor usage for reply pagination but adds no syntax or constraint details beyond the schema, making the baseline 3 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 and resource ('Get a tweet by ID') and enumerates the returned content: full text, author, media, engagement counts, and reply thread. It is clearly the canonical tweet-detail tool, though it does not explicitly contrast itself with siblings like get_tweet_retweets, get_tweet_quotes, or get_tweet_favorites.
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 only usage guidance is 'Use cursor to load more replies,' which is pagination instruction rather than when-to-use guidance. It does not state when this tool should be chosen over search_tweets, get_user_tweets, or the tweet-relationship tools, so selection is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tweet_favoritesGet tweet likersARead-onlyIdempotentInspect
Get the users who liked a tweet. X only exposes likers to the tweet's author for many tweets, so results can be empty. Paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | How many users to request per page (default 20). X may return slightly more or fewer. | |
| cursor | No | Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page. | |
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| tweetId | Yes | Numeric tweet ID. | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered. The description adds two genuinely new behavioral facts: liker lists are frequently author-restricted (empty results are normal, not an error) and output is paginated. Auth details and rate limits remain unstated.
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: purpose, the empty-results caveat, then pagination. No repetition, no filler, and the most decision-relevant fact (author-only visibility) is surfaced 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, fully-schema-documented tool with rich annotations, the description covers the two things an agent could not infer: the author-restriction caveat and pagination. It could say slightly more about the shape of a returned liker (user objects) given there is no output schema, but that is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each of the five parameters (count, cursor, format, max_chars, tweetId) is documented in-schema with defaults and constraints. The description adds only the word 'Paginated', which lightly reinforces the cursor parameter but nothing 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 states a specific verb and resource ('Get the users who liked a tweet'), which unambiguously separates it from its closest siblings get_tweet_retweets and get_tweet_quotes. An agent can select 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?
The caveat that X only exposes likers to the tweet's author tells the agent to expect empty results in many cases, which is real selection context. However, it never explicitly says when to prefer this over alternatives or what to do instead when it returns nothing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tweet_quotesGet tweet quotesARead-onlyIdempotentInspect
Get tweets that quote a given tweet. Paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | How many tweets to request per page (default 20). X may return slightly more or fewer. | |
| cursor | No | Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page. | |
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| tweetId | Yes | Numeric tweet ID. | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The one behavioral note, "Paginated," is useful but is already conveyed by the cursor parameter description, so the description adds little beyond structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the purpose and followed by the one behavioral fact worth surfacing. There is no filler, restatement of the title, or redundant prose.
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 lookup tool with full annotations and a fully documented five-parameter schema, this is nearly complete; the response shape is described via the format parameter rather than an output schema. It could be slightly richer by noting ordering or that quote tweets embed the quoted tweet, but 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 description coverage is 100% and every parameter (count, cursor, format, max_chars, tweetId) is thoroughly documented in-schema, so the baseline of 3 applies. The description contributes no additional parameter detail such as default page size or format trade-offs.
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: retrieving tweets that quote a given tweet, which cleanly separates it from siblings like get_tweet_retweets and get_tweet_favorites. It does not explicitly name or contrast an alternative, but the resource noun 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?
Usage is only implied by the resource name — an agent can infer you call it when you want quote tweets of a specific tweet — but there is no explicit when/when-not framing, no mention of prerequisites (e.g. the tweet must exist/be public), and no routing to alternatives such as search_tweets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tweet_retweetsGet tweet retweetersBRead-onlyIdempotentInspect
Get the users who retweeted a tweet. Paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | How many users to request per page (default 20). X may return slightly more or fewer. | |
| cursor | No | Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page. | |
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| tweetId | Yes | Numeric tweet ID. | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds that results are paginated, which the annotations don't say, but omits anything about rate limits, ordering, or the practical limits of X's retweeter list — modest added value over structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core purpose front-loaded ahead of the pagination note. Nothing to trim and nothing buried.
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 tool with no output schema, the definition is nearly sufficient: purpose and pagination are stated and the schema fully documents parameters including next_cursor. It could say more about the returned shape (user objects plus cursor) or rate limits, but this is a mild gap rather than a blocker.
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 (tweetId, count, cursor, format, max_chars) are fully documented in the schema with defaults, ranges and semantics. The description adds no parameter detail beyond restating pagination, 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 ('Get the users who retweeted a tweet'), which is inherently distinct from siblings like get_tweet_favorites or get_tweet_quotes. It does not explicitly name or route against those siblings, but the resource is unambiguous enough that an agent can identify the right 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?
Only 'Paginated' hints at usage, and that is already covered by the cursor parameter schema. There is no guidance on when to use this versus get_tweet (the base tweet) or get_tweet_quotes, nor any prerequisite such as needing a valid tweetId or noting protected/deleted tweets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_by_idGet user by IDARead-onlyIdempotentInspect
Get an X user's profile by numeric user ID (rest_id). Same data as get_user_by_username.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| userId | Yes | Numeric X user ID (rest_id). | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose that this is a read-only, idempotent, non-destructive, open-world operation. The description adds useful equivalence context ('Same data as get_user_by_username') but does not discuss rate limits, auth needs, error behavior, or return shape beyond what annotations and schema provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and scoped by lookup key. There is no 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 read-only lookup with complete schema descriptions and safety annotations, the definition is largely sufficient. It could say slightly more about the returned profile data, but the low complexity and the named sibling reference keep this from being a serious 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 three parameters are already documented in the schema. The description only restates that userId is the numeric X user ID and does not add meaning for format or max_chars beyond the schema text.
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 an X user's profile by numeric user ID (rest_id).' It explicitly distinguishes the lookup key from the sibling get_user_by_username by noting the same data is available there, so an agent can identify the tool's scope 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?
Names the sibling get_user_by_username and indicates the key distinction: numeric user ID versus username. However, it does not give explicit when-not guidance or mention other related siblings like users_by_ids for bulk lookups or username_to_id for conversion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_by_usernameGet user by usernameARead-onlyIdempotentInspect
Get an X (Twitter) user's profile by handle: name, bio, follower/following counts, verification, created date, and the numeric user ID (rest_id) needed by other tools.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| username | Yes | X handle without the URL, e.g. "elonmusk" (a leading @ is fine). | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered. The description adds the concrete return shape (bio, counts, verification, created date, rest_id), which is real value given there is no output schema, but it says nothing about rate limits, auth, or failure modes.
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 dense sentence that front-loads the verb and resource and then lists the payoff fields. Every clause earns its place 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 usefully enumerates the returned profile fields, and the input side is fully covered by the schema. Truncation behavior lives in the max_chars schema entry, so the only mild gap is the absence of sibling routing guidance.
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 documents format, max_chars, and the username handle format (with the leading-@ tolerance and 16-char limit). The description adds no parameter-level detail, 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 (Get), resource (X user's profile), and lookup key (by handle), then enumerates the returned fields including rest_id. The 'by handle' phrasing implicitly separates it from get_user_by_id, though it never names that sibling explicitly, so it falls just 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?
Usage is implied: use this when you have a handle rather than an ID. The note that rest_id is 'needed by other tools' is a light chaining hint, but there is no explicit guidance on when to prefer username_to_id (ID-only) or get_user_by_id, and no stated prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_mediaGet user mediaARead-onlyIdempotentInspect
Get a user's tweets that contain photos or videos. Paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | How many tweets to request per page (default 20). X may return slightly more or fewer. | |
| cursor | No | Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page. | |
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| userId | No | Numeric X user ID (rest_id). Provide this or username. Using the ID is faster. | |
| username | No | X handle, used when you do not have the user ID. Provide this or userId. | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety behavior is covered. The description adds only that results are paginated, a point the cursor parameter schema already makes, and says nothing about rate limits or result 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?
Two short sentences with the scope filter front-loaded and zero filler. Every word contributes to identifying 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?
Six parameters, none required, no output schema, and a fully annotated, fully described schema mean the structured fields carry most of the burden. The description adequately conveys the media-only scope and pagination, though a note on default format or truncation behavior would round it out.
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 six parameters (count, cursor, format, userId, username, max_chars) are fully documented in the schema. The description adds no parameter-level detail beyond what the schema supplies, 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 ('Get a user's tweets') plus a narrowing filter ('that contain photos or videos'), which clearly separates it from the sibling get_user_tweets. It stops short of naming the alternative tools, so it is clear for the purpose but not sibling-routing.
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 media-only filter implies when this tool is appropriate versus get_user_tweets, but there is no explicit when-to-use, when-not-to-use, or named alternative. Usage must be inferred from the single filter phrase.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_tweetsGet user tweetsARead-onlyIdempotentInspect
Get a user's recent tweets (their profile timeline, without replies), newest first, including retweets and pinned tweet. Paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | How many tweets to request per page (default 20). X may return slightly more or fewer. | |
| cursor | No | Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page. | |
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| userId | No | Numeric X user ID (rest_id). Provide this or username. Using the ID is faster. | |
| username | No | X handle, used when you do not have the user ID. Provide this or userId. | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe, idempotent, open-world read (readOnlyHint=true, destructiveHint=false, idempotentHint=true). The description adds genuinely new behavioral facts beyond the annotations: newest-first ordering, inclusion of retweets and the pinned tweet, and pagination. It stops short of describing auth requirements or pagination semantics beyond 'Paginated'.
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 packs scope, ordering, content inclusions, and pagination with no filler. 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 6-parameter read tool with an exceptionally rich schema and no output schema, the description covers content scope, ordering, and pagination adequately. It omits any note that an identifier (userId or username) is effectively required, leaving that 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 the schema already documents count, cursor, format, userId, username, and max_chars with defaults and constraints. The description only alludes to pagination and adds no parameter-level detail, 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 ('Get a user's recent tweets') and immediately scopes it ('their profile timeline, without replies'), which cleanly separates it from the sibling get_user_tweets_and_replies. An agent can pick this tool 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?
The 'without replies' clause implies when this tool is preferred over get_user_tweets_and_replies, but that sibling is never named and there is no explicit when-to-use or exclusion guidance. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_tweets_and_repliesGet user tweets and repliesBRead-onlyIdempotentInspect
Get a user's tweets including their replies to others, newest first. Paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | How many tweets to request per page (default 20). X may return slightly more or fewer. | |
| cursor | No | Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page. | |
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| userId | No | Numeric X user ID (rest_id). Provide this or username. Using the ID is faster. | |
| username | No | X handle, used when you do not have the user ID. Provide this or userId. | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description usefully adds two behavioral traits beyond that — ordering ('newest first') and pagination — but says nothing about auth requirements, rate limits, or whether replies are interleaved with tweets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste, with the resource scope front-loaded ahead of the ordering and pagination facts. Nothing redundant with the structured fields.
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 should carry more of the return-shape burden, and it does state ordering and pagination. But for a tool whose entire reason to exist is the difference from get_user_tweets, omitting that explicit comparison is a meaningful gap given the crowded sibling set.
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, format, userId, username and max_chars in detail, including defaults and truncation behavior. The description adds no parameter-level meaning beyond what the schema provides, so the baseline 3 is correct.
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 (Get) and resource (a user's tweets including their replies), and the phrase 'including their replies to others' differentiates it in substance from the sibling get_user_tweets. However, it never names that sibling, so an agent must infer the distinction from the name rather than 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?
There is no explicit when-to-use guidance and no alternative is named, even though get_user_tweets, get_user_media, get_tweet_favorites and search_tweets all compete for overlapping intents. The 'including replies' phrasing hints at the use case but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_verified_followersGet verified followersBRead-onlyIdempotentInspect
Get a user's followers that have a verified (blue check) badge. Paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | How many users to request per page (default 20). X may return slightly more or fewer. | |
| cursor | No | Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page. | |
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| userId | No | Numeric X user ID (rest_id). Provide this or username. Using the ID is faster. | |
| username | No | X handle, used when you do not have the user ID. Provide this or userId. | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds only 'Paginated', and the schema already documents cursor/count; it says nothing about return shape, ordering, or rate limits that annotations don't cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the filter scope front-loaded before the pagination note. Nothing is padded or repeated from the schema.
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 tool with full schema coverage and rich annotations, the description is sufficient to invoke correctly. Minor gaps remain: no return-value hint (no output schema exists) and no 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% — count, cursor, format, userId, username and max_chars are all fully documented in the schema, including the ID-vs-handle tradeoff. The description adds no parameter meaning beyond that, 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 ('Get a user's followers') plus a clear filter ('verified (blue check) badge'), which cleanly separates it from the sibling get_followers. It does not, however, name that sibling to make the contrast explicit.
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 filtered scope implies when the tool is useful, but there is no explicit guidance, no mention of get_followers as the unfiltered alternative, and no note on prerequisites (e.g., needing a userId/username pair or auth).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_communitiesSearch communitiesARead-onlyIdempotentInspect
Search X Communities by keyword. Returns community IDs for get_community and get_community_tweets. Paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | How many communities to request per page (default 20). X may return slightly more or fewer. | |
| cursor | No | Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page. | |
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. | |
| searchTerm | Yes | Keyword to search for. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds the pagination trait, which is genuinely beyond the annotations, but says nothing about result-set size, ranking, or 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?
Three short sentences, front-loaded with purpose, then return value, then pagination; 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 does carry the burden of describing returns and it does so (community IDs, paginated). It is complete enough to call correctly, though it omits any note on result ordering or empty-result behavior.
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 (count, cursor, format, max_chars, searchTerm) is documented in the schema itself. The description only echoes keyword search and pagination, adding no syntax or format detail beyond the structured 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?
States a specific verb and resource (search X Communities by keyword) and explicitly names what it returns (community IDs), which cleanly separates it from the get_community* siblings that consume those IDs.
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 names the downstream tools (get_community, get_community_tweets), giving a clear usage chain, but does not explicitly state when to prefer this over search_tweets or other lookup paths.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tweetsSearch tweetsARead-onlyIdempotentInspect
Search X like the search box. Supports X search operators in the query, e.g. from:user, to:user, "exact phrase", lang:en, since:2025-01-01, until:2025-02-01, min_faves:100, filter:media, -filter:replies. category Latest gives newest first; People returns accounts instead of tweets. Paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | How many results to request per page (default 20). X may return slightly more or fewer. | |
| cursor | No | Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page. | |
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| category | No | Result tab: Top (default), Latest, People, Photos or Videos. | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. | |
| searchItem | Yes | Search query, max 512 characters. May contain X search operators. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a read-only, open-world, idempotent, non-destructive operation. Beyond that, the description adds useful behavioral context: X search operator support, category-specific behavior for Latest and People, and pagination. It does not discuss rate limits or authentication, but the annotation coverage lowers 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?
The description is front-loaded with the core purpose and then efficiently covers operators, category behavior, and pagination. The operator list is dense but purposeful; no sentence is wasted, though it could be slightly more compact.
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 search tool with full schema coverage and strong annotations, the description covers the key behavioral details an agent needs: query operators, category tabs, and pagination. Return formatting and truncation behavior are handled by the schema, so the description is largely 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 all parameters are already documented in the schema. The description still adds value by explaining supported X search operators for searchItem and clarifying category semantics for Latest and People, going beyond the enum labels 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?
States a specific verb and resource: 'Search X like the search box'. It also clarifies category behavior, including that People returns accounts rather than tweets. It does not explicitly distinguish itself from siblings like get_user_tweets or search_communities, so it falls short of full sibling differentiation.
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 implied usage through operator examples and category behavior, which helps an agent understand how to use search effectively. However, it does not explicitly say when to choose this tool over alternatives such as get_user_tweets, get_tweet, or search_communities.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
username_to_idUsername to user IDARead-onlyIdempotentInspect
Resolve an X handle to its numeric user ID. Cheaper and smaller than get_user_by_username when you only need the ID.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| username | Yes | X handle without the URL, e.g. "elonmusk" (a leading @ is fine). | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered. The description adds a cost/size characteristic ('cheaper and smaller'), which is genuinely useful context, but says nothing about rate limits, auth needs, or what happens on an unknown handle.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler, and the core purpose is front-loaded before the sibling comparison. 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?
With no output schema, the description still communicates the return value ('numeric user ID') and the routing rationale. It's adequate for a simple single-purpose resolver, with only minor gaps around error/unknown-handle behavior.
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 format enum, username format, and max_chars truncation all documented in the schema itself. The description adds no parameter-level meaning beyond that, 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?
States a specific verb and resource: 'Resolve an X handle to its numeric user ID.' It also differentiates from the sibling get_user_by_username by explaining the tradeoff, so an agent can tell the 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 (get_user_by_username) and gives the condition that selects this tool: 'when you only need the ID.' That is a clear routing rule, though it doesn't spell out explicit when-not scenarios or the cost tradeoff in more detail.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_by_idsGet users by IDsARead-onlyIdempotentInspect
Get profiles for up to 100 X users in one call, by numeric user ID.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Numeric X user IDs, 1 to 100. | |
| format | No | Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls, edit history, community notes). | |
| max_chars | No | Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is fully covered without prose. The only behavioral fact the description adds — the 100-user batch limit — is already encoded in the schema (maxItems: 100), so the description contributes essentially nothing beyond structured data, though it does not contradict 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?
A single front-loaded sentence with zero filler; the batch scope and the ID-keying requirement appear before anything else. Nothing in it is redundant or padded.
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 is the only place to learn what a 'profile' contains, and it says nothing about the returned fields, response ordering, or missing/suspended user handling. Combined with the untouched format and max_chars behaviors, it is adequate but leaves real gaps for an agent shaping a batch lookup.
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 detail on the format enum (simple vs raw and their token trade-offs) and the max_chars truncation behavior, so the schema does the heavy lifting. The description only restates 'numeric user ID' and the 100-item ceiling, adding no syntax or format guidance of its own — the correct baseline 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?
States a specific verb and resource ('Get profiles for ... X users'), plus the batch scope ('up to 100 ... in one call') and the keying method ('numeric user ID'). This implicitly separates it from get_user_by_id (single), get_user_by_username and username_to_id, but 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?
Batch intent is implied by 'up to 100 X users in one call', so an agent can infer this for multi-user lookups. However, there is no explicit routing guidance such as 'use get_user_by_id for a single user' or 'use username_to_id first if you have handles, not IDs', which is exactly the ambiguity this tool's siblings create.
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.
23 tool updates
- First observed
get_community - First observed
get_community_tweets - First observed
get_followers - First observed
get_following - First observed
get_list_details - First observed
get_list_members - First observed
get_list_tweets - First observed
get_trend_locations - First observed
get_trends - First observed
get_tweet - First observed
get_tweet_favorites - First observed
get_tweet_quotes - First observed
get_tweet_retweets - First observed
get_user_by_id - First observed
get_user_by_username - First observed
get_user_media - First observed
get_user_tweets - First observed
get_user_tweets_and_replies - First observed
get_verified_followers - First observed
search_communities - First observed
search_tweets - First observed
username_to_id - First observed
users_by_ids
Publisher details
- Operator
- TwittrAPI
- Operator website
- https://www.twittrapi.com
- Vendor relationship
- Independent
- Documentation
- https://www.twittrapi.com/docs/hosted-mcp
- Trust center
- Not available
- Restrictions
- Paid: prepaid balance, billed per API call ($0.50 free credit on sign-up). Account actions (posting, likes, DMs) need your own X session cookie and proxy. Account monitoring needs a monitoring plan.
Related MCP Connectors
Read-only public X (Twitter) data: profiles, tweets, threads, followers, search. Pay per result.
Live X/Twitter data: profiles, tweets, search, followers, lists and trends. 29 read-only tools.
Search X (Twitter) posts and read profiles, followers, trends and X Articles. OAuth sign-in.
Read public X (Twitter) posts, threads and X Articles as clean Markdown. Read-only, no auth.
Related MCP Servers
AlicenseAqualityCmaintenanceProvides read-only access to X (Twitter) data — posts, threads, profiles, timelines, followers, media, and trends — through twelve tools, with no login or API key required.1213 npm1MIT- AlicenseAqualityCmaintenanceEnables reading public X (Twitter) content like profiles, tweets, and search results via a stealth browser, without official API costs.11MIT
- AlicenseAqualityCmaintenanceEnables read-only research on public X data through tools for posts, threads, profiles, search, trends, collections, and saved-result analysis using free public APIs and optional sessions.8MIT
- AlicenseAqualityBmaintenanceX/Twitter read API for agents: search tweets, profiles, timelines, and Smart Money. Runs locally with npx. Not for posting.911 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.