Skip to content
mcp/skillhub

X (Twitter) MCP Server

by role1776io.github.Role1776/mcp-xv0.1.1

Search, read and publish X posts and manage users, lists and media via the X API v2.

2Dockerstdioofficial registry

context tax

queued

security

queued

cold start

queued

freshness

Active30d ago

Install X (Twitter) MCP server

Install in Claude Code

claude mcp add x-role1776 -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>' -- 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 ghcr.io/role1776/mcp-x:0.1.1

Configuration

VariableRequiredSecretDescription
X_API_KEYyesyesOAuth 1.0a consumer key. developer.x.com -> your project -> your app -> Keys and tokens.
X_API_KEY_SECRETyesyesOAuth 1.0a consumer secret, issued together with X_API_KEY.
X_ACCESS_TOKENyesyesUser 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_SECRETyesyesUser access token secret, issued together with X_ACCESS_TOKEN.
MEDIA_ROOTyes—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_TRANSPORT——stdio (client spawns the process) or http (streamable HTTP listener).
MCP_NAME——Server name reported in the MCP initialize handshake.
MCP_PATH——HTTP path the MCP endpoint is served on. Used only when MCP_TRANSPORT=http.
SERVER_PORT——TCP port to listen on. Used only when MCP_TRANSPORT=http.
SERVER_READ_TIMEOUT——HTTP read timeout as a Go duration. Used only when MCP_TRANSPORT=http.
SERVER_WRITE_TIMEOUT——HTTP write timeout as a Go duration. Used only when MCP_TRANSPORT=http.
LOG_MODE——local (text, debug) or prod (JSON, info). Logs go to stderr.
MAX_IDLE_CONNS_PER_HOST——Idle connections the outbound HTTP client keeps per host.
X_DEBUG——Log the raw requests sent to the X API. Verbose; the output can contain request details, so keep it off outside debugging.
POSTS_MAX_QUERIES——Queries accepted in one x_posts_search or x_posts_count call.
POSTS_MAX_USERNAMES——Usernames accepted in one x_posts_by_user call.
POSTS_MAX_IDS——Post ids accepted in one x_posts_lookup call. The X API caps this at 100.
POSTS_DEFAULT_RESULTS——Posts returned per query when the call does not ask for a count. Every post returned is billed.
POSTS_MAX_RESULTS——Upper bound for posts per query. The X API caps this at 100.
POSTS_DEFAULT_DAYS——How far back post searches look when the call does not say, in days.
POSTS_MAX_DAYS——Furthest back a post search may look, in days. Recent search cannot exceed 7.
POSTS_DEFAULT_TIMEOUT_MS——Timeout for a posts call in milliseconds when the call does not request one.
POSTS_MIN_TIMEOUT_MS——Lowest timeout a posts call may request, in milliseconds.
POSTS_MAX_TIMEOUT_MS——Highest timeout a posts call may request, in milliseconds.
USERS_MAX_USERNAMES——Usernames accepted in one x_users_lookup call. The X API caps this at 100.
USERS_MAX_IDS——User ids accepted in one x_users_lookup call. The X API caps this at 100.
USERS_DEFAULT_RESULTS——Users returned per page when the call does not ask for a count.
USERS_MAX_RESULTS——Upper bound for users per page.
USERS_DEFAULT_TIMEOUT_MS——Timeout for a users call in milliseconds when the call does not request one.
USERS_MIN_TIMEOUT_MS——Lowest timeout a users call may request, in milliseconds.
USERS_MAX_TIMEOUT_MS——Highest timeout a users call may request, in milliseconds.
LISTS_DEFAULT_RESULTS——Items returned per list page when the call does not ask for a count.
LISTS_MAX_RESULTS——Upper bound for items per list page. The X API caps this at 100.
LISTS_DEFAULT_TIMEOUT_MS——Timeout for a lists call in milliseconds when the call does not request one.
LISTS_MIN_TIMEOUT_MS——Lowest timeout a lists call may request, in milliseconds.
LISTS_MAX_TIMEOUT_MS——Highest timeout a lists call may request, in milliseconds.
MEDIA_CHUNK_BYTES——Bytes per upload segment. The X APPEND endpoint caps a segment at 5 MB.
MEDIA_POLL_INTERVAL_MS——How often the upload status is polled while X transcodes a video, in milliseconds.
MEDIA_DEFAULT_TIMEOUT_MS——Timeout for a whole upload in milliseconds when the call does not request one.
MEDIA_MIN_TIMEOUT_MS——Lowest timeout an upload may request, in milliseconds.
MEDIA_MAX_TIMEOUT_MS——Highest timeout an upload may request, in milliseconds.

Freshness

Active — last maintenance signal 30d ago. The newest of the signals below sets the band.

  1. Last commit (default branch)

    2026-09-10 · 30d ago · GitHub

  2. Latest release

    2026-09-09 · 31d ago · GitHub · v0.1.1

  3. Package published

    no data · npm/PyPI

  4. Registry entry updated

    2026-09-09 · 31d ago · official registry · v0.1.1

FAQ

›How do I install the X (Twitter) MCP server in Claude Code?

Run: claude mcp add x-role1776 -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>' -- 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 ghcr.io/role1776/mcp-x:0.1.1. For Cursor, VS Code, Claude Desktop and Windsurf, use the install tabs above.

›Does X (Twitter) require an API key?

Yes. It expects X_API_KEY, X_API_KEY_SECRET, X_ACCESS_TOKEN, X_ACCESS_TOKEN_SECRET, MEDIA_ROOT, of which 4 are secrets.

›Can I use X (Twitter) as a remote (hosted) MCP server?

No hosted endpoint is published; it runs locally over stdio.

›Is X (Twitter) in the official MCP registry?

Yes, as io.github.Role1776/mcp-x.

Alternatives to X (Twitter)

Other social media MCP servers.

View all