X MCP Server
by DataWhisker
# X MCP Server
A Model Context Protocol (MCP) server for X (Twitter) integration that provides tools for reading your timeline and engaging with tweets. Designed for use with Claude desktop.
<a href="https://glama.ai/mcp/servers/5nx3qqiunw"><img width="380" height="200" src="https://glama.ai/mcp/servers/5nx3qqiunw/badge" alt="X Server MCP server" /></a>
## Features
- Get tweets from your home timeline
- Create new tweets
- Reply to tweets
- Built-in rate limit handling for the free API tier
- TypeScript implementation with full type safety
## Prerequisites
- Node.js (v16 or higher)
- X (Twitter) Developer Account (Free)
- Claude desktop app
## X API Access
X (Twitter) provides a free tier for basic API access:
### Free Tier Features
- **Post Limits:**
- 500 posts per month at user level
- 500 posts per month at app level
- **Read Limits:**
- 100 reads per month
- **Features:**
- Access to v2 post posting endpoints
- Media upload endpoints
- Access to Ads API
- Limited to 1 app ID
- Login with X functionality
- **Rate Limits:**
- Rate-limited access to all endpoints
- Limits reset periodically
Note: For higher volume needs, paid tiers are available:
- Basic tier ($100/month): 50,000 tweets/month, additional endpoints
- Pro tier ($5000/month): Higher limits and enterprise features
You can access the free tier at: https://developer.x.com/en/portal/products/free
## Installation
1. Clone the repository:
```bash
git clone [your-repo-url]
cd x-mcp-server
```
2. Install dependencies:
```bash
npm install
```
3. Build the server:
```bash
npm run build
```
## Configuration
You need to set up your X (Twitter) API credentials. Follow these detailed steps:
1. Go to the [Twitter Developer Portal](https://developer.twitter.com/en/portal/dashboard)
- Sign in with your X (Twitter) account
- If you don't have a developer account, you'll be prompted to create one
2. Access the Free Tier:
- Visit https://developer.x.com/en/portal/products/free
- Click "Subscribe" for the Free Access tier
- Complete the registration process
3. Create a new project:
- Click "Create Project" button
- Enter a project name (e.g., "MCP Integration")
- Select "Free" as your setup
- Choose your use case
- Click "Next"
4. Create a new app within your project:
- Click "Create App"
- Enter an app name
- Click "Complete Setup"
5. Configure app settings:
- In your app dashboard, click "App Settings"
- Under "User authentication settings":
- Click "Set Up"
- Enable OAuth 1.0a
- Select "Web App" or "Native App"
- Enter any URL for callback (e.g., https://example.com/callback)
- Enter any URL for website (e.g., https://example.com)
- Click "Save"
6. Set app permissions:
- In app settings, find "App permissions"
- Change to "Read and Write"
- Click "Save"
7. Generate API Keys and Tokens:
- Go to "Keys and Tokens" tab
- Under "Consumer Keys":
- Click "View Keys" or "Regenerate"
- Save your API Key and API Key Secret
- Under "Access Token and Secret":
- Click "Generate"
- Make sure to select tokens with "Read and Write" permissions
- Save your Access Token and Access Token Secret
Important:
- Keep your keys and tokens secure and never share them publicly
- You'll need all four values:
- API Key (also called Consumer Key)
- API Key Secret (also called Consumer Secret)
- Access Token
- Access Token Secret
- Remember the free tier limits:
- 500 posts per month at user level
- 500 posts per month at app level
- 100 reads per month
## Claude Desktop Configuration
To connect the X MCP server with Claude desktop, you need to configure it in the Claude settings. Follow these steps:
1. Open File Explorer
2. Navigate to the Claude config directory:
- Press Win + R
- Type `%APPDATA%/Claude` and press Enter
- If the Claude folder doesn't exist, create it
3. Create or edit `claude_desktop_config.json`:
- If the file doesn't exist, create a new file named `claude_desktop_config.json`
- If it exists, open it in a text editor (like Notepad)
4. Add the following configuration, replacing the placeholder values with your actual API credentials from the previous section:
```json
{
"mcpServers": {
"x": {
"command": "node",
"args": ["%USERPROFILE%/Projects/MCP Basket/x-server/build/index.js"],
"env": {
"TWITTER_API_KEY": "paste-your-api-key-here",
"TWITTER_API_SECRET": "paste-your-api-key-secret-here",
"TWITTER_ACCESS_TOKEN": "paste-your-access-token-here",
"TWITTER_ACCESS_SECRET": "paste-your-access-token-secret-here"
}
}
}
}
```
5. Save the file and restart Claude desktop
Note: Make sure to:
- Replace all four credential values with your actual API keys and tokens
- Keep the quotes ("") around each value
- Maintain the exact spacing and formatting shown above
- Save the file with the `.json` extension
## Available Tools
### get_home_timeline
Get the most recent tweets from your home timeline.
Parameters:
- `limit` (optional): Number of tweets to retrieve (default: 20, max: 100)
Example:
```typescript
await use_mcp_tool({
server_name: "x",
tool_name: "get_home_timeline",
arguments: { limit: 5 }
});
```
### create_tweet
Create a new tweet.
Parameters:
- `text` (required): The text content of the tweet (max 280 characters)
Example:
```typescript
await use_mcp_tool({
server_name: "x",
tool_name: "create_tweet",
arguments: { text: "Hello from MCP! 🤖" }
});
```
### reply_to_tweet
Reply to a tweet.
Parameters:
- `tweet_id` (required): The ID of the tweet to reply to
- `text` (required): The text content of the reply (max 280 characters)
Example:
```typescript
await use_mcp_tool({
server_name: "x",
tool_name: "reply_to_tweet",
arguments: {
tweet_id: "1234567890",
text: "Great tweet! 👍"
}
});
```
## Development
- `npm run build`: Build the TypeScript code
- `npm run dev`: Run TypeScript in watch mode
- `npm start`: Start the MCP server
## Rate Limiting
The server includes built-in rate limit handling for X's free tier:
- Monthly limits:
- 500 posts per month at user level
- 500 posts per month at app level
- 100 reads per month
- Features:
- Tracks monthly usage
- Provides exponential backoff for rate limit errors
- Clear error messages when limits are reached
- Automatic retry after rate limit window expires
## License
MIT
## Contributing
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request