
Twitter MCP Server
Model Context Protocol server that enables programmatic interaction with Twitter API, allowing users to post tweets, search for content, and retrieve user timelines through standardized MCP tools.
README
Twitter MCP Server
A Model Context Protocol (MCP) server for Twitter API with posting, searching, and timeline features.
Features
- Post Tweets: Post new tweets with optional reply functionality
- Search Tweets: Search for tweets using query strings
- Get Timelines: Retrieve user timelines
- Rate Limiting: Basic rate limiting for Twitter API calls
- TypeScript: Full TypeScript support with strict type checking
- Testing: Comprehensive test suite with Jest
Prerequisites
- Node.js 18+
- Twitter API credentials (API Key, API Secret, Access Token, Access Token Secret, Bearer Token)
Installation
- Clone the repository:
git clone https://github.com/aali-1/twitter-mcp-server.git
cd twitter-mcp-server
- Install dependencies:
npm install
- Set up environment variables:
cp env.example .env
Edit .env
with your Twitter API credentials:
TWITTER_API_KEY=your_twitter_api_key
TWITTER_API_SECRET=your_twitter_api_secret
TWITTER_ACCESS_TOKEN=your_twitter_access_token
TWITTER_ACCESS_TOKEN_SECRET=your_twitter_access_token_secret
TWITTER_BEARER_TOKEN=your_twitter_bearer_token
Usage
Build and Run
# Build the project
npm run build
# Run the MCP server
npm start
Development
# Run in development mode
npm run dev
# Run tests
npm test
# Lint code
npm run lint
# Format code
npm run format
MCP Tools
The server provides the following MCP tools:
post_tweet
Post a new tweet with optional reply functionality.
Parameters:
text
(string, required): The text content of the tweetreply_to_tweet_id
(string, optional): Tweet ID to reply to
Example:
{
"name": "post_tweet",
"arguments": {
"text": "Hello, world!",
"reply_to_tweet_id": "1234567890123456789"
}
}
search_tweets (Requires Basic/Pro plan)
Search for tweets using a query string.
Parameters:
query
(string, required): Search query for tweetsmax_results
(number, optional): Maximum number of results (default: 10)
Example:
{
"name": "search_tweets",
"arguments": {
"query": "AI",
"max_results": 5
}
}
get_timeline
Get tweets from a user's timeline.
Parameters:
username
(string, required): Username to get timeline formax_results
(number, optional): Maximum number of results (default: 10)
Example:
{
"name": "get_timeline",
"arguments": {
"username": "elonmusk",
"max_results": 5
}
}
get_rate_limit_info
Get current rate limit information.
Parameters: None
Example:
{
"name": "get_rate_limit_info",
"arguments": {}
}
Configuration
Environment Variables
Variable | Description | Default |
---|---|---|
TWITTER_API_KEY |
Twitter API Key | Required |
TWITTER_API_SECRET |
Twitter API Secret | Required |
TWITTER_ACCESS_TOKEN |
Twitter Access Token | Required |
TWITTER_ACCESS_TOKEN_SECRET |
Twitter Access Token Secret | Required |
TWITTER_BEARER_TOKEN |
Twitter Bearer Token | Required |
NODE_ENV |
Environment | production |
LOG_LEVEL |
Log level | info |
RATE_LIMIT_WINDOW_MS |
Rate limit window | 900000 (15 min) |
RATE_LIMIT_MAX_REQUESTS |
Max requests per window | 300 |
Rate Limiting
The server implements basic rate limiting:
- Respects Twitter's API rate limits
- Provides rate limit information via
get_rate_limit_info
tool - Graceful error handling for rate limit exceeded scenarios
Project Structure
src/
├── config.ts # Configuration management
├── logger.ts # Logging utilities
├── server.ts # MCP server implementation
├── twitter.ts # Twitter API service
├── types.ts # TypeScript type definitions
├── index.ts # Main entry point
└── test/ # Test files
├── basic.test.ts
└── twitter.test.ts
Testing
The project includes comprehensive tests:
# Run all tests
npm test
# Run tests with coverage
npm test -- --coverage
Tests cover:
- Twitter service functionality
- Rate limiting
- Error handling
- Tool parameter validation
Development
Available Scripts
npm run dev # Start in development mode
npm run build # Build TypeScript
npm run start # Start production server
npm run test # Run tests
npm run lint # Run ESLint
npm run format # Format code with Prettier
Code Quality
- TypeScript: Strict type checking
- ESLint: Code linting with TypeScript rules
- Prettier: Code formatting
- Jest: Testing framework
Error Handling
The server includes comprehensive error handling:
- Twitter API errors (rate limits, authentication, etc.)
- Network errors
- Validation errors
- Graceful shutdown handling
Security
- Environment variable validation
- Input validation
- Error handling without information leakage
- Secure credential management
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests
- Submit a pull request
License
MIT License
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.