Search, read and publish X posts and manage users, lists and media via the X API v2.
npx @getmcp/cli add io.github.Role1776/mcp-xRequires Docker Engine. Community-contributed server. Review source before installing.
X_API_KEYOAuth 1.0a consumer key. developer.x.com -> your project -> your app -> Keys and tokens.
X_API_KEY_SECRETOAuth 1.0a consumer secret, issued together with X_API_KEY.
X_ACCESS_TOKENUser 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_SECRETUser access token secret, issued together with X_ACCESS_TOKEN.
MEDIA_ROOTAbsolute 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.
Config file: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"io.github.Role1776/mcp-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": "",
"X_API_KEY_SECRET": "",
"X_ACCESS_TOKEN": "",
"X_ACCESS_TOKEN_SECRET": "",
"MEDIA_ROOT": "",
"MCP_TRANSPORT": "stdio",
"MCP_NAME": "mcp-x",
"MCP_PATH": "/mcp",
"SERVER_PORT": "8080",
"SERVER_READ_TIMEOUT": "60s",
"SERVER_WRITE_TIMEOUT": "60s",
"LOG_MODE": "local",
"MAX_IDLE_CONNS_PER_HOST": "100",
"X_DEBUG": "false",
"POSTS_MAX_QUERIES": "5",
"POSTS_MAX_USERNAMES": "5",
"POSTS_MAX_IDS": "100",
"POSTS_DEFAULT_RESULTS": "10",
"POSTS_MAX_RESULTS": "100",
"POSTS_DEFAULT_DAYS": "7",
"POSTS_MAX_DAYS": "7",
"POSTS_DEFAULT_TIMEOUT_MS": "15000",
"POSTS_MIN_TIMEOUT_MS": "2000",
"POSTS_MAX_TIMEOUT_MS": "60000",
"USERS_MAX_USERNAMES": "100",
"USERS_MAX_IDS": "100",
"USERS_DEFAULT_RESULTS": "100",
"USERS_MAX_RESULTS": "1000",
"USERS_DEFAULT_TIMEOUT_MS": "15000",
"USERS_MIN_TIMEOUT_MS": "2000",
"USERS_MAX_TIMEOUT_MS": "60000",
"LISTS_DEFAULT_RESULTS": "25",
"LISTS_MAX_RESULTS": "100",
"LISTS_DEFAULT_TIMEOUT_MS": "15000",
"LISTS_MIN_TIMEOUT_MS": "2000",
"LISTS_MAX_TIMEOUT_MS": "60000",
"MEDIA_CHUNK_BYTES": "4194304",
"MEDIA_POLL_INTERVAL_MS": "2000",
"MEDIA_DEFAULT_TIMEOUT_MS": "120000",
"MEDIA_MIN_TIMEOUT_MS": "5000",
"MEDIA_MAX_TIMEOUT_MS": "600000"
}
}
}
}Remote MCP server for Tandem docs, install guides, SDKs, workflows, and agent setup help.
Ephemeral data sandbox for AI workflows with guardrails and security
MCP server for Anki flashcards: adaptive review, notes, media, and deck management via AnkiConnect.
AI memory layer — one shared, persistent memory across every AI tool you connect.