X API FastMCP Server
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@X API FastMCP Serverpost a tweet saying hello world"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
X API FastMCP Server
Run a local MCP server that exposes the X API OpenAPI spec as tools using FastMCP. Streaming and webhook endpoints are excluded.
Prerequisites
Python 3.9+
An X Developer Platform app (to get tokens)
Optional: an xAI API key if you want to run the Grok test client
Related MCP server: X(Twitter) V2 MCP Server
Setup (local)
Create a virtual environment and install dependencies:
python -m venv .venvsource .venv/bin/activatepip install -r requirements.txt
Create your local
.env:cp env.example .envRequired values (do not skip):
X_OAUTH_CONSUMER_KEYX_OAUTH_CONSUMER_SECRETX_BEARER_TOKEN(required for this setup; keep it set even if using OAuth1)
OAuth1 callback (defaults are fine):
X_OAUTH_CALLBACK_HOST(default127.0.0.1)X_OAUTH_CALLBACK_PORT(default8976)X_OAUTH_CALLBACK_PATH(default/oauth/callback)X_OAUTH_CALLBACK_TIMEOUT(default300)
Server settings (optional):
X_API_BASE_URL(defaulthttps://api.x.com)X_API_TIMEOUT(default30)MCP_HOST(default127.0.0.1)MCP_PORT(default8000)X_API_DEBUG(default1)
Tool filtering (optional, comma-separated):
X_API_TOOL_ALLOWLIST
Optional Grok test client:
XAI_API_KEYXAI_MODEL(defaultgrok-4-1-fast)MCP_SERVER_URL(defaulthttp://127.0.0.1:8000/mcp)
Optional OAuth2 token generation:
CLIENT_IDCLIENT_SECRETX_OAUTH_ACCESS_TOKENX_OAUTH_ACCESS_TOKEN_SECRET(optional)
Optional OAuth1 debug output:
X_OAUTH_PRINT_TOKENSX_OAUTH_PRINT_AUTH_HEADER
Register the callback URL in your X Developer App:
http://<X_OAUTH_CALLBACK_HOST>:<X_OAUTH_CALLBACK_PORT><X_OAUTH_CALLBACK_PATH>Example (defaults):
http://127.0.0.1:8976/oauth/callbackStart the server:
python server.pyThe MCP endpoint is http://127.0.0.1:8000/mcp by default.
Connect an MCP client:
Local client: point it to
http://127.0.0.1:8000/mcp.Remote client: tunnel your local server (e.g., ngrok) and use the public URL.
Whitelisting tools
Use X_API_TOOL_ALLOWLIST to load a small, explicit set of tools:
X_API_TOOL_ALLOWLIST=getUsersByUsername,createPosts,searchPostsRecentWhitelisting is applied at startup when the OpenAPI spec is loaded, so restart the server after changes. See the full tool list below before building your allowlist.
OAuth1 flow (startup behavior)
On startup, the server opens a browser for OAuth1 consent and waits for the
callback. Tokens are kept in memory only for the lifetime of the server
process. Set X_OAUTH_PRINT_TOKENS=1 to print tokens, or
X_OAUTH_PRINT_AUTH_HEADER=1 to print request headers.
Available tool calls (allowlist-ready)
Below is the full list of tool calls you can whitelist via
X_API_TOOL_ALLOWLIST. Copy any of these into your .env allowlist.
addListsMemberaddUserPublicKeyappendMediaUploadblockUsersDmscreateCommunityNotescreateComplianceJobscreateDirectMessagesByConversationIdcreateDirectMessagesByParticipantIdcreateDirectMessagesConversationcreateListscreateMediaMetadatacreateMediaSubtitlescreatePostscreateUsersBookmarkdeleteActivitySubscriptiondeleteAllConnectionsdeleteCommunityNotesdeleteConnectionsByEndpointdeleteConnectionsByUuidsdeleteDirectMessagesEventsdeleteListsdeleteMediaSubtitlesdeletePostsdeleteUsersBookmarkevaluateCommunityNotesfinalizeMediaUploadfollowListfollowUsergetAccountActivitySubscriptionCountgetActivitySubscriptionsgetChatConversationgetChatConversationsgetCommunitiesByIdgetComplianceJobsgetComplianceJobsByIdgetConnectionHistorygetDirectMessagesEventsgetDirectMessagesEventsByConversationIdgetDirectMessagesEventsByIdgetDirectMessagesEventsByParticipantIdgetInsights28HrgetInsightsHistoricalgetListsByIdgetListsFollowersgetListsMembersgetListsPostsgetMarketplaceHandleAvailabilitygetMediaAnalyticsgetMediaByMediaKeygetMediaByMediaKeysgetMediaUploadStatusgetNewsgetOpenApiSpecgetPostsAnalyticsgetPostsByIdgetPostsByIdsgetPostsCountsAllgetPostsCountsRecentgetPostsLikingUsersgetPostsQuotedPostsgetPostsRepostedBygetPostsRepostsgetSpacesBuyersgetSpacesByCreatorIdsgetSpacesByIdgetSpacesByIdsgetSpacesPostsgetTrendsByWoeidgetTrendsPersonalizedTrendsgetUsagegetUserPublicKeysgetUsersAffiliatesgetUsersBlockinggetUsersBookmarkFoldersgetUsersBookmarksgetUsersBookmarksByFolderIdgetUsersByIdgetUsersByIdsgetUsersByUsernamegetUsersByUsernamesgetUsersFollowedListsgetUsersFollowersgetUsersFollowinggetUsersLikedPostsgetUsersListMembershipsgetUsersMegetUsersMentionsgetUsersMutinggetUsersOwnedListsgetUsersPinnedListsgetUsersPostsgetUsersRepostsOfMegetUsersTimelinehidePostsReplyinitializeMediaUploadlikePostmediaUploadmuteUserpinListremoveListsMemberByUserIdrepostPostsearchCommunitiessearchCommunityNotesWrittensearchEligiblePostssearchNewssearchPostsAllsearchPostsRecentsearchSpacessearchUserssendChatMessageunblockUsersDmsunfollowListunfollowUserunlikePostunmuteUserunpinListunrepostPostupdateActivitySubscriptionupdateLists
Generate an OAuth2 user token (optional)
Add
CLIENT_IDandCLIENT_SECRETto your.env.Update
redirect_uriingenerate_authtoken.pyto match your app settings.Run
python generate_authtoken.pyand follow the prompts.Copy the printed access token into
.envasX_OAUTH_ACCESS_TOKEN. If your flow returns a secret, store it asX_OAUTH_ACCESS_TOKEN_SECRET.
Run the Grok MCP test client (optional)
Set
XAI_API_KEYin.env.Make sure your MCP server is running locally (or set
MCP_SERVER_URL).If Grok is not running on your machine, use ngrok to expose your local MCP server and set
MCP_SERVER_URLto the public HTTPS URL that ends with/mcp. Example flow:ngrok http 8000thenMCP_SERVER_URL=https://<id>.ngrok-free.dev/mcp.Run
python test_grok_mcp.py.
Notes
Endpoints with
/streamor/webhooksin the path are excluded.Operations tagged
StreamorWebhooks, or marked withx-twitter-streaming: true, are excluded.The OpenAPI spec is fetched from
https://api.twitter.com/2/openapi.jsonat startup.
This server cannot be deployed
Maintenance
Related MCP Connectors
Twitter/X read-only MCP server — 12 tools: search, users, tweets, followers, timelines, trends.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
FastMCP server for posting formatted content to X (Twitter) — Tollbooth-monetized, DPYC-native
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Related MCP Servers
- FlicenseAqualityDmaintenanceAn MCP server that provides AI agents with full access to the X (Twitter) API for posting, searching, and managing engagement through natural language. It supports comprehensive tools for tweet management, media uploads, and account analytics across multiple MCP-compatible clients.1554-
- AlicenseNot gradedqualityDmaintenanceAn MCP server for interacting with the Twitter/X API v2, enabling AI assistants to retrieve tweets, post content, reply, quote, and more programmatically.681 npm13MIT
- AlicenseBqualityDmaintenanceMCP server for interacting with the X platform (Twitter) via MCP clients like Claude, Cursor AI, and Windsurf AI.205 npm6MIT
- AlicenseAqualityBmaintenanceMCP server for the Twitter/X read API, enabling search, user profiles, tweets, followers, and more via natural language.94508 npmMIT