English | ไธญๆ
An MCP server to create, manage and publish X/Twitter posts directly through Claude code and Gemini CLI chat.
Note: This project is modified from vidhupv/x-mcp, with added reply functionality for tweets.
- โ OAuth 1.0a: For write operations (posting tweets, retweeting, etc.)
- โ OAuth 2.0: For read operations (getting tweets, searching, etc.)
- โ Automatic Client Selection: System automatically chooses the best authentication method
- โ Smart Fallback: Automatically falls back to OAuth 1.0a when OAuth 2.0 is unavailable
- โ Create draft tweets
- โ Create draft tweet threads
- โ Create draft replies to existing tweets
- โ List all drafts
- โ Publish drafts (tweets, threads, and replies)
- โ Reply to tweets directly (without creating drafts)
- โ Retweet existing tweets
- โ Quote tweet with comments
- โ Create draft quote tweets
- โ Delete drafts
- โ Auto-delete failed drafts (configurable)
- โ Draft preservation on publish failure (configurable)
- โ Schedule single tweets - Publish tweets at specific times
- โ Schedule tweet threads - Publish complete threads at specific times
- โ Recurring tweets - Publish tweets at regular intervals
- โ Flexible time formats - Support absolute time (2024-01-15T14:30:00) and relative time (+10m, +2h, +1d)
- โ Background scheduler - Automatic execution without manual intervention
- โ Schedule management - View, cancel, and manage all scheduled tweets
- โ Smart intervals - Perfect for regular content publishing and campaigns
- โ Upload media files (images, videos, GIFs)
- โ Create tweets with media attachments
- โ Add alt text for accessibility
- โ Get media file information
- โ Get tweet content and information (with dual authentication support)
- โ Search recent tweets (improved error handling)
- โ Batch retrieve multiple tweets (more stable connections)
- โ Detailed error diagnostics and suggestions
- โ API connection testing tools
Before starting the installation, please ensure your system meets the following requirements:
- Python 3.8+ - Project runtime environment
- Node.js 16+ - For installing Gemini CLI (if using Gemini)
- UV - Python package manager (recommended) or pip
- Git - For cloning the project
macOS Users:
# Install Homebrew (if you don't have it)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install required software
brew install python node git uvWindows Users:
# Using Chocolatey (recommended)
choco install python nodejs git
# Then install UV
pip install uvLinux Users:
# Ubuntu/Debian
sudo apt update
sudo apt install python3 python3-pip nodejs npm git
pip3 install uv
# CentOS/RHEL
sudo yum install python3 python3-pip nodejs npm git
pip3 install uvTo install X(Twitter) MCP Server for Claude code automatically via Smithery:
npx -y @smithery/cli install x-mcp --client claudeClone project and set up environment:
# Clone the repository
git clone https://github.com/yourusername/x-mcp.git
cd x-mcp
# Install UV (Python package manager)
# macOS users (recommended):
brew install uv
# Or use pip:
pip install uvInstall dependencies (choose one method):
Method 1: Automatic environment creation and installation (Recommended)
# One step: create virtual environment and install dependencies
uv sync
# Activate virtual environment (if manual operation needed)
# macOS/Linux:
source .venv/bin/activate
# Windows:
# .venv\Scripts\activateMethod 2: Manual environment creation and installation
# Manually create virtual environment
uv venv
# Activate virtual environment
# macOS/Linux:
source .venv/bin/activate
# Windows:
# .venv\Scripts\activate
# Install dependencies from pyproject.toml
uv pip sync pyproject.tomlCreate claude_desktop_config.json:
- For MacOS: Open directory
~/Library/Application Support/Claude/and create the file inside it - For Windows: Open directory
%APPDATA%/Claude/and create the file inside it
Add this configuration to claude_desktop_config.json:
{
"mcpServers": {
"x_mcp": {
"command": "uv",
"args": [
"--directory",
"/path/to/x-mcp",
"run",
"x-mcp"
],
"env": {
"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"
}
}
}
}{
"mcpServers": {
"x_mcp": {
"command": "uv",
"args": [
"--directory",
"/path/to/x-mcp",
"run",
"x-mcp"
],
"env": {
"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"
}
}
}
}๐ก Recommended to use dual authentication configuration: Adding
TWITTER_BEARER_TOKENcan significantly improve the stability and success rate of tweet retrieval functions.
-
Visit X API Developer Portal:
- Go to X API Developer Portal
- Create a developer account (if you don't have one)
-
Create Project and App:
- Create a new project
- Create an app within the project
-
Configure App Permissions:
- In User Authentication Settings: Set to Read and Write permissions
- App type: Select Web App
- Callback URL: Set to
http://localhost/ - Website URL: Set to
http://example.com/
-
Generate API Keys and Tokens:
- From the "Keys and Tokens" section, generate:
- API Key (Consumer Key)
- API Secret (Consumer Secret)
- Access Token
- Access Token Secret
- Bearer Token (recommended for dual authentication)
- From the "Keys and Tokens" section, generate:
Update the config file:
- Replace
/path/to/x-mcpwith your actual project path (e.g.,/Users/yourname/x-mcp) - Replace all
your_*placeholders with your actual API credentials
Quit Claude completely and reopen it
Test the connection in Claude:
test api connection
If everything is configured correctly, you should see successful connection test results.
If you want to use this MCP server with Gemini CLI instead of Claude code:
Clone project and set up environment:
# Clone the repository
git clone https://github.com/yourusername/x-mcp.git
cd x-mcp
# Install UV (Python package manager)
# macOS users:
brew install uv
# Or use pip:
pip install uvInstall dependencies (choose one method):
Method 1: Automatic environment creation and installation (Recommended)
# One step: create virtual environment and install dependencies
uv sync
# Activate virtual environment (if manual operation needed)
# macOS/Linux:
source .venv/bin/activate
# Windows:
# .venv\Scripts\activateMethod 2: Manual environment creation and installation
# Manually create virtual environment
uv venv
# Activate virtual environment
# macOS/Linux:
source .venv/bin/activate
# Windows:
# .venv\Scripts\activate
# Install dependencies from pyproject.toml
uv pip sync pyproject.tomlInstall Gemini CLI:
npm install -g @google/gemini-cliCreate or update your MCP configuration file:
# Create configuration directory (if it doesn't exist)
mkdir -p ~/.gemini
# Create configuration file
touch ~/.gemini/settings.jsonEdit configuration file ~/.gemini/settings.json:
{
"mcpServers": {
"x_mcp": {
"command": "uv",
"args": [
"--directory",
"/path/to/x-mcp",
"run",
"x-mcp"
],
"env": {
"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"
}
}
}
}{
"mcpServers": {
"x_mcp": {
"command": "uv",
"args": [
"--directory",
"/path/to/x-mcp",
"run",
"x-mcp"
],
"env": {
"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"
}
}
}
}-
Visit X API Developer Portal:
- Go to X API Developer Portal
- Create a developer account (if you don't have one)
-
Create Project and App:
- Create a new project
- Create an app within the project
-
Configure App Permissions:
- In User Authentication Settings: Set to Read and Write permissions
- App type: Select Web App
- Callback URL: Set to
http://localhost/ - Website URL: Set to
http://example.com/
-
Generate API Keys and Tokens:
- From the "Keys and Tokens" section, generate:
- API Key (Consumer Key)
- API Secret (Consumer Secret)
- Access Token
- Access Token Secret
- Bearer Token (recommended for dual authentication)
- From the "Keys and Tokens" section, generate:
Update the config file:
- Replace
/path/to/x-mcpwith your actual project path (e.g.,/Users/yourname/x-mcp) - Replace all
your_*placeholders with your actual API credentials
Start Gemini CLI:
# Start Gemini CLI with MCP support
gemini-cli
# Or if you need to specify config file path:
gemini-cli --config ~/.gemini/settings.jsonTest the connection in Gemini CLI:
test api connection
If everything is configured correctly, you should see successful connection test results.
When tweet publishing fails, you can choose whether to automatically delete drafts:
- Enable auto-delete (default): Automatically delete drafts when publishing fails to avoid accumulating invalid drafts
- Disable auto-delete: Preserve drafts when publishing fails, allowing manual retry or modification
- Via Environment Variable: Add
"AUTO_DELETE_FAILED_DRAFTS": "true"or"false"in your configuration file - Via Commands: Use "Enable auto-delete failed drafts" or "Disable auto-delete failed drafts"
- Check Status: Use "Check current auto-delete configuration"
Works with both Claude code and Gemini CLI:
- "Tweet 'Just learned how to tweet through AI - mind blown! ๐คโจ'"
- "Create a thread about the history of pizza"
- "Show me my draft tweets"
- "Publish this draft!"
- "Delete that draft"
- "Reply to tweet 1234567890 with 'Great point! Thanks for sharing.'"
- "Create a draft reply to tweet 1234567890 saying 'I completely agree with this perspective.'"
- "Retweet tweet 1234567890"
- "Quote tweet 1234567890 with comment 'This is exactly what I was thinking!'"
- "Create a draft quote tweet for 1234567890 with comment 'Amazing insight here'"
- "Upload image /path/to/image.jpg with alt text 'Beautiful sunset over the mountains'"
- "Create tweet with media 'Check out this amazing photo!' using media IDs 123456789"
- "Create draft tweet with media 'My latest project' and attach /path/to/video.mp4"
- "Schedule a tweet 'Good morning everyone! โ๏ธ' for tomorrow at 9 AM"
- "Create a scheduled thread about productivity tips for next Monday at 2 PM"
- "Set up recurring tweets every 10 minutes starting in 5 minutes: ['Tip 1: Stay hydrated', 'Tip 2: Take breaks', 'Tip 3: Exercise regularly']"
- "Schedule tweet 'Weekend vibes! ๐' for +2h"
- "Create recurring tweets every 30 minutes for the next 3 hours with motivational quotes"
- "List all my scheduled tweets"
- "Cancel scheduled tweet scheduled_tweet_1234567890.json"
- "Start the tweet scheduler"
- "Stop the tweet scheduler"
- "Enable auto-delete failed drafts"
- "Disable auto-delete failed drafts"
- "Check current auto-delete configuration"
- "Get tweet 1234567890 content and information"
- "Search for tweets containing 'AI OR artificial intelligence' from the last 7 days"
- "Get information for tweets 123456789, 987654321, 555666777"
UV not found or installation failed:
# Check if UV is properly installed
which uv
uv --version
# If not found, reinstall
pip uninstall uv
brew install uv # macOS
# or
pip install uv # other systemsVirtual environment issues:
# Delete existing virtual environment
rm -rf .venv
# Recreate (choose one method):
# Method 1: Automatic creation and installation (recommended)
uv sync
# Method 2: Manual creation and installation
uv venv
source .venv/bin/activate # macOS/Linux or .venv\Scripts\activate (Windows)
uv pip sync pyproject.tomlPython version incompatibility:
# Check Python version (requires 3.8+)
python --version
python3 --version
# If version is too old, upgrade Python
brew install python@3.11 # macOS
# or use your system package manager to upgradeIf not working:
- Make sure UV is installed globally (if not, uninstall with
pip uninstall uvand reinstall withbrew install uv) - Or find UV path with
which uvand replace"command": "uv"with the full path - Verify all X/Twitter credentials are correct
- Check if the x-mcp path in config matches your actual repository location
Quick Diagnosis:
test api connection
Running this command in Claude will:
- Test OAuth 1.0a and OAuth 2.0 connections
- Check API permissions and limitations
- Provide detailed diagnostic information and suggestions
Run Test Script:
cd /path/to/x-mcp
python test_tweet_functions.pyProblem Symptoms:
- Getting "401 Unauthorized" error when posting tweets
- Can post tweets but cannot retrieve tweets
Solutions:
-
Add Bearer Token (Recommended):
"env": { "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" }
-
Regenerate API Credentials:
- Visit Twitter Developer Portal
- Regenerate all API keys and tokens
- Ensure permissions are set to "Read and write"
-
Check Project Settings:
- User authentication settings: Read and write permissions
- App type: Web App
- Callback URL:
http://localhost/ - Website URL:
http://example.com/
Dual Authentication Benefits:
- OAuth 2.0 for read operations (more stable)
- OAuth 1.0a for write operations (required)
- Automatic fallback handling
Common Errors and Solutions:
| Error Code | Cause | Solution |
|---|---|---|
| 401 | Authentication failed | Check API credentials, regenerate tokens |
| 403 | Insufficient permissions | Upgrade API plan or check permission settings |
| 404 | Tweet not found | Verify tweet ID, check if tweet is public |
| 429 | Rate limit exceeded | Wait 15 minutes or upgrade API plan |
API Plan Limitations:
- Free Users: Basic functionality with limitations
- Basic ($100/month): Full read functionality
- Pro ($5000/month): Advanced features and higher limits
-
Check Authentication Status:
test api connection -
Verify Configuration:
- Confirm all environment variables are set
- Check paths are correct
- Validate API key formats
-
Test Specific Functions:
search for tweets containing "hello" get tweet 1234567890 content -
Review Detailed Logs:
- Check Claude Desktop console
- Review MCP server logs
- Note specific error messages
This project is based on the excellent work by Vidhu Panhavoor Vasudevan in the original x-mcp repository.
- ๐ Scheduled Tweets System - Schedule single tweets, threads, and recurring tweets with flexible timing
- ๐ OAuth Dual Authentication System - Support for OAuth 1.0a + OAuth 2.0, automatic selection of best authentication method
- ๐ 401 Error Fix - Resolved authentication issues when retrieving tweets
- ๐ Smart Client Selection - Read operations prefer OAuth 2.0, write operations use OAuth 1.0a
- ๐ Enhanced Error Handling - Detailed error diagnostics and English error messages
- ๐ API Connection Testing Tool - Built-in connection testing and diagnostic functionality
- โ Reply to tweets functionality - Create draft replies and reply directly to existing tweets
- โ Retweet functionality - Simple retweets and quote tweets with comments
- โ Media functionality - Upload images, videos, GIFs with alt text support
- โ Tweet retrieval functionality - Get tweet content, search tweets, batch retrieve multiple tweets
- โ Enhanced draft management - Improved draft preservation on publish failure, support for all draft types
Special thanks to the original author for creating the foundation of this MCP server!
For more detailed functionality descriptions and usage guides, please refer to:
- Scheduled Tweets Functionality - ๐ Complete guide to scheduled tweets feature
- ๅฎๆถๅๆจๆๅ่ฝ่ฏดๆ - ๐ Chinese version of scheduled tweets guide
- OAuth Dual Authentication Setup Guide - ๐ Detailed dual authentication setup guide
- OAuthๅ้่ฎค่ฏ้ ็ฝฎๆๅ - Chinese version of the setup guide
- ๆจๆ่ทๅๅ่ฝๆ ้ๆ้คๆๅ - Chinese troubleshooting guide
- REPLY_FUNCTIONALITY.md - Detailed reply functionality documentation