MCP YouTube Transcript
An MCP server retrieving transcripts of YouTube videos
Description from the maker (original English)
Search, read and publish X posts and manage users, lists and media via the X API v2.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
X_API_KEY, X_API_KEY_SECRET, X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET, MEDIA_ROOT, MCP_TRANSPORT, MCP_NAME, MCP_PATH, SERVER_PORT, SERVER_READ_TIMEOUT, SERVER_WRITE_TIMEOUT, LOG_MODE, MAX_IDLE_CONNS_PER_HOST, X_DEBUG, POSTS_MAX_QUERIES, POSTS_MAX_USERNAMES, POSTS_MAX_IDS, POSTS_DEFAULT_RESULTS, POSTS_MAX_RESULTS, POSTS_DEFAULT_DAYS, POSTS_MAX_DAYS, POSTS_DEFAULT_TIMEOUT_MS, POSTS_MIN_TIMEOUT_MS, POSTS_MAX_TIMEOUT_MS, USERS_MAX_USERNAMES, USERS_MAX_IDS, USERS_DEFAULT_RESULTS, USERS_MAX_RESULTS, USERS_DEFAULT_TIMEOUT_MS, USERS_MIN_TIMEOUT_MS, USERS_MAX_TIMEOUT_MS, LISTS_DEFAULT_RESULTS, LISTS_MAX_RESULTS, LISTS_DEFAULT_TIMEOUT_MS, LISTS_MIN_TIMEOUT_MS, LISTS_MAX_TIMEOUT_MS, MEDIA_CHUNK_BYTES, MEDIA_POLL_INTERVAL_MS, MEDIA_DEFAULT_TIMEOUT_MS, MEDIA_MIN_TIMEOUT_MS, MEDIA_MAX_TIMEOUT_MSValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Download the maker’s .mcpb file
The link goes to the maker’s own file; we do not host or repackage it. Open the file and Claude Desktop installs it.
Run this in your terminal
claude mcp add x --env X_API_KEY=your-value --env X_API_KEY_SECRET=your-value --env X_ACCESS_TOKEN=your-value --env X_ACCESS_TOKEN_SECRET=your-value --env MEDIA_ROOT=your-value --env MCP_TRANSPORT=your-value --env MCP_NAME=your-value --env MCP_PATH=your-value --env SERVER_PORT=your-value --env SERVER_READ_TIMEOUT=your-value --env SERVER_WRITE_TIMEOUT=your-value --env LOG_MODE=your-value --env MAX_IDLE_CONNS_PER_HOST=your-value --env X_DEBUG=your-value --env POSTS_MAX_QUERIES=your-value --env POSTS_MAX_USERNAMES=your-value --env POSTS_MAX_IDS=your-value --env POSTS_DEFAULT_RESULTS=your-value --env POSTS_MAX_RESULTS=your-value --env POSTS_DEFAULT_DAYS=your-value --env POSTS_MAX_DAYS=your-value --env POSTS_DEFAULT_TIMEOUT_MS=your-value --env POSTS_MIN_TIMEOUT_MS=your-value --env POSTS_MAX_TIMEOUT_MS=your-value --env USERS_MAX_USERNAMES=your-value --env USERS_MAX_IDS=your-value --env USERS_DEFAULT_RESULTS=your-value --env USERS_MAX_RESULTS=your-value --env USERS_DEFAULT_TIMEOUT_MS=your-value --env USERS_MIN_TIMEOUT_MS=your-value --env USERS_MAX_TIMEOUT_MS=your-value --env LISTS_DEFAULT_RESULTS=your-value --env LISTS_MAX_RESULTS=your-value --env LISTS_DEFAULT_TIMEOUT_MS=your-value --env LISTS_MIN_TIMEOUT_MS=your-value --env LISTS_MAX_TIMEOUT_MS=your-value --env MEDIA_CHUNK_BYTES=your-value --env MEDIA_POLL_INTERVAL_MS=your-value --env MEDIA_DEFAULT_TIMEOUT_MS=your-value --env MEDIA_MIN_TIMEOUT_MS=your-value --env MEDIA_MAX_TIMEOUT_MS=your-value -- docker run -i --rm -e X_API_KEY -e X_API_KEY_SECRET -e X_ACCESS_TOKEN -e X_ACCESS_TOKEN_SECRET -e MEDIA_ROOT -e MCP_TRANSPORT -e MCP_NAME -e MCP_PATH -e SERVER_PORT -e SERVER_READ_TIMEOUT -e SERVER_WRITE_TIMEOUT -e LOG_MODE -e MAX_IDLE_CONNS_PER_HOST -e X_DEBUG -e POSTS_MAX_QUERIES -e POSTS_MAX_USERNAMES -e POSTS_MAX_IDS -e POSTS_DEFAULT_RESULTS -e POSTS_MAX_RESULTS -e POSTS_DEFAULT_DAYS -e POSTS_MAX_DAYS -e POSTS_DEFAULT_TIMEOUT_MS -e POSTS_MIN_TIMEOUT_MS -e POSTS_MAX_TIMEOUT_MS -e USERS_MAX_USERNAMES -e USERS_MAX_IDS -e USERS_DEFAULT_RESULTS -e USERS_MAX_RESULTS -e USERS_DEFAULT_TIMEOUT_MS -e USERS_MIN_TIMEOUT_MS -e USERS_MAX_TIMEOUT_MS -e LISTS_DEFAULT_RESULTS -e LISTS_MAX_RESULTS -e LISTS_DEFAULT_TIMEOUT_MS -e LISTS_MIN_TIMEOUT_MS -e LISTS_MAX_TIMEOUT_MS -e MEDIA_CHUNK_BYTES -e MEDIA_POLL_INTERVAL_MS -e MEDIA_DEFAULT_TIMEOUT_MS -e MEDIA_MIN_TIMEOUT_MS -e MEDIA_MAX_TIMEOUT_MS ghcr.io/role1776/mcp-x:0.1.1Fill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"x": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"X_API_KEY",
"-e",
"X_API_KEY_SECRET",
"-e",
"X_ACCESS_TOKEN",
"-e",
"X_ACCESS_TOKEN_SECRET",
"-e",
"MEDIA_ROOT",
"-e",
"MCP_TRANSPORT",
"-e",
"MCP_NAME",
"-e",
"MCP_PATH",
"-e",
"SERVER_PORT",
"-e",
"SERVER_READ_TIMEOUT",
"-e",
"SERVER_WRITE_TIMEOUT",
"-e",
"LOG_MODE",
"-e",
"MAX_IDLE_CONNS_PER_HOST",
"-e",
"X_DEBUG",
"-e",
"POSTS_MAX_QUERIES",
"-e",
"POSTS_MAX_USERNAMES",
"-e",
"POSTS_MAX_IDS",
"-e",
"POSTS_DEFAULT_RESULTS",
"-e",
"POSTS_MAX_RESULTS",
"-e",
"POSTS_DEFAULT_DAYS",
"-e",
"POSTS_MAX_DAYS",
"-e",
"POSTS_DEFAULT_TIMEOUT_MS",
"-e",
"POSTS_MIN_TIMEOUT_MS",
"-e",
"POSTS_MAX_TIMEOUT_MS",
"-e",
"USERS_MAX_USERNAMES",
"-e",
"USERS_MAX_IDS",
"-e",
"USERS_DEFAULT_RESULTS",
"-e",
"USERS_MAX_RESULTS",
"-e",
"USERS_DEFAULT_TIMEOUT_MS",
"-e",
"USERS_MIN_TIMEOUT_MS",
"-e",
"USERS_MAX_TIMEOUT_MS",
"-e",
"LISTS_DEFAULT_RESULTS",
"-e",
"LISTS_MAX_RESULTS",
"-e",
"LISTS_DEFAULT_TIMEOUT_MS",
"-e",
"LISTS_MIN_TIMEOUT_MS",
"-e",
"LISTS_MAX_TIMEOUT_MS",
"-e",
"MEDIA_CHUNK_BYTES",
"-e",
"MEDIA_POLL_INTERVAL_MS",
"-e",
"MEDIA_DEFAULT_TIMEOUT_MS",
"-e",
"MEDIA_MIN_TIMEOUT_MS",
"-e",
"MEDIA_MAX_TIMEOUT_MS",
"ghcr.io/role1776/mcp-x:0.1.1"
],
"env": {
"X_API_KEY": "your-value",
"X_API_KEY_SECRET": "your-value",
"X_ACCESS_TOKEN": "your-value",
"X_ACCESS_TOKEN_SECRET": "your-value",
"MEDIA_ROOT": "your-value",
"MCP_TRANSPORT": "your-value",
"MCP_NAME": "your-value",
"MCP_PATH": "your-value",
"SERVER_PORT": "your-value",
"SERVER_READ_TIMEOUT": "your-value",
"SERVER_WRITE_TIMEOUT": "your-value",
"LOG_MODE": "your-value",
"MAX_IDLE_CONNS_PER_HOST": "your-value",
"X_DEBUG": "your-value",
"POSTS_MAX_QUERIES": "your-value",
"POSTS_MAX_USERNAMES": "your-value",
"POSTS_MAX_IDS": "your-value",
"POSTS_DEFAULT_RESULTS": "your-value",
"POSTS_MAX_RESULTS": "your-value",
"POSTS_DEFAULT_DAYS": "your-value",
"POSTS_MAX_DAYS": "your-value",
"POSTS_DEFAULT_TIMEOUT_MS": "your-value",
"POSTS_MIN_TIMEOUT_MS": "your-value",
"POSTS_MAX_TIMEOUT_MS": "your-value",
"USERS_MAX_USERNAMES": "your-value",
"USERS_MAX_IDS": "your-value",
"USERS_DEFAULT_RESULTS": "your-value",
"USERS_MAX_RESULTS": "your-value",
"USERS_DEFAULT_TIMEOUT_MS": "your-value",
"USERS_MIN_TIMEOUT_MS": "your-value",
"USERS_MAX_TIMEOUT_MS": "your-value",
"LISTS_DEFAULT_RESULTS": "your-value",
"LISTS_MAX_RESULTS": "your-value",
"LISTS_DEFAULT_TIMEOUT_MS": "your-value",
"LISTS_MIN_TIMEOUT_MS": "your-value",
"LISTS_MAX_TIMEOUT_MS": "your-value",
"MEDIA_CHUNK_BYTES": "your-value",
"MEDIA_POLL_INTERVAL_MS": "your-value",
"MEDIA_DEFAULT_TIMEOUT_MS": "your-value",
"MEDIA_MIN_TIMEOUT_MS": "your-value",
"MEDIA_MAX_TIMEOUT_MS": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"x": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"X_API_KEY",
"-e",
"X_API_KEY_SECRET",
"-e",
"X_ACCESS_TOKEN",
"-e",
"X_ACCESS_TOKEN_SECRET",
"-e",
"MEDIA_ROOT",
"-e",
"MCP_TRANSPORT",
"-e",
"MCP_NAME",
"-e",
"MCP_PATH",
"-e",
"SERVER_PORT",
"-e",
"SERVER_READ_TIMEOUT",
"-e",
"SERVER_WRITE_TIMEOUT",
"-e",
"LOG_MODE",
"-e",
"MAX_IDLE_CONNS_PER_HOST",
"-e",
"X_DEBUG",
"-e",
"POSTS_MAX_QUERIES",
"-e",
"POSTS_MAX_USERNAMES",
"-e",
"POSTS_MAX_IDS",
"-e",
"POSTS_DEFAULT_RESULTS",
"-e",
"POSTS_MAX_RESULTS",
"-e",
"POSTS_DEFAULT_DAYS",
"-e",
"POSTS_MAX_DAYS",
"-e",
"POSTS_DEFAULT_TIMEOUT_MS",
"-e",
"POSTS_MIN_TIMEOUT_MS",
"-e",
"POSTS_MAX_TIMEOUT_MS",
"-e",
"USERS_MAX_USERNAMES",
"-e",
"USERS_MAX_IDS",
"-e",
"USERS_DEFAULT_RESULTS",
"-e",
"USERS_MAX_RESULTS",
"-e",
"USERS_DEFAULT_TIMEOUT_MS",
"-e",
"USERS_MIN_TIMEOUT_MS",
"-e",
"USERS_MAX_TIMEOUT_MS",
"-e",
"LISTS_DEFAULT_RESULTS",
"-e",
"LISTS_MAX_RESULTS",
"-e",
"LISTS_DEFAULT_TIMEOUT_MS",
"-e",
"LISTS_MIN_TIMEOUT_MS",
"-e",
"LISTS_MAX_TIMEOUT_MS",
"-e",
"MEDIA_CHUNK_BYTES",
"-e",
"MEDIA_POLL_INTERVAL_MS",
"-e",
"MEDIA_DEFAULT_TIMEOUT_MS",
"-e",
"MEDIA_MIN_TIMEOUT_MS",
"-e",
"MEDIA_MAX_TIMEOUT_MS",
"ghcr.io/role1776/mcp-x:0.1.1"
],
"env": {
"X_API_KEY": "your-value",
"X_API_KEY_SECRET": "your-value",
"X_ACCESS_TOKEN": "your-value",
"X_ACCESS_TOKEN_SECRET": "your-value",
"MEDIA_ROOT": "your-value",
"MCP_TRANSPORT": "your-value",
"MCP_NAME": "your-value",
"MCP_PATH": "your-value",
"SERVER_PORT": "your-value",
"SERVER_READ_TIMEOUT": "your-value",
"SERVER_WRITE_TIMEOUT": "your-value",
"LOG_MODE": "your-value",
"MAX_IDLE_CONNS_PER_HOST": "your-value",
"X_DEBUG": "your-value",
"POSTS_MAX_QUERIES": "your-value",
"POSTS_MAX_USERNAMES": "your-value",
"POSTS_MAX_IDS": "your-value",
"POSTS_DEFAULT_RESULTS": "your-value",
"POSTS_MAX_RESULTS": "your-value",
"POSTS_DEFAULT_DAYS": "your-value",
"POSTS_MAX_DAYS": "your-value",
"POSTS_DEFAULT_TIMEOUT_MS": "your-value",
"POSTS_MIN_TIMEOUT_MS": "your-value",
"POSTS_MAX_TIMEOUT_MS": "your-value",
"USERS_MAX_USERNAMES": "your-value",
"USERS_MAX_IDS": "your-value",
"USERS_DEFAULT_RESULTS": "your-value",
"USERS_MAX_RESULTS": "your-value",
"USERS_DEFAULT_TIMEOUT_MS": "your-value",
"USERS_MIN_TIMEOUT_MS": "your-value",
"USERS_MAX_TIMEOUT_MS": "your-value",
"LISTS_DEFAULT_RESULTS": "your-value",
"LISTS_MAX_RESULTS": "your-value",
"LISTS_DEFAULT_TIMEOUT_MS": "your-value",
"LISTS_MIN_TIMEOUT_MS": "your-value",
"LISTS_MAX_TIMEOUT_MS": "your-value",
"MEDIA_CHUNK_BYTES": "your-value",
"MEDIA_POLL_INTERVAL_MS": "your-value",
"MEDIA_DEFAULT_TIMEOUT_MS": "your-value",
"MEDIA_MIN_TIMEOUT_MS": "your-value",
"MEDIA_MAX_TIMEOUT_MS": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
MCP_TRANSPORT envMCP_NAME envMCP_PATH envSERVER_PORT envSERVER_READ_TIMEOUT envSERVER_WRITE_TIMEOUT envLOG_MODE envMAX_IDLE_CONNS_PER_HOST envX_DEBUG envPOSTS_MAX_QUERIES envPOSTS_MAX_USERNAMES envPOSTS_MAX_IDS envPOSTS_DEFAULT_RESULTS envPOSTS_MAX_RESULTS envPOSTS_DEFAULT_DAYS envPOSTS_MAX_DAYS envPOSTS_DEFAULT_TIMEOUT_MS envPOSTS_MIN_TIMEOUT_MS envPOSTS_MAX_TIMEOUT_MS envUSERS_MAX_USERNAMES envUSERS_MAX_IDS envUSERS_DEFAULT_RESULTS envUSERS_MAX_RESULTS envUSERS_DEFAULT_TIMEOUT_MS envUSERS_MIN_TIMEOUT_MS envUSERS_MAX_TIMEOUT_MS envLISTS_DEFAULT_RESULTS envLISTS_MAX_RESULTS envLISTS_DEFAULT_TIMEOUT_MS envLISTS_MIN_TIMEOUT_MS envLISTS_MAX_TIMEOUT_MS envMEDIA_CHUNK_BYTES envMEDIA_POLL_INTERVAL_MS envMEDIA_DEFAULT_TIMEOUT_MS envMEDIA_MIN_TIMEOUT_MS envMEDIA_MAX_TIMEOUT_MS envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 7, 2026
The registry name was verified with the GitHub account Role1776, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: X_API_KEY, X_API_KEY_SECRET, X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET, MEDIA_ROOT
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (0.1.1) reached the registry 2 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Docker, MCPB on your computer.
In the same category: MCP YouTube Transcript, Google Analytics MCP, BibiGPT YouTube Video Summarizer
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
An MCP server retrieving transcripts of YouTube videos
GA4 MCP server for AI agents: schema discovery, server-side aggregation, analysis-ready defaults.
AI video summarizer: summarize and transcribe YouTube, Bilibili, TikTok and podcast videos.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
mcp-x
An MCP server that gives an LLM the X (Twitter) API: read and search posts, manage users and lists, upload media, and publish — as the account whose keys it runs on.
Website · Costs · Credentials · Tools · Quick start · Configuration · Architecture · Contributing
mcp-x is a Model Context Protocol server written in Go. It exposes the X API v2 to any MCP-compatible client (Claude Desktop, IDE agents, custom LLM apps) as 42 tools covering posts, users, lists and media.
It authenticates with OAuth 1.0a user context, which means every call acts *as a real X account* — the one the four keys belong to. x_post_create publishes publicly. x_user_follow really follows. x_post_delete is irreversible. This is not a sandbox, and it is not free: see The X API costs money before you wire it into an agent.
Both transports the MCP SDK supports are available and expose the identical tool set:
[!WARNING]
There is no free tier any more. X retired the Free/Basic/Pro subscription tiers for new developers and moved to pay-per-use credits: you buy credits upfront in the Developer Console and every request deducts from the balance in real time. Legacy Basic ($200/mo) and Pro ($5,000/mo) subscriptions survive only for accounts that already had them; Enterprise starts around $42,000/mo. A new developer account today gets pay-per-use and nothing else.
Rates at the time of writing (official pricing — always re-check the Console, they have changed several times in 2026):
| Operation | Price |
|---|---|
| Post read | $0.005 per post returned |
| Owned read (your own posts, bookmarks, followers, likes, lists) | $0.001 per resource |
| User read | $0.010 per user returned |
| Likes / mutes / blocks read | $0.001 per resource |
| Followers / following read | $0.010 per resource |
| Publishing a post | $0.015 per request |
| Publishing a post containing a URL | $0.200 per request |
| Like / repost and other interactions | $0.015 per request |
| List and bookmark writes | $0.005–$0.010 per request |
Two things follow from this, and both are baked into the server:
max_results: 100 on x_posts_search costs twenty times what max_results: 5 costs for the same query. Every read tool's description tells the model to ask for the smallest max_results that answers the question, and the batching tools (x_posts_lookup, x_users_lookup) tell it to batch rather than loop.x_posts_count first, then pay for x_posts_search.X also deduplicates: the same resource fetched twice inside a 24-hour UTC window is billed once. And pay-per-use is capped at 3 million post reads per billing cycle — past that, only Enterprise.
When the money runs out the API answers with a distinct error, and the server maps it to a message that explicitly tells the model not to retry — see Errors.
The server needs four OAuth 1.0a values, all from one X app:
X_API_KEY
X_API_KEY_SECRET X_ACCESS_TOKEN X_ACCESS_TOKEN_SECRET
The first pair identifies the *app*; the second pair identifies the *account acting through it*. mcp-x uses AuthenMethodOAuth1UserContext, not app-only bearer auth, because every write endpoint and every "me" endpoint (x_users_me, x_posts_home, x_bookmarks_list, mentions) requires a user context. There is no bearer-token mode.
[!IMPORTANT]
An access token permanently keeps the permissions the app had at the moment it was generated. If you created the token while the app was Read-only and then flipped the app to Read and Write, the token is *still* read-only. Nothing about the app settings page will tell you this. Every write will fail with X's
oauth1-permissionsproblem type, forever, until you go back to Keys and tokens and regenerate the Access Token and Secret.
This is the single most common setup failure with the X API, which is why the server checks for it at startup and refuses to start with:
`
the access token is read-only: set the app permissions to Read and Write
in the X Developer Console, then regenerate the Access Token and Secret
`
Regenerating the *API Key/Secret* is not the fix. Regenerate the Access Token and Secret.
Before registering a single tool, the server calls GET /2/users/me once (client.Bootstrap) with a 15-second deadline. This does three jobs:
POST /2/users/:id/... and looking the id up per write would be another billed request.A failure here is fatal by design. A server that starts and then fails every call is worse than one that does not start.
The cost of that choice is worth stating plainly: there is no way to try this server without a funded X developer account. No credentials means no startup, which means no tool list — /mcp and claude mcp list will show a failed connection and nothing else. To confirm an install short of that, run the binary with -version, and read the Tools section for what it would have exposed.
The four values are credentials for a live account with write access. Keep them in a file only you can read, pass it with -env, and never commit it — .env is gitignored, .env.example is the template. When running under an MCP client, the client's env block works too; it takes precedence over the .env file.
42 tools in four groups. Every tool carries MCP annotations: readOnlyHint on reads, destructiveHint on anything irreversible (x_post_delete, x_list_delete, unlike, unrepost, unfollow, member removal). Each returns a structured JSON payload matching its output schema; the SDK mirrors the same JSON into the text content block for clients that do not read structuredContent.
Every tool accepts an optional timeout_ms, clamped into the group's [MIN, MAX] window (see Limits).
| Tool | Description |
|---|---|
| `x_posts_search` | Searches recent posts for several queries in parallel. Recent search reaches back 7 days only. |
| `x_posts_count` | Counts matches per query bucketed by minute/hour/day. Does not spend post reads — use it to size a topic before searching. |
| `x_posts_lookup` | Fetches up to 100 posts by id in one call. |
| `x_posts_by_user` | Recent posts for several usernames, fetched in parallel. |
| `x_posts_mentions` | Posts mentioning the key owner. |
| `x_posts_home` | The key owner's home timeline. |
| `x_posts_quotes` | Posts quoting a given post. |
| `x_posts_liked` | Posts the key owner liked. |
| `x_bookmarks_list` | The key owner's bookmarks. |
| `x_post_liked_by` | Users who liked a given post. |
| `x_post_reposted_by` | Users who reposted a given post. |
x_posts_search| Parameter | Type | Default | Notes |
|---|---|---|---|
queries | []string | — | Required. Run in parallel, capped at POSTS_MAX_QUERIES (5). ≤ 512 chars each. |
max_results | int | 10 | Posts per query, 1..100. Every one is billed. |
sort_order | string | — | recency (newest first) or relevancy (best match). |
days | int | 7 | How far back, 1..7. The API cannot go further. |
include_retweets | bool | false | When false the server appends -is:retweet to every query. |
timeout_ms | int64 | 15000 | Whole-call timeout, clamped to [2000, 60000]. |
Query operators go inside the query string:
| Operator | Meaning |
|---|---|
| *space* | AND |
OR | explicit OR |
-term | NOT |
( ) | grouping |
from:user / to:user | by author / by recipient |
@user / #tag | mentions / hashtags |
"exact phrase" | exact phrase |
lang:en | language |
is:retweet is:reply is:quote is:verified | post kind |
has:media has:images has:videos has:links | attachments |
url:example.com | linked domain |
conversation_id:123 | one thread |
x_posts_count| Parameter | Type | Default | Notes |
|---|---|---|---|
queries | []string | — | Required. Same operators as x_posts_search. |
granularity | string | hour | minute, hour or day. |
days | int | 7 | 1..7, same window. |
timeout_ms | int64 | 15000 | Clamped to [2000, 60000]. |
x_posts_lookup| Parameter | Type | Default | Notes |
|---|---|---|---|
ids | []string | — | Required. 1..100 post ids. Batch them; do not call once per id. |
x_posts_by_user| Parameter | Type | Default | Notes |
|---|---|---|---|
usernames | []string | — | Required. Without the @. Capped at POSTS_MAX_USERNAMES (5), fetched in parallel. |
max_results | int | 10 | Posts per user, 1..100. |
exclude | []string | — | replies and/or retweets. |
days | int | 7 | 1..7. |
timeout_ms | int64 | 15000 | Clamped to [2000, 60000]. |
x_posts_mentions, x_posts_home, x_posts_liked and x_bookmarks_list share one shape: max_results (1..100), pagination_token, timeout_ms. x_posts_quotes, x_post_liked_by and x_post_reposted_by add a required id.
Pagination is explicit and manual: a response carries next_token, and you pass it back as pagination_token for the next page. The server never walks pages on its own — each page is billed, so that decision stays with the caller.
| Tool | Annotation | Description |
|---|---|---|
| `x_post_create` | write | Publishes a post. Public and billed ($0.015, or $0.20 with a link). |
| `x_post_delete` | de
Only the beginning is shown; read the rest in the repo