X API本地MCP服务器

一个本地运行的MCP服务器,通过FastMCP将X API OpenAPI规范作为工具暴露出来,支持工具过滤和OAuth1/OAuth2认证。

  • by xdevplatform
  • Python
  • 本地部署
  • 864 星标
  • 更新于
在 GitHub 查看 xdevplatform/xMCP

使用说明

X API FastMCP服务器

运行本地MCP服务器,将X API OpenAPI规范公开为使用的工具 FastMCP。流媒体和webhook端点被排除在外。

先决条件

  • Python 3.9+
  • X开发者平台应用程序(获取代币)
  • 可选:如果您想运行Grok测试客户端,请使用xAI API密钥

设置(本地)

  1. 创建虚拟环境并安装依赖项:
    • python -m venv .venv
    • source .venv/bin/activate
    • pip install -r requirements.txt
  2. 创建您的本地 .env:
    • cp env.example .env
    • 必填值(不要跳过):
      • X_OAUTH_CONSUMER_KEY
      • X_OAUTH_CONSUMER_SECRET
      • X_BEARER_TOKEN (此设置需要;即使使用OAuth1,也要保持设置)
    • OAuth1回调(默认值很好):
      • X_OAUTH_CALLBACK_HOST (默认值 127.0.0.1)
      • X_OAUTH_CALLBACK_PORT (默认值 8976)
      • X_OAUTH_CALLBACK_PATH (默认值 /oauth/callback)
      • X_OAUTH_CALLBACK_TIMEOUT (默认值 300)
    • 服务器设置(可选):
      • X_API_BASE_URL (默认值 https://api.x.com)
      • X_API_TIMEOUT (默认值 30)
      • MCP_HOST (默认值 127.0.0.1)
      • MCP_PORT (默认值 8000)
      • X_API_DEBUG (默认值 1)
  • 工具筛选(可选,逗号分隔):
    • X_API_TOOL_ALLOWLIST
  • 可选Grok测试客户端:
    • XAI_API_KEY
    • XAI_MODEL (默认值 grok-4-1-fast)
    • MCP_SERVER_URL (默认值 http://127.0.0.1:8000/mcp)
  • 可选的OAuth2令牌生成:
    • CLIENT_ID
    • CLIENT_SECRET
    • X_OAUTH_ACCESS_TOKEN
- `X_OAUTH_ACCESS_TOKEN_SECRET` (optional)
  • 可选的OAuth1调试输出:
    • X_OAUTH_PRINT_TOKENS
    • X_OAUTH_PRINT_AUTH_HEADER
  1. 在您的X Developer应用程序中注册回调URL:
http://<X_OAUTH_CALLBACK_HOST>:<X_OAUTH_CALLBACK_PORT><X_OAUTH_CALLBACK_PATH>

示例(默认值):

http://127.0.0.1:8976/oauth/callback
  1. 启动服务器:
python server.py

MCP端点为 http://127.0.0.1:8000/mcp 默认情况下。

  1. 连接MCP客户端:
  • 本地客户端:指向 http://127.0.0.1:8000/mcp.
  • 远程客户端:通过隧道连接本地服务器(例如ngrok)并使用公共URL。

白名单工具

使用 X_API_TOOL_ALLOWLIST 加载一组小而明确的工具:

X_API_TOOL_ALLOWLIST=getUsersByUsername,createPosts,searchPostsRecent

启动时加载OpenAPI规范时应用白名单,因此重新启动 更改后的服务器。在构建您的工具之前,请参阅下面的完整工具列表 对抗主义者。

OAuth1流(启动行为)

启动时,服务器打开浏览器以获取OAuth1同意,并等待 回拨。令牌仅在服务器的生命周期内保存在内存中 过程。集 X_OAUTH_PRINT_TOKENS=1 打印令牌,或 X_OAUTH_PRINT_AUTH_HEADER=1 打印请求标头。

可用的工具调用(已准备就绪)

以下是您可以通过以下方式将工具调用列入白名单的完整列表 X_API_TOOL_ALLOWLIST。将其中任何一个复制到您的 .env 对抗主义者。

  • addListsMember
  • addUserPublicKey
  • appendMediaUpload
  • blockUsersDms
  • createCommunityNotes
  • createComplianceJobs
  • createDirectMessagesByConversationId
  • createDirectMessagesByParticipantId
  • createDirectMessagesConversation
  • createLists
  • createMediaMetadata
  • createMediaSubtitles
  • createPosts
  • createUsersBookmark
  • deleteActivitySubscription
  • deleteAllConnections
  • deleteCommunityNotes
  • deleteConnectionsByEndpoint
  • deleteConnectionsByUuids
  • deleteDirectMessagesEvents
  • deleteLists
  • deleteMediaSubtitles
  • deletePosts
  • deleteUsersBookmark
  • evaluateCommunityNotes
  • finalizeMediaUpload
  • followList
  • followUser
  • getAccountActivitySubscriptionCount
  • getActivitySubscriptions
  • getChatConversation
  • getChatConversations
  • getCommunitiesById
  • getComplianceJobs
  • getComplianceJobsById
  • getConnectionHistory
  • getDirectMessagesEvents
  • getDirectMessagesEventsByConversationId
  • getDirectMessagesEventsById
  • getDirectMessagesEventsByParticipantId
  • getInsights28Hr
  • getInsightsHistorical
  • getListsById
  • getListsFollowers
  • getListsMembers
  • getListsPosts
  • getMarketplaceHandleAvailability
  • getMediaAnalytics
  • getMediaByMediaKey
  • getMediaByMediaKeys
  • getMediaUploadStatus
  • getNews
  • getOpenApiSpec
  • getPostsAnalytics
  • getPostsById
  • getPostsByIds
  • getPostsCountsAll
  • getPostsCountsRecent
  • getPostsLikingUsers
  • getPostsQuotedPosts
  • getPostsRepostedBy
  • getPostsReposts
  • getSpacesBuyers
  • getSpacesByCreatorIds
  • getSpacesById
  • getSpacesByIds
  • getSpacesPosts
  • getTrendsByWoeid
  • getTrendsPersonalizedTrends
  • getUsage
  • getUserPublicKeys
  • getUsersAffiliates
  • getUsersBlocking
  • getUsersBookmarkFolders
  • getUsersBookmarks
  • getUsersBookmarksByFolderId
  • getUsersById
  • getUsersByIds
  • getUsersByUsername
  • getUsersByUsernames
  • getUsersFollowedLists
  • getUsersFollowers
  • getUsersFollowing
  • getUsersLikedPosts
  • getUsersListMemberships
  • getUsersMe
  • getUsersMentions
  • getUsersMuting
  • getUsersOwnedLists
  • getUsersPinnedLists
  • getUsersPosts
  • getUsersRepostsOfMe
  • getUsersTimeline
  • hidePostsReply
  • initializeMediaUpload
  • likePost
  • mediaUpload
  • muteUser
  • pinList
  • removeListsMemberByUserId
  • repostPost
  • searchCommunities
  • searchCommunityNotesWritten
  • searchEligiblePosts
  • searchNews
  • searchPostsAll
  • searchPostsRecent
  • searchSpaces
  • searchUsers
  • sendChatMessage
  • unblockUsersDms
  • unfollowList
  • unfollowUser
  • unlikePost
  • unmuteUser
  • unpinList
  • unrepostPost
  • updateActivitySubscription
  • updateLists

生成OAuth2用户令牌(可选)

  1. 添加 CLIENT_ID 和 CLIENT_SECRET 到你的 .env.
  2. 更新 redirect_uri 在 generate_authtoken.py 以匹配您的应用程序设置。
  3. 跑 python generate_authtoken.py 并按照提示进行操作。
  4. 将打印的访问令牌复制到 .env 作为 X_OAUTH_ACCESS_TOKEN. 如果您的流返回一个秘密,请将其存储为 X_OAUTH_ACCESS_TOKEN_SECRET.

运行Grok MCP测试客户端(可选)

  1. 集 XAI_API_KEY 在 .env.
  2. 确保您的MCP服务器正在本地运行(或设置 MCP_SERVER_URL).
  3. 如果Grok未在您的计算机上运行,请使用ngrok暴露您的本地MCP 服务器和设置 MCP_SERVER_URL 指向以结尾的公共HTTPS URL /mcp. 示例流程: ngrok http 8000 然后 MCP_SERVER_URL=https://<id>.ngrok-free.dev/mcp.
  4. 跑 python test_grok_mcp.py.

备注

  • 端点具有 /stream 或 /webhooks 在路径中被排除。
  • 操作已标记 Stream 或 Webhooks,或标有 x-twitter-streaming: true,被排除在外。
  • OpenAPI规范从以下位置获取 https://api.twitter.com/2/openapi.json 在 启动。