Skip to main content
Glama
adityaidev

Twitter/X MCP Server

by adityaidev

Twitter/X MCP Server

TypeScript MCP License: ISC

A Model Context Protocol server that gives AI assistants full read/write access to Twitter/X through cookie-based authentication. No Developer account or OAuth app required.


Features

  • 12 tools covering timelines, search, profiles, trends, posting, likes, retweets, and replies

  • Cookie-based auth -- uses your browser session cookies, no Twitter API keys needed

  • Dual-engine architecture -- fast HTTP via undici for reads, headless Puppeteer with stealth plugin for writes

  • Anti-bot bypass -- puppeteer-extra-plugin-stealth avoids Twitter automation detection (error 226)

  • Auto CSRF refresh -- ct0 tokens refreshed transparently when Twitter rotates them

  • Clean JSON output -- nested GraphQL responses parsed into simple, structured objects

  • Type-safe -- strict TypeScript with Zod schema validation on every tool input

  • MCP standard -- works with Claude Desktop, Claude Code, and any MCP-compatible client


Prerequisites

  • Node.js >= 18.0.0

  • npm >= 8.0.0

  • A Twitter/X account with an active browser session


Installation

git clone https://github.com/aditya-ai-architect/twitter-mcp.git cd twitter-mcp npm install npm run build

Getting Your Twitter Cookies

  1. Open x.com and log in

  2. Open Developer Tools (F12)

  3. Go to Application > Cookies > https://x.com

  4. Copy these two values:

Cookie

Description

auth_token

Session authentication token

ct0

CSRF protection token

Both cookies must come from the same active session.


Configuration

Environment Variables

Variable

Required

Description

TWITTER_AUTH_TOKEN

Yes

The auth_token cookie value

TWITTER_CT0

Yes

The ct0 cookie value

Create a .env file in the project root:

TWITTER_AUTH_TOKEN=your_auth_token_here TWITTER_CT0=your_ct0_here

Claude Desktop

Add to your Claude Desktop config:

Windows: %APPDATA%\Claude\claude_desktop_config.json macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

{ "mcpServers": { "twitter": { "command": "node", "args": ["/absolute/path/to/twitter-mcp/build/index.js"], "env": { "TWITTER_AUTH_TOKEN": "your_auth_token_here", "TWITTER_CT0": "your_ct0_here" } } } }

Claude Code

claude mcp add twitter -- node /absolute/path/to/twitter-mcp/build/index.js

Tools

Read Operations

Tool

Description

get_home_timeline

Fetch tweets from the authenticated user's home timeline

get_user_profile

Get a user profile by username

get_user_tweets

Get recent tweets from a specific user

get_tweet

Get a single tweet by ID

search_tweets

Search tweets with full operator support

get_trends

Get current trending topics

Write Operations

Tool

Description

post_tweet

Post a new tweet

like_tweet

Like a tweet

unlike_tweet

Remove a like

retweet

Retweet a tweet

unretweet

Remove a retweet

reply_to_tweet

Reply to a specific tweet


Architecture

MCP Client (Claude) <--stdio--> twitter-mcp Server | +---------------+---------------+ | | undici HTTP Puppeteer + Stealth (Read ops) (Write ops) | | +---------------+---------------+ | x.com GraphQL API

Read operations use direct HTTP for speed. Write operations use a headless browser with stealth to bypass automation detection.


Development

npm run dev # Watch mode npm run build # Build once npm start # Run the server

Project Structure

twitter-mcp/ src/ index.ts # MCP server setup and tool registration twitter-client.ts # Twitter API client (HTTP + Puppeteer) types.ts # TypeScript interfaces build/ # Compiled output package.json tsconfig.json

Troubleshooting

Issue

Solution

HTTP 401/403

Cookies expired -- extract fresh ones from browser

HTTP 429

Rate limited -- wait a few minutes

Error 226

Stealth browser handles this; if persistent, post manually once then retry

Empty responses

Twitter may have rotated GraphQL query IDs


Tech Stack

  • Runtime: Node.js (ES2022)

  • Language: TypeScript 5.x (strict mode)

  • MCP SDK: @modelcontextprotocol/sdk

  • HTTP Client: undici

  • Browser: Puppeteer + puppeteer-extra-plugin-stealth

  • Validation: Zod


License

ISC


Built by

-
security - not tested
F
license - not found
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/adityaidev/twitter-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server