twitterapi.mcp
by pedrot95dev
README.md
# twitterapi.mcp
[](https://www.npmjs.com/package/@pedrot95dev/twitterapi.mcp)
MCP server that exposes [twitterapi.io](https://twitterapi.io) endpoints as tools for AI agents and MCP hosts. Written in TypeScript, distributed on npm, runnable with a single `npx` command.
## Current Tools
| Tool | Description | API Endpoint | Auth |
|------|-------------|--------------|------|
| [`get_user_mentions`](#tool-get_user_mentions) | Fetch tweets mentioning a user. | `GET /twitter/user/mentions` | API key |
| [`get_tweet_thread_context`](#tool-get_tweet_thread_context) | Fetch a page of the conversation thread around a tweet. | `GET /twitter/tweet/thread_context` | API key |
| [`create_tweet`](#tool-create_tweet) | Create a tweet or reply. | `POST /twitter/create_tweet_v2` | API key + cookies + proxy |
| [`delete_tweet`](#tool-delete_tweet) | Delete one of your tweets. | `POST /twitter/delete_tweet_v2` | API key + cookies + proxy |
## Quick Start
### 1. Get an API key
Visit https://twitterapi.io/dashboard and obtain your `x-api-key`.
### 2. Cookies + proxy for write actions
`create_tweet` and `delete_tweet` authenticate with your account's own session
cookies. From a browser logged into X, open DevTools → Application → Cookies →
`https://x.com` and copy the `auth_token` and `ct0` values.
| Variable | Required | Description |
|----------|----------|-------------|
| `TWITTERAPI_IO_KEY` | always | twitterapi.io API key |
| `TWITTERAPI_IO_AUTH_TOKEN` | writes | `auth_token` cookie from a logged-in X session |
| `TWITTERAPI_IO_CT0` | writes | `ct0` cookie from the same session |
| `TWITTERAPI_IO_PROXY` | writes | Residential proxy, `http://user:pass@ip:port` (required by the write endpoints) |
The server derives the `login_cookies` value twitterapi.io expects from
`auth_token` + `ct0`. These cookies expire over time (typically weeks); when a
write starts returning an auth error, refresh them from the browser.
**The API key alone is enough for the read tools.** Add the cookie/proxy vars
only if you need write actions.
### 3. Add to your MCP host
**Claude Desktop** (`%APPDATA%\Claude\claude_desktop_config.json` on Windows,
`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
```json
{
"mcpServers": {
"twitterapi": {
"command": "npx",
"args": ["-y", "@pedrot95dev/twitterapi.mcp"],
"env": {
"TWITTERAPI_IO_KEY": "your_key_here",
"TWITTERAPI_IO_AUTH_TOKEN": "your_auth_token_cookie",
"TWITTERAPI_IO_CT0": "your_ct0_cookie",
"TWITTERAPI_IO_PROXY": "http://user:pass@ip:port"
}
}
}
}
```
`npx -y @pedrot95dev/twitterapi.mcp` downloads and runs the latest published version. Only
Node.js (>= 18) is required — no global install needed.
**Other MCP hosts (e.g. Cursor):** add the same `npx` command + env vars in the
host's MCP settings UI or config file.
## Tool: get_user_mentions
Fetch tweets that mention or reply to a user. Makes a single request per call;
page by passing `cursor` from a previous response's `next_cursor`.
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `user_name` | string | (required) | X username, with or without `@` |
| `since_time` | string | — | Start time filter (e.g. `2025-06-01` or ISO datetime) |
| `until_time` | string | — | End time filter |
| `cursor` | string | — | Pagination cursor from a previous `next_cursor` |
| `query_type` | `"Latest"` \| `"Relevance"` | `"Latest"` | Sort mode |
| `limit` | integer | `50` | Max tweets to return from this single request |
```json
{
"tweets": [ ... ],
"count": 12,
"has_next_page": true,
"next_cursor": "DAADDAAB...",
"status": "success",
"msg": null
}
```
## Tool: get_tweet_thread_context
Fetch the conversation thread around a tweet. Returns the original tweet, the
intermediate replies up the chain, the tweet itself, and its direct replies.
Each returned tweet includes `entities.urls` with expanded links — useful for
scanning a mention's surrounding conversation for URLs.
Makes exactly one request per call (1-to-1 with the endpoint — no internal
pagination). Page through longer threads with `cursor`.
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `tweet_id` | string | (required) | The tweet ID to get the thread context for |
| `cursor` | string | — | Pagination cursor from a previous `next_cursor` |
```json
{
"tweets": [ ... ],
"count": 6,
"has_next_page": false,
"next_cursor": "",
"status": "success",
"msg": "success"
}
```
Note: this endpoint paginates unevenly — a page may return few or zero tweets
while `has_next_page` is still `true`. Follow `next_cursor` until
`has_next_page` is `false` to collect the whole thread.
## Tool: create_tweet
Post a new tweet or reply. Supports quotes, media, communities, and scheduling.
Requires the cookie + proxy env vars (see [step 2](#2-cookies--proxy-for-write-actions)).
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `tweet_text` | string | (required) | The text content of the tweet |
| `reply_to_tweet_id` | string | — | Tweet ID to reply to (makes this a reply) |
| `quote_tweet_id` | string | — | Tweet ID to quote |
| `attachment_url` | string | — | URL for quote (alternative to `quote_tweet_id`) |
| `community_id` | string | — | Post inside a specific community |
| `is_note_tweet` | boolean | `false` | Allow >280 chars (Premium accounts) |
| `media_ids` | string[] | — | Media IDs from a prior `/twitter/upload_media_v2` |
| `schedule_for` | string | — | ISO-8601 future time, e.g. `2026-01-20T10:00:00.000Z` |
```json
{ "tweet_id": "1234567890123456789", "status": "success", "msg": "success" }
```
## Tool: delete_tweet
Delete one of your tweets by ID. Requires the cookie + proxy env vars.
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `tweet_id` | string | (required) | The ID of the tweet to delete |
```json
{ "status": "success", "msg": "success" }
```
## Contributing
Local development, build, and testing instructions are in [CONTRIBUTING.md](CONTRIBUTING.md).
## License
MIT — see [LICENSE](LICENSE).
## Credits
Based on the official twitterapi-io agent skill: https://github.com/kaitoInfra/twitterapi-io
API service: https://twitterapi.io
TDQS
A3.9/5.0
Scored across 4 tools
Disambiguation5/5
Each tool targets a distinct action: fetching mentions, retrieving thread context, creating tweets, and deleting tweets. No overlap in purpose.
Naming Consistency5/5
All tool names follow a consistent verb_noun pattern using snake_case (e.g., get_user_mentions, create_tweet), making them predictable.
Tool Count4/5
4 tools is slightly minimal for a Twitter API server but reasonable for a focused subset. Each tool serves a clear purpose without redundancy.
Completeness3/5
The tool set covers core CRUD for tweets (create, delete) and some read operations (mentions, thread context), but lacks common features like timeline retrieval, search, or interactions (like, retweet).
Maintenance
ActivityInactive
ResponsivenessNo issues