Twitter MCP服务器

一个用于通过AI工具与Twitter(X)交互的模型上下文协议(MCP)服务器,支持获取推文、发布推文、搜索Twitter、管理关注者等功能。

  • by rafaljanicki
  • Python
  • 混合部署
  • 35 星标
  • 更新于
在 GitHub 查看 rafaljanicki/x-twitter-mcp-server

使用说明

X(推特)MCP服务器

一个模型上下文协议(MCP)服务器,用于通过人工智能工具与推特(X)交互。该服务器允许您通过AI Tools中的自然语言命令获取推文、发布推文、搜索推特、管理关注者等。

特性

  • 获取用户资料、关注者和关注列表。
  • 发布、删除和收藏推文。
  • 在推特上搜索推文和趋势。
  • 管理书签和时间线。
  • Twitter API的内置速率限制处理。
  • 使用具有正确身份验证(API密钥和令牌)的Twitter API v2,避免用户名/密码破解,以最大限度地降低帐户暂停的风险。
  • 为用户管理、推特管理、时间表和搜索功能提供了Twitter API v2端点的完整实现。

先决条件

  • Python 3.10或更高版本:确保您的系统上安装了Python。
  • Twitter开发者帐户:您需要来自的API凭据(API密钥、API机密、访问令牌、访问令牌机密和承载令牌) Twitter开发者门户.
  • 可选: 克劳德桌面版:从下载并安装Claude Desktop应用程序 Anthropic网站.
  • 可选: Node.js (用于MCP集成):在Claude Desktop中运行MCP服务器所需。
  • 像这样的包管理器 uv 或 pip 对于Python依赖关系。

安装

选项1:通过Smithery安装(推荐)

通过以下方式自动为Claude Desktop安装X(Twitter)MCP服务器 史密瑟里:

npx -y @smithery/cli install @rafaljanicki/x-twitter-mcp-server --client claude

选项2:从PyPI安装

最简单的安装方法 x-twitter-mcp 通过PyPI:

pip install x-twitter-mcp

选项3:从源代码安装

如果您更喜欢从源代码存储库安装:

  1. 克隆存储库:

    git clone https://github.com/rafaljanicki/x-twitter-mcp-server.git
    cd x-twitter-mcp-server
    
  2. 设置虚拟环境 (可选但推荐):

    python -m venv .venv
    source .venv/bin/activate  # On Windows: .venv\Scripts\activate
    
  3. 再进行: 使用 uv (推荐,因为项目使用 uv.lock):

    uv sync
    

    或者,使用 pip:

    pip install .
    
  4. 配置环境变量:

    • 创建 .env 项目根目录中的文件(您可以复制 .env.example 如果提供)。
    • 添加您的Twitter API凭据:
      TWITTER_API_KEY=your_api_key
      TWITTER_API_SECRET=your_api_secret
      TWITTER_ACCESS_TOKEN=your_access_token
      TWITTER_ACCESS_TOKEN_SECRET=your_access_token_secret
      TWITTER_BEARER_TOKEN=your_bearer_token
      
    • 使用书签工具(get_bookmarks, delete_all_bookmarks),同时添加OAuth 2.0用户访问令牌:
      TWITTER_OAUTH2_USER_ACCESS_TOKEN=your_oauth2_user_token
      
      看 获取OAuth 2.0用户令牌 在......下面

获取OAuth 2.0用户令牌

书签端点(GET /2/users/:id/bookmarks, DELETE /2/users/:id/bookmarks/:tweet_id)要求 OAuth 2.0用户上下文 --他们拒绝了仅限应用程序的承载令牌和OAuth 1.0a。您需要执行一次PKCE授权流以获取用户范围的令牌。

步骤

  1. 在 Twitter开发者门户,打开您的应用程序→ 设置 → 用户身份验证设置 并启用OAuth 2.0。设置回调URL(例如。 https://localhost/).

  2. 使用Tweepy运行PKCE流:

import tweepy

handler = tweepy.OAuth2UserHandler(
    client_id="YOUR_CLIENT_ID",       # OAuth 2.0 Client ID (from Developer Portal)
    redirect_uri="https://localhost/",
    scope=["bookmark.read", "bookmark.write", "users.read", "offline.access"],
    client_secret="YOUR_CLIENT_SECRET",  # Optional for public clients
)

print(handler.get_authorization_url())
# Open the URL, authorize, copy the redirected URL, then:
redirected_url = input("Paste redirected URL: ")
token = handler.fetch_token(redirected_url)
print(token["access_token"])
  1. 将生成的令牌设置为 TWITTER_OAUTH2_USER_ACCESS_TOKEN 在您的环境中或 .env 文件。

运行服务器

首选的传输方式是流式HTTP。使用以下选项之一:

推荐:流式HTTP(Docker/Smithery)

将服务器作为具有Streamable HTTP和SSE端点的HTTP服务运行。

  1. 构建Docker镜像:

    docker build -t x-twitter-mcp .
    
  2. 运行容器(Smithery使用PORT;这里的默认值是8081):

    docker run -p 8081:8081 -e PORT=8081 x-twitter-mcp
    
  3. 终点:

    • 流式HTTP(基于HTTP的JSON-RPC): POST http://localhost:8081/mcp
    • SSE(服务器发送事件): GET http://localhost:8081/sse
  4. 通过base64编码按请求传递配置(Smithery推荐) config 查询参数。JSON配置示例:

    {"twitterApiKey":"...","twitterApiSecret":"...","twitterAccessToken":"...","twitterAccessTokenSecret":"...","twitterBearerToken":"..."}
    

    编码和调用 initialize:

    CONFIG_B64=$(printf '%s' '{"twitterApiKey":"YOUR_KEY","twitterApiSecret":"YOUR_SECRET","twitterAccessToken":"YOUR_TOKEN","twitterAccessTokenSecret":"YOUR_TOKEN_SECRET","twitterBearerToken":"YOUR_BEARER"}' | base64)
    
    curl -sS -X POST "http://localhost:8081/mcp?config=${CONFIG_B64}" \
      -H 'content-type: application/json' \
      -d '{"jsonrpc":"2.0","id":"1","method":"initialize","params":{"capabilities":{}}}'
    

笔记:

  • A. POST / 将返回404;使用 /mcp 用于流式HTTP和 /sse 对于SSE。
  • 当通过Smithery部署时, smithery.yaml 已配置为 runtime: container 和 startCommand.type: http.

流式HTTP(本地,无Docker)

直接运行ASGI服务器。

如果从PyPI安装:

python -m x_twitter_mcp.http_server

如果从源代码安装 uv:

uv run python -m x_twitter_mcp.http_server

端点和配置传递与上述相同。

传统STDIO(CLI脚本)

该项目还公开了一个STDIO CLI脚本 x-twitter-mcp-server 适用于需要STDIO的桌面客户端。

如果从PyPI安装:

x-twitter-mcp-server

如果从源代码安装 uv:

uv run x-twitter-mcp-server

与Claude Desktop一起使用

要将此MCP服务器与Claude Desktop一起使用,您需要配置Claude以连接到服务器。请按照以下步骤操作:

第一步:安装Node.js

Claude Desktop使用Node.js运行MCP服务器。如果你没有安装Node.js:

  • 从下载并安装Node.js nodejs.org.
  • 验证安装:
    node --version
    

步骤2:找到Claude桌面配置

Claude Desktop使用 claude_desktop_config.json 配置MCP服务器的文件。

  • 视窗: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

如果文件不存在,请创建它。

步骤3:配置MCP服务器

编辑 claude_desktop_config.json 包括 x-twitter-mcp 服务器。替换 /path/to/x-twitter-mcp-server 项目目录的实际路径(如果是从源代码安装的)或Python可执行文件的路径(如果从PyPI安装的)。

如果从PyPI安装:

{
  "mcpServers": {
    "x-twitter-mcp": {
      "command": "x-twitter-mcp-server",
      "args": [],
      "env": {
        "PYTHONUNBUFFERED": "1",
        "TWITTER_API_KEY": "your_api_key",
        "TWITTER_API_SECRET": "your_api_secret",
        "TWITTER_ACCESS_TOKEN": "your_access_token",
        "TWITTER_ACCESS_TOKEN_SECRET": "your_access_token_secret",
        "TWITTER_BEARER_TOKEN": "your_bearer_token",
        "TWITTER_OAUTH2_USER_ACCESS_TOKEN": "your_oauth2_user_token"
      }
    }
  }
}

如果从源代码安装 uv:

{
  "mcpServers": {
    "x-twitter-mcp": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/x-twitter-mcp-server",
        "run",
        "x-twitter-mcp-server"
      ],
      "env": {
        "PYTHONUNBUFFERED": "1"
      }
    }
  }
}
  • "command": "x-twitter-mcp-server":如果从PyPI安装,则直接使用CLI脚本。
  • "env":如果从PyPI安装,您可能需要直接在配置中提供环境变量(因为没有 .env 文件)。如果从源代码安装 .env 文件将被使用。
  • "env": {"PYTHONUNBUFFERED": "1"}:确保输出无缓冲,以便在Claude中更好地记录。

步骤4:重新启动克劳德桌面

  • 完全退出克劳德桌面。
  • 重新打开Claude Desktop以加载新配置。

步骤5:验证连接

  • 打开克劳德桌面。
  • 在输入区域(右下角)寻找锤子或连接器图标。这表示MCP工具可用。
  • 单击图标查看来自的可用工具 x-twitter-mcp,例如 post_tweet, search_twitter, get_user_profile等等。

第6步:与克劳德一起测试

现在,您可以在Claude Desktop中使用自然语言与Twitter进行交互。以下是一些示例提示:

  • 获取用户配置文件:

    Get the Twitter profile for user ID 123456.
    

    克劳德会打电话给 get_user_profile 工具并返回用户的详细信息。

  • 发布推文:

    Post a tweet saying "Hello from Claude Desktop! #MCP"
    

    克劳德将使用 post_tweet 发布推文并确认操作的工具。

  • 搜索推特:

    Search Twitter for recent tweets about AI.
    

    克劳德将调用 search_twitter 工具并返回相关推文。

  • 获取趋势:

    What are the current trending topics on Twitter?
    

    克劳德将使用 get_trends 获取热门话题的工具。

出现提示时,授予Claude在聊天会话中使用MCP工具的权限。

OpenClaw配套工作流程

当MCP客户端应该直接调用Twitter API v2工具时,此MCP服务器是最好的。如果工作流在OpenClaw中运行,并且需要插件安装元数据、端点发现、监控警报、webhooks、赠品抽奖、媒体上传或下载工作流、直接消息、关注者导出或批准门控的帖子和回复操作,请将TweetClaw用作单独的OpenClaw插件,并在工具之间传递经过审核的推文ID或URL。

看 OpenClaw配套工作流程 用于保持凭据分离并避免重复写入操作的命令流。

可用工具

以下是由提供的所有工具的列表 x-twitter-mcp 服务器,以及使用自然语言提示在Claude Desktop中执行的示例。

用户管理工具

get_user_profile

  • 描述:获取用户的详细个人资料信息。
  • Claude桌面示例:
    Get the Twitter profile for user ID 123456789.
    
    Claude将返回用户的个人资料详细信息,包括ID、姓名、用户名、个人资料图像URL和描述。

get_user_by_screen_name

  • 描述:按屏幕名称获取用户。
  • Claude桌面示例:
    Get the Twitter user with screen name "example_user".
    
    Claude将返回用户的个人资料详细信息。

get_user_by_id

  • 描述:按ID获取用户。
  • Claude桌面示例:
    Fetch the Twitter user with ID 987654321.
    
    Claude将返回用户的个人资料详细信息。

get_user_followers

  • 描述:检索给定用户的关注者列表。
  • Claude桌面示例:
    Get the followers of user ID 123456789, limit to 50.
    
    Claude将返回最多50个关注者的列表。

get_user_following

  • 描述:检索给定用户所关注的用户。
  • Claude桌面示例:
    Who is user ID 123456789 following? Limit to 50 users.
    
    Claude将返回最多50个用户的列表。

get_user_followers_you_know

  • 描述:检索常见关注者列表。
  • Claude桌面示例:
    Get common followers for user ID 123456789, limit to 50.
    
    Claude将返回一个最多50个常见关注者的列表(通过过滤关注者来模拟)。

get_user_subscriptions

  • 描述:检索指定用户订阅的用户列表。
  • Claude桌面示例:
    Get the subscriptions for user ID 123456789, limit to 50.
    
    Claude将返回最多50个用户的列表(使用以下内容作为订阅代理)。

推特管理工具

post_tweet

  • 描述:发布带有可选媒体、回复和标签的推文。
  • Claude桌面示例:
    Post a tweet saying "Hello from Claude Desktop! #MCP"
    
    克劳德将发布推文并返回推文详细信息。

delete_tweet

  • 描述:按ID删除推文。
  • Claude桌面示例:
    Delete the tweet with ID 123456789012345678.
    
    克劳德将删除推文并确认操作。

get_tweet_details

  • 描述:获取特定推文的详细信息。
  • Claude桌面示例:
    Get details for tweet ID 123456789012345678.
    
    Claude将返回推特的详细信息,包括ID、文本、创建日期和作者ID。

create_poll_tweet

  • 描述:创建带有投票的推文。
  • Claude桌面示例:
    Create a poll tweet with the question "What's your favorite color?" and options "Red", "Blue", "Green" for 60 minutes.
    
    Claude将创建投票推文并返回推文详细信息。

vote_on_poll

  • 描述:投票表决。
  • Claude桌面示例:
    Vote "Blue" on the poll in tweet ID 123456789012345678.
    
    Claude将返回一个模拟响应(因为Twitter API v2不支持投票)。

favorite_tweet

  • 描述:收藏推特。
  • Claude桌面示例:
    Like the tweet with ID 123456789012345678.
    
    克劳德会喜欢这条推文并确认这一行动。

unfavorite_tweet

  • 描述:不公开推文。
  • Claude桌面示例:
    Unlike the tweet with ID 123456789012345678.
    
    克劳德将对这条推文表示不满,并确认这一行动。

bookmark_tweet

  • 描述:将推特添加到书签中。
  • Claude桌面示例:
    Bookmark the tweet with ID 123456789012345678.
    
    克劳德将为推特添加书签并确认操作。

delete_bookmark

  • 描述:从书签中删除推文。
  • Claude桌面示例:
    Remove the bookmark for tweet ID 123456789012345678.
    
    Claude将删除书签并确认操作。

delete_all_bookmarks

  • 描述:破坏性和不可逆转。通过获取每个页面并逐一删除它们来永久删除所有书签。需要 TWITTER_OAUTH2_USER_ACCESS_TOKEN.
  • Claude桌面示例:
    Delete all my Twitter bookmarks.
    
    Claude将首先与用户确认,然后删除所有书签并报告计数。

get_bookmarks

  • 描述:检索经过身份验证的用户的书签推文。每次通话最多返回100条推文;使用 cursor 分页参数。需要 TWITTER_OAUTH2_USER_ACCESS_TOKEN.
  • Claude桌面示例:
    Show my Twitter bookmarks, limit to 25.
    
    Claude将返回多达25条书签推文,包括ID、文本、创建日期和作者ID。

时间线和搜索工具

get_timeline

  • 描述:从您的家庭时间线获取推文(For You)。
  • Claude桌面示例:
    Show my Twitter For You timeline, limit to 20 tweets.
    
    Claude将从您的For You时间线返回最多20条推文。

get_latest_timeline

  • 描述:从您的家庭时间线获取推文(以下)。
  • Claude桌面示例:
    Show my Twitter Following timeline, limit to 20 tweets.
    
    Claude将从您的关注时间线返回最多20条推文。

search_twitter

  • 描述:使用查询搜索推特。
  • Claude桌面示例:
    Search Twitter for recent tweets about AI, limit to 10.
    
    克劳德将返回最近10条关于人工智能的推文。

get_trends

  • 描述:检索推特上的热门话题。
  • Claude桌面示例:
    What are the current trending topics on Twitter? Limit to 10.
    
    克劳德将返回多达10个热门话题。

get_highlights_tweets

  • 描述:从用户的时间线中检索突出显示的推文。
  • Claude桌面示例:
    Get highlighted tweets from user ID 123456789, limit to 20.
    
    Claude将返回用户时间线中最多20条推文(模拟为亮点)。

get_user_mentions

  • 描述:获取提及特定用户的推文。
  • Claude桌面示例:
    Get tweets mentioning user ID 123456789, limit to 20.
    
    克劳德将返回多达20条提及该用户的推文。

故障排除

  • 服务器未启动:

    • 确保您的 .env 文件具有所有必需的Twitter API凭据(若从源安装)。
    • 如果从PyPI安装,请确保在 claude_desktop_config.json 或者你的壳。
    • 运行时检查终端输出是否有错误 x-twitter-mcp-server.
    • 核实一下 uv 或者您的Python可执行文件已正确安装并可访问。
  • Claude未检测到服务器:

    • 确认路径 claude_desktop_config.json 是正确的。
    • 确保 command 和 args 指向正确的可执行文件和脚本。
    • 更新配置文件后重新启动Claude Desktop。
    • 检查Claude的开发人员模式日志(帮助→ 启用开发人员模式→ 打开MCP日志文件)查看错误。
  • 速率限制错误:

    • 服务器包括速率限制处理,但如果您达到Twitter API限制,则可能需要等待重置窗口(例如,15分钟用于Twitter操作)。
  • 书签工具返回403:

    • get_bookmarks 和 delete_all_bookmarks 需要 TWITTER_OAUTH2_USER_ACCESS_TOKEN仅限应用程序的承载令牌和OAuth 1.0a被书签端点拒绝。
    • 看 获取OAuth 2.0用户令牌 有关设置说明。
  • 语法警告:

    • 如果你看到 SyntaxWarning 来自Tweepy的消息,它们是由于Tweepy和Python 3.13中的文档字符串问题造成的。服务器包含一个警告抑制功能来处理此问题。

贡献

欢迎投稿!请在上打开问题或提交拉取请求 GitHub 仓库.

许可证

该项目根据MIT许可证获得许可。请参阅 LICENSE 文件以获取详细信息。

作者