Are you the author? Sign in to claim
A comprehensive mcp server to post on x.com, with oauth v1 and v2, as well as v1.1 and v2 x API implementation
An enhanced Model Context Protocol (MCP) server for X that adds OAuth 2.0 support, v2 API media uploads, and comprehensive rate limiting to the original implementation.
This server intelligently uses different X API versions based on authentication method and operation:
upload.twitter.com)api.x.com/2/media/upload)Before you begin, you'll need:
This server supports two authentication methods. Choose based on your needs:
Create a Developer Account:
Create a New App:
Configure App Permissions:
http://localhost:3000/callbackhttp://localhost:3000/callbackGet Your Credentials:
Required Credentials:
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
Get Your Client Credentials:
Generate User Tokens:
Option A - Use our helper script:
# Clone this repository first
git clone https://github.com/mbelinky/x-mcp-server.git
cd x-mcp-server/twitter-mcp
npm install
# Run the OAuth2 setup script
node scripts/oauth2-setup.js
Option B - Manual setup:
tweet.read, tweet.write, users.read, media.write, offline.accessRequired Credentials:
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
Install via NPM (Recommended):
Edit your Claude Desktop configuration file:
%APPDATA%\Claude\claude_desktop_config.json~/Library/Application Support/Claude/claude_desktop_config.jsonAdd this configuration:
{
"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"
}
}
}
}
For 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"
}
}
}
}
Install from Source:
git clone https://github.com/mbelinky/x-mcp-server.git
cd x-mcp-server/twitter-mcp
npm install
npm run build
Then update your config to point to the local installation:
{
"mcpServers": {
"twitter-mcp": {
"command": "node",
"args": ["/path/to/twitter-mcp/build/index.js"],
"env": {
// ... your credentials
}
}
}
}
Restart Claude Desktop
Install the server globally and add it to Claude:
# For 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"
# For 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"
Once installed, Claude can use these tools:
post_tweetPost a new tweet with optional media attachments and replies.
Example prompts:
search_tweetsSearch for tweets with customizable result count (10-100).
Example prompts:
delete_tweetDelete a tweet by its ID.
Example prompts:
Note: Due to temporary Twitter API issues, OAuth 1.0a uses v1.1 fallback for deletion.
When using Claude to post tweets with images:
Example usage:
# ✅ Recommended for Claude
"Post tweet with image at /Users/me/photos/sunset.png"
# ❌ Not currently supported in Claude
"Post this image: [pasting an image directly]"
# ✅ Works programmatically
// In code, you can still use base64
{
"text": "Hello world!",
"media": [{
"data": "iVBORw0KGgoAAAANS...",
"media_type": "image/png"
}]
}
The project includes comprehensive tests:
# Run all tests
npm test
# Run specific test suites
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 # Build TypeScript
npm run dev # Run in development mode
npm test # Run tests
npm run lint # Lint code
npm run format # Format code
Create a .env file for local development:
# 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 (if using)
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
# Optional
DEBUG=true # Enable debug logging
Media uploads now work with both OAuth 1.0a and OAuth 2.0!
Note: OAuth 2.0 requires the media.write scope for media uploads.
Twitter's v2 delete endpoint is currently experiencing issues (returning 500 errors). The MCP server handles this gracefully:
This is a temporary Twitter API issue. Once resolved, both auth methods will use v2 deletion.
"Could not authenticate you"
"Rate limit exceeded"
"Media upload failed"
media.write scope is included"403 Forbidden"
Enable detailed logging by setting the DEBUG environment variable:
{
"env": {
"DEBUG": "true",
// ... other credentials
}
}
%APPDATA%\Claude\logs\mcp-server-twitter.log~/Library/Logs/Claude/mcp-server-twitter.logContributions are welcome! Please:
This MCP server:
Your tweets, searches, and media remain private between you and Twitter/X.
For security vulnerabilities, please email directly instead of creating a public issue.
MIT
This is an enhanced fork of @enescinar/twitter-mcp that adds:
Original implementation by @enescinar
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
Google's universal MCP server supporting PostgreSQL, MySQL, MongoDB, Redis, and 10+ databases
Official GitHub integration for repos, issues, PRs, and CI/CD workflows