Search, read and publish X posts and manage users, lists and media via the X API v2.
Connect Runs on your machine
claude mcp add mcp-x -e X_API_KEY=<X_API_KEY> -e X_API_KEY_SECRET=<X_API_KEY_SECRET> -e X_ACCESS_TOKEN=<X_ACCESS_TOKEN> -e X_ACCESS_TOKEN_SECRET=<X_ACCESS_TOKEN_SECRET> -e MEDIA_ROOT=<MEDIA_ROOT> -e MCP_TRANSPORT=<MCP_TRANSPORT> -e MCP_NAME=<MCP_NAME> -e MCP_PATH=<MCP_PATH> -e SERVER_PORT=<SERVER_PORT> -e SERVER_READ_TIMEOUT=<SERVER_READ_TIMEOUT> -e SERVER_WRITE_TIMEOUT=<SERVER_WRITE_TIMEOUT> -e LOG_MODE=<LOG_MODE> -e MAX_IDLE_CONNS_PER_HOST=<MAX_IDLE_CONNS_PER_HOST> -e X_DEBUG=<X_DEBUG> -e POSTS_MAX_QUERIES=<POSTS_MAX_QUERIES> -e POSTS_MAX_USERNAMES=<POSTS_MAX_USERNAMES> -e POSTS_MAX_IDS=<POSTS_MAX_IDS> -e POSTS_DEFAULT_RESULTS=<POSTS_DEFAULT_RESULTS> -e POSTS_MAX_RESULTS=<POSTS_MAX_RESULTS> -e POSTS_DEFAULT_DAYS=<POSTS_DEFAULT_DAYS> -e POSTS_MAX_DAYS=<POSTS_MAX_DAYS> -e POSTS_DEFAULT_TIMEOUT_MS=<POSTS_DEFAULT_TIMEOUT_MS> -e POSTS_MIN_TIMEOUT_MS=<POSTS_MIN_TIMEOUT_MS> -e POSTS_MAX_TIMEOUT_MS=<POSTS_MAX_TIMEOUT_MS> -e USERS_MAX_USERNAMES=<USERS_MAX_USERNAMES> -e USERS_MAX_IDS=<USERS_MAX_IDS> -e USERS_DEFAULT_RESULTS=<USERS_DEFAULT_RESULTS> -e USERS_MAX_RESULTS=<USERS_MAX_RESULTS> -e USERS_DEFAULT_TIMEOUT_MS=<USERS_DEFAULT_TIMEOUT_MS> -e USERS_MIN_TIMEOUT_MS=<USERS_MIN_TIMEOUT_MS> -e USERS_MAX_TIMEOUT_MS=<USERS_MAX_TIMEOUT_MS> -e LISTS_DEFAULT_RESULTS=<LISTS_DEFAULT_RESULTS> -e LISTS_MAX_RESULTS=<LISTS_MAX_RESULTS> -e LISTS_DEFAULT_TIMEOUT_MS=<LISTS_DEFAULT_TIMEOUT_MS> -e LISTS_MIN_TIMEOUT_MS=<LISTS_MIN_TIMEOUT_MS> -e LISTS_MAX_TIMEOUT_MS=<LISTS_MAX_TIMEOUT_MS> -e MEDIA_CHUNK_BYTES=<MEDIA_CHUNK_BYTES> -e MEDIA_POLL_INTERVAL_MS=<MEDIA_POLL_INTERVAL_MS> -e MEDIA_DEFAULT_TIMEOUT_MS=<MEDIA_DEFAULT_TIMEOUT_MS> -e MEDIA_MIN_TIMEOUT_MS=<MEDIA_MIN_TIMEOUT_MS> -e MEDIA_MAX_TIMEOUT_MS=<MEDIA_MAX_TIMEOUT_MS> -- docker run -i --rm ghcr.io/role1776/mcp-x:0.1.1
{
"mcpServers": {
"mcp-x": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/role1776/mcp-x:0.1.1"
],
"env": {
"X_API_KEY": "<X_API_KEY>",
"X_API_KEY_SECRET": "<X_API_KEY_SECRET>",
"X_ACCESS_TOKEN": "<X_ACCESS_TOKEN>",
"X_ACCESS_TOKEN_SECRET": "<X_ACCESS_TOKEN_SECRET>",
"MEDIA_ROOT": "<MEDIA_ROOT>",
"MCP_TRANSPORT": "<MCP_TRANSPORT>",
"MCP_NAME": "<MCP_NAME>",
"MCP_PATH": "<MCP_PATH>",
"SERVER_PORT": "<SERVER_PORT>",
"SERVER_READ_TIMEOUT": "<SERVER_READ_TIMEOUT>",
"SERVER_WRITE_TIMEOUT": "<SERVER_WRITE_TIMEOUT>",
"LOG_MODE": "<LOG_MODE>",
"MAX_IDLE_CONNS_PER_HOST": "<MAX_IDLE_CONNS_PER_HOST>",
"X_DEBUG": "<X_DEBUG>",
"POSTS_MAX_QUERIES": "<POSTS_MAX_QUERIES>",
"POSTS_MAX_USERNAMES": "<POSTS_MAX_USERNAMES>",
"POSTS_MAX_IDS": "<POSTS_MAX_IDS>",
"POSTS_DEFAULT_RESULTS": "<POSTS_DEFAULT_RESULTS>",
"POSTS_MAX_RESULTS": "<POSTS_MAX_RESULTS>",
"POSTS_DEFAULT_DAYS": "<POSTS_DEFAULT_DAYS>",
"POSTS_MAX_DAYS": "<POSTS_MAX_DAYS>",
"POSTS_DEFAULT_TIMEOUT_MS": "<POSTS_DEFAULT_TIMEOUT_MS>",
"POSTS_MIN_TIMEOUT_MS": "<POSTS_MIN_TIMEOUT_MS>",
"POSTS_MAX_TIMEOUT_MS": "<POSTS_MAX_TIMEOUT_MS>",
"USERS_MAX_USERNAMES": "<USERS_MAX_USERNAMES>",
"USERS_MAX_IDS": "<USERS_MAX_IDS>",
"USERS_DEFAULT_RESULTS": "<USERS_DEFAULT_RESULTS>",
"USERS_MAX_RESULTS": "<USERS_MAX_RESULTS>",
"USERS_DEFAULT_TIMEOUT_MS": "<USERS_DEFAULT_TIMEOUT_MS>",
"USERS_MIN_TIMEOUT_MS": "<USERS_MIN_TIMEOUT_MS>",
"USERS_MAX_TIMEOUT_MS": "<USERS_MAX_TIMEOUT_MS>",
"LISTS_DEFAULT_RESULTS": "<LISTS_DEFAULT_RESULTS>",
"LISTS_MAX_RESULTS": "<LISTS_MAX_RESULTS>",
"LISTS_DEFAULT_TIMEOUT_MS": "<LISTS_DEFAULT_TIMEOUT_MS>",
"LISTS_MIN_TIMEOUT_MS": "<LISTS_MIN_TIMEOUT_MS>",
"LISTS_MAX_TIMEOUT_MS": "<LISTS_MAX_TIMEOUT_MS>",
"MEDIA_CHUNK_BYTES": "<MEDIA_CHUNK_BYTES>",
"MEDIA_POLL_INTERVAL_MS": "<MEDIA_POLL_INTERVAL_MS>",
"MEDIA_DEFAULT_TIMEOUT_MS": "<MEDIA_DEFAULT_TIMEOUT_MS>",
"MEDIA_MIN_TIMEOUT_MS": "<MEDIA_MIN_TIMEOUT_MS>",
"MEDIA_MAX_TIMEOUT_MS": "<MEDIA_MAX_TIMEOUT_MS>"
}
}
}
}
{
"mcpServers": {
"mcp-x": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/role1776/mcp-x:0.1.1"
],
"env": {
"X_API_KEY": "<X_API_KEY>",
"X_API_KEY_SECRET": "<X_API_KEY_SECRET>",
"X_ACCESS_TOKEN": "<X_ACCESS_TOKEN>",
"X_ACCESS_TOKEN_SECRET": "<X_ACCESS_TOKEN_SECRET>",
"MEDIA_ROOT": "<MEDIA_ROOT>",
"MCP_TRANSPORT": "<MCP_TRANSPORT>",
"MCP_NAME": "<MCP_NAME>",
"MCP_PATH": "<MCP_PATH>",
"SERVER_PORT": "<SERVER_PORT>",
"SERVER_READ_TIMEOUT": "<SERVER_READ_TIMEOUT>",
"SERVER_WRITE_TIMEOUT": "<SERVER_WRITE_TIMEOUT>",
"LOG_MODE": "<LOG_MODE>",
"MAX_IDLE_CONNS_PER_HOST": "<MAX_IDLE_CONNS_PER_HOST>",
"X_DEBUG": "<X_DEBUG>",
"POSTS_MAX_QUERIES": "<POSTS_MAX_QUERIES>",
"POSTS_MAX_USERNAMES": "<POSTS_MAX_USERNAMES>",
"POSTS_MAX_IDS": "<POSTS_MAX_IDS>",
"POSTS_DEFAULT_RESULTS": "<POSTS_DEFAULT_RESULTS>",
"POSTS_MAX_RESULTS": "<POSTS_MAX_RESULTS>",
"POSTS_DEFAULT_DAYS": "<POSTS_DEFAULT_DAYS>",
"POSTS_MAX_DAYS": "<POSTS_MAX_DAYS>",
"POSTS_DEFAULT_TIMEOUT_MS": "<POSTS_DEFAULT_TIMEOUT_MS>",
"POSTS_MIN_TIMEOUT_MS": "<POSTS_MIN_TIMEOUT_MS>",
"POSTS_MAX_TIMEOUT_MS": "<POSTS_MAX_TIMEOUT_MS>",
"USERS_MAX_USERNAMES": "<USERS_MAX_USERNAMES>",
"USERS_MAX_IDS": "<USERS_MAX_IDS>",
"USERS_DEFAULT_RESULTS": "<USERS_DEFAULT_RESULTS>",
"USERS_MAX_RESULTS": "<USERS_MAX_RESULTS>",
"USERS_DEFAULT_TIMEOUT_MS": "<USERS_DEFAULT_TIMEOUT_MS>",
"USERS_MIN_TIMEOUT_MS": "<USERS_MIN_TIMEOUT_MS>",
"USERS_MAX_TIMEOUT_MS": "<USERS_MAX_TIMEOUT_MS>",
"LISTS_DEFAULT_RESULTS": "<LISTS_DEFAULT_RESULTS>",
"LISTS_MAX_RESULTS": "<LISTS_MAX_RESULTS>",
"LISTS_DEFAULT_TIMEOUT_MS": "<LISTS_DEFAULT_TIMEOUT_MS>",
"LISTS_MIN_TIMEOUT_MS": "<LISTS_MIN_TIMEOUT_MS>",
"LISTS_MAX_TIMEOUT_MS": "<LISTS_MAX_TIMEOUT_MS>",
"MEDIA_CHUNK_BYTES": "<MEDIA_CHUNK_BYTES>",
"MEDIA_POLL_INTERVAL_MS": "<MEDIA_POLL_INTERVAL_MS>",
"MEDIA_DEFAULT_TIMEOUT_MS": "<MEDIA_DEFAULT_TIMEOUT_MS>",
"MEDIA_MIN_TIMEOUT_MS": "<MEDIA_MIN_TIMEOUT_MS>",
"MEDIA_MAX_TIMEOUT_MS": "<MEDIA_MAX_TIMEOUT_MS>"
}
}
}
}
{
"servers": {
"mcp-x": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/role1776/mcp-x:0.1.1"
],
"env": {
"X_API_KEY": "<X_API_KEY>",
"X_API_KEY_SECRET": "<X_API_KEY_SECRET>",
"X_ACCESS_TOKEN": "<X_ACCESS_TOKEN>",
"X_ACCESS_TOKEN_SECRET": "<X_ACCESS_TOKEN_SECRET>",
"MEDIA_ROOT": "<MEDIA_ROOT>",
"MCP_TRANSPORT": "<MCP_TRANSPORT>",
"MCP_NAME": "<MCP_NAME>",
"MCP_PATH": "<MCP_PATH>",
"SERVER_PORT": "<SERVER_PORT>",
"SERVER_READ_TIMEOUT": "<SERVER_READ_TIMEOUT>",
"SERVER_WRITE_TIMEOUT": "<SERVER_WRITE_TIMEOUT>",
"LOG_MODE": "<LOG_MODE>",
"MAX_IDLE_CONNS_PER_HOST": "<MAX_IDLE_CONNS_PER_HOST>",
"X_DEBUG": "<X_DEBUG>",
"POSTS_MAX_QUERIES": "<POSTS_MAX_QUERIES>",
"POSTS_MAX_USERNAMES": "<POSTS_MAX_USERNAMES>",
"POSTS_MAX_IDS": "<POSTS_MAX_IDS>",
"POSTS_DEFAULT_RESULTS": "<POSTS_DEFAULT_RESULTS>",
"POSTS_MAX_RESULTS": "<POSTS_MAX_RESULTS>",
"POSTS_DEFAULT_DAYS": "<POSTS_DEFAULT_DAYS>",
"POSTS_MAX_DAYS": "<POSTS_MAX_DAYS>",
"POSTS_DEFAULT_TIMEOUT_MS": "<POSTS_DEFAULT_TIMEOUT_MS>",
"POSTS_MIN_TIMEOUT_MS": "<POSTS_MIN_TIMEOUT_MS>",
"POSTS_MAX_TIMEOUT_MS": "<POSTS_MAX_TIMEOUT_MS>",
"USERS_MAX_USERNAMES": "<USERS_MAX_USERNAMES>",
"USERS_MAX_IDS": "<USERS_MAX_IDS>",
"USERS_DEFAULT_RESULTS": "<USERS_DEFAULT_RESULTS>",
"USERS_MAX_RESULTS": "<USERS_MAX_RESULTS>",
"USERS_DEFAULT_TIMEOUT_MS": "<USERS_DEFAULT_TIMEOUT_MS>",
"USERS_MIN_TIMEOUT_MS": "<USERS_MIN_TIMEOUT_MS>",
"USERS_MAX_TIMEOUT_MS": "<USERS_MAX_TIMEOUT_MS>",
"LISTS_DEFAULT_RESULTS": "<LISTS_DEFAULT_RESULTS>",
"LISTS_MAX_RESULTS": "<LISTS_MAX_RESULTS>",
"LISTS_DEFAULT_TIMEOUT_MS": "<LISTS_DEFAULT_TIMEOUT_MS>",
"LISTS_MIN_TIMEOUT_MS": "<LISTS_MIN_TIMEOUT_MS>",
"LISTS_MAX_TIMEOUT_MS": "<LISTS_MAX_TIMEOUT_MS>",
"MEDIA_CHUNK_BYTES": "<MEDIA_CHUNK_BYTES>",
"MEDIA_POLL_INTERVAL_MS": "<MEDIA_POLL_INTERVAL_MS>",
"MEDIA_DEFAULT_TIMEOUT_MS": "<MEDIA_DEFAULT_TIMEOUT_MS>",
"MEDIA_MIN_TIMEOUT_MS": "<MEDIA_MIN_TIMEOUT_MS>",
"MEDIA_MAX_TIMEOUT_MS": "<MEDIA_MAX_TIMEOUT_MS>"
}
}
}
}
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools
This server runs locally, so its tools are listed by your MCP client once it starts.
Environment variables
| Name | Description |
|---|---|
X_API_KEYRequired, secret | OAuth 1.0a consumer key. developer.x.com -> your project -> your app -> Keys and tokens. |
X_API_KEY_SECRETRequired, secret | OAuth 1.0a consumer secret, issued together with X_API_KEY. |
X_ACCESS_TOKENRequired, secret | User access token. Set the app permissions to Read and Write BEFORE generating it: a token keeps the permissions it was created with, and a read-only one fails every write until it is regenerated. |
X_ACCESS_TOKEN_SECRETRequired, secret | User access token secret, issued together with X_ACCESS_TOKEN. |
MEDIA_ROOTRequired | Absolute path to an existing directory - the only one x_media_upload may read files from. Anything outside it is refused, symlinks included. Checked at startup. |
MCP_TRANSPORTOptional | stdio (client spawns the process) or http (streamable HTTP listener). |
MCP_NAMEOptional | Server name reported in the MCP initialize handshake. |
MCP_PATHOptional | HTTP path the MCP endpoint is served on. Used only when MCP_TRANSPORT=http. |
SERVER_PORTOptional | TCP port to listen on. Used only when MCP_TRANSPORT=http. |
SERVER_READ_TIMEOUTOptional | HTTP read timeout as a Go duration. Used only when MCP_TRANSPORT=http. |
SERVER_WRITE_TIMEOUTOptional | HTTP write timeout as a Go duration. Used only when MCP_TRANSPORT=http. |
LOG_MODEOptional | local (text, debug) or prod (JSON, info). Logs go to stderr. |
MAX_IDLE_CONNS_PER_HOSTOptional | Idle connections the outbound HTTP client keeps per host. |
X_DEBUGOptional | Log the raw requests sent to the X API. Verbose; the output can contain request details, so keep it off outside debugging. |
POSTS_MAX_QUERIESOptional | Queries accepted in one x_posts_search or x_posts_count call. |
POSTS_MAX_USERNAMESOptional | Usernames accepted in one x_posts_by_user call. |
POSTS_MAX_IDSOptional | Post ids accepted in one x_posts_lookup call. The X API caps this at 100. |
POSTS_DEFAULT_RESULTSOptional | Posts returned per query when the call does not ask for a count. Every post returned is billed. |
POSTS_MAX_RESULTSOptional | Upper bound for posts per query. The X API caps this at 100. |
POSTS_DEFAULT_DAYSOptional | How far back post searches look when the call does not say, in days. |
POSTS_MAX_DAYSOptional | Furthest back a post search may look, in days. Recent search cannot exceed 7. |
POSTS_DEFAULT_TIMEOUT_MSOptional | Timeout for a posts call in milliseconds when the call does not request one. |
POSTS_MIN_TIMEOUT_MSOptional | Lowest timeout a posts call may request, in milliseconds. |
POSTS_MAX_TIMEOUT_MSOptional | Highest timeout a posts call may request, in milliseconds. |
USERS_MAX_USERNAMESOptional | Usernames accepted in one x_users_lookup call. The X API caps this at 100. |
USERS_MAX_IDSOptional | User ids accepted in one x_users_lookup call. The X API caps this at 100. |
USERS_DEFAULT_RESULTSOptional | Users returned per page when the call does not ask for a count. |
USERS_MAX_RESULTSOptional | Upper bound for users per page. |
USERS_DEFAULT_TIMEOUT_MSOptional | Timeout for a users call in milliseconds when the call does not request one. |
USERS_MIN_TIMEOUT_MSOptional | Lowest timeout a users call may request, in milliseconds. |
USERS_MAX_TIMEOUT_MSOptional | Highest timeout a users call may request, in milliseconds. |
LISTS_DEFAULT_RESULTSOptional | Items returned per list page when the call does not ask for a count. |
LISTS_MAX_RESULTSOptional | Upper bound for items per list page. The X API caps this at 100. |
LISTS_DEFAULT_TIMEOUT_MSOptional | Timeout for a lists call in milliseconds when the call does not request one. |
LISTS_MIN_TIMEOUT_MSOptional | Lowest timeout a lists call may request, in milliseconds. |
LISTS_MAX_TIMEOUT_MSOptional | Highest timeout a lists call may request, in milliseconds. |
MEDIA_CHUNK_BYTESOptional | Bytes per upload segment. The X APPEND endpoint caps a segment at 5 MB. |
MEDIA_POLL_INTERVAL_MSOptional | How often the upload status is polled while X transcodes a video, in milliseconds. |
MEDIA_DEFAULT_TIMEOUT_MSOptional | Timeout for a whole upload in milliseconds when the call does not request one. |
MEDIA_MIN_TIMEOUT_MSOptional | Lowest timeout an upload may request, in milliseconds. |
MEDIA_MAX_TIMEOUT_MSOptional | Highest timeout an upload may request, in milliseconds. |
Details
| Package | ghcr.io/role1776/mcp-x:0.1.1 (OCI, stdio) |
| Package | https://github.com/Role1776/mcp-x/releases/download/v0.1.1/[email protected] (MCPB, stdio) |
| Package | https://github.com/Role1776/mcp-x/releases/download/v0.1.1/[email protected] (MCPB, stdio) |
| Package | https://github.com/Role1776/mcp-x/releases/download/v0.1.1/[email protected] (MCPB, stdio) |
| Package | https://github.com/Role1776/mcp-x/releases/download/v0.1.1/[email protected] (MCPB, stdio) |
| Package | https://github.com/Role1776/mcp-x/releases/download/v0.1.1/[email protected] (MCPB, stdio) |
| Package | https://github.com/Role1776/mcp-x/releases/download/v0.1.1/[email protected] (MCPB, stdio) |
| First published | 9 Sep 2026 |
| Last updated | 9 Sep 2026 |
| Registry name | io.github.Role1776/mcp-x |
More marketing and seo servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
