这是一个增强型的模型上下文协议(MCP)服务器,为X平台增加了OAuth 2.0支持、v2 API媒体上传以及全面的速率限制功能。
此服务器根据认证方法和操作智能地使用不同的X API版本:
upload.twitter.com)。api.x.com/2/media/upload)。开始之前,请确保你已经具备以下条件:
此服务器支持两种认证方法。根据需要选择:
创建开发者账户:
创建新应用:
配置应用权限:
http://localhost:3000/callbackhttp://localhost:3000/callback获取您的凭证:
所需凭证:
API_KEY=your_api_key_here
API_SECRET_KEY=your_api_secret_key_here
ACCESS_TOKEN=your_access_token_here
ACCESS_TOKEN_SECRET=your_access_token_secret_here
获取客户端凭证:
生成用户令牌:
选项A - 使用我们的辅助脚本:
# 首先克隆这个仓库
git clone https://github.com/mbelinky/x-mcp-server.git
cd x-mcp-server/twitter-mcp
npm install
# 运行OAuth2设置脚本
node scripts/oauth2-setup.js
选项B - 手动设置:
tweet.read,tweet.write,users.read,media.write,offline.access。所需凭证:
AUTH_TYPE=oauth2
OAUTH2_CLIENT_ID=your_client_id_here
OAUTH2_CLIENT_SECRET=your_client_secret_here
OAUTH2_ACCESS_TOKEN=your_access_token_here
OAUTH2_REFRESH_TOKEN=your_refresh_token_here
通过NPM安装(推荐):
编辑Claude桌面配置文件:
%APPDATA%\Claude\claude_desktop_config.json~/Library/Application Support/Claude/claude_desktop_config.json添加以下配置:
{
"mcpServers": {
"twitter-mcp": {
"command": "npx",
"args": ["-y", "@mbelinky/x-mcp-server"],
"env": {
"API_KEY": "your_api_key_here",
"API_SECRET_KEY": "your_api_secret_key_here",
"ACCESS_TOKEN": "your_access_token_here",
"ACCESS_TOKEN_SECRET": "your_access_token_secret_here"
}
}
}
}
对于OAuth 2.0:
{
"mcpServers": {
"twitter-mcp": {
"command": "npx",
"args": ["-y", "@mbelinky/x-mcp-server"],
"env": {
"AUTH_TYPE": "oauth2",
"OAUTH2_CLIENT_ID": "your_client_id",
"OAUTH2_CLIENT_SECRET": "your_client_secret",
"OAUTH2_ACCESS_TOKEN": "your_access_token",
"OAUTH2_REFRESH_TOKEN": "your_refresh_token"
}
}
}
}
从源代码安装:
git clone https://github.com/mbelinky/x-mcp-server.git
cd x-mcp-server/twitter-mcp
npm install
npm run build
然后更新配置指向本地安装:
{
"mcpServers": {
"twitter-mcp": {
"command": "node",
"args": ["/path/to/twitter-mcp/build/index.js"],
"env": {
// ... 您的凭证
}
}
}
}
重启Claude桌面
全局安装服务器并添加到Claude:
# 对于OAuth 1.0a
claude mcp add twitter-mcp "npx" "-y" "@mbelinky/x-mcp-server" --scope user \
--env "API_KEY=your_api_key" \
--env "API_SECRET_KEY=your_secret_key" \
--env "ACCESS_TOKEN=your_access_token" \
--env "ACCESS_TOKEN_SECRET=your_access_token_secret"
# 对于OAuth 2.0
claude mcp add twitter-mcp "npx" "-y" "@mbelinky/x-mcp-server" --scope user \
--env "AUTH_TYPE=oauth2" \
--env "OAUTH2_CLIENT_ID=your_client_id" \
--env "OAUTH2_CLIENT_SECRET=your_client_secret" \
--env "OAUTH2_ACCESS_TOKEN=your_access_token" \
--env "OAUTH2_REFRESH_TOKEN=your_refresh_token"
安装完成后,Claude可以使用以下工具:
post_tweet发布带有可选媒体附件和回复的新推文。
示例提示:
search_tweets搜索推文,自定义结果数量(10-100)。
示例提示:
delete_tweet通过其ID删除推文。
示例提示:
注意:由于Twitter API的临时问题,OAuth 1.0a使用v1.1回退进行删除。
使用Claude发布带有图片的推文时:
示例用法:
# ✅ 推荐用于Claude
"发布带有图片的推文,图片位于/Users/me/photos/sunset.png"
# ❌ 当前不支持在Claude中使用
"发布这张图片:[直接粘贴图片]"
# ✅ 可以在代码中使用
// 在代码中,您仍然可以使用base64
{
"text": "你好世界!",
"media": [{
"data": "iVBORw0KGgoAAAANS...",
"media_type": "image/png"
}]
}
该项目包含全面的测试:
# 运行所有测试
npm test
# 运行特定测试套件
npm test -- --testNamePattern="OAuth"
npm test -- --testPathPattern="unit"
git clone https://github.com/mbelinky/x-mcp-server.git
cd x-mcp-server/twitter-mcp
npm install
npm run build # 构建TypeScript
npm run dev # 在开发模式下运行
npm test # 运行测试
npm run lint # 代码检查
npm run format # 格式化代码
创建一个.env文件用于本地开发:
# OAuth 1.0a
API_KEY=your_api_key
API_SECRET_KEY=your_api_secret_key
ACCESS_TOKEN=your_access_token
ACCESS_TOKEN_SECRET=your_access_token_secret
# OAuth 2.0(如果使用)
AUTH_TYPE=oauth2
OAUTH2_CLIENT_ID=your_client_id
OAUTH2_CLIENT_SECRET=your_client_secret
OAUTH2_ACCESS_TOKEN=your_access_token
OAUTH2_REFRESH_TOKEN=your_refresh_token
# 可选
DEBUG=true # 启用调试日志
现在,媒体上传同时支持OAuth 1.0a和OAuth 2.0!
注意:OAuth 2.0需要media.write范围才能上传媒体。
Twitter的v2删除端点当前存在问题(返回500错误)。MCP服务器优雅地处理这个问题:
这是一个临时的Twitter API问题。一旦解决,两种认证方法都将使用v2删除。
“无法验证您”
“超出速率限制”
“媒体上传失败”
media.write范围。“403 Forbidden”
通过设置DEBUG环境变量启用详细的日志记录:
{
"env": {
"DEBUG": "true",
// ... 其他凭证
}
}
%APPDATA%\Claude\logs\mcp-server-twitter.log~/Library/Logs/Claude/mcp-server-twitter.log欢迎贡献!请:
此MCP服务器:
您的推文、搜索和媒体仅在您和Twitter/X之间保持私密。
对于安全漏洞,请直接发送邮件而不是创建公开问题。
MIT
这是对@enescinar/twitter-mcp的增强分叉,增加了:
原始实现由@enescinar提供。