# TwittrAPI (npm · twittrapi-mcp)

Read public Twitter/X data: tweets, profiles, followers, search. No X developer account.

- Trust score: 83/100 (high trust)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `mcp.twittrapi.com`: 36/100, [markdown](https://verifymcp.io/servers/twittrapi-twittrapi-mcp/mcp.md), [page](https://verifymcp.io/servers/twittrapi-twittrapi-mcp/mcp)
- npm · `twittrapi-mcp`: 83/100 (this document), [markdown](https://verifymcp.io/servers/twittrapi-twittrapi-mcp/twittrapi-mcp.md), [page](https://verifymcp.io/servers/twittrapi-twittrapi-mcp/twittrapi-mcp)

## Channel facts

- Registry: `npm`
- Package: `twittrapi-mcp`
- Version: `1.2.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 81/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known high-severity CVE affects zod 4.6.5, a direct dependency. A fixed version is available.
  - No install/post-install scripts declared.
  - 30 of 93 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to twittrapi/twittrapi-mcp).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 17 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 67/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 5674 tokens (~195/item across 29 items; 29 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 69/100
  - Stability check failed: the tool surface changed between 0.3.1 and 1.2.0: 1 tool removals, 0 breaking changes, 7 additions.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 29 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 30 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the TwittrAPI MCP server?

TwittrAPI runs locally as an npm package, launched with npx -y twittrapi-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add twittrapi-twittrapi-mcp -- npx -y twittrapi-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "twittrapi-twittrapi-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "twittrapi-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "twittrapi-twittrapi-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "twittrapi-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add twittrapi-twittrapi-mcp -- npx -y twittrapi-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "twittrapi-twittrapi-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "twittrapi-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add twittrapi-twittrapi-mcp --command npx --arg -y --arg twittrapi-mcp
```

### Hermes

```yaml
mcp_servers:
  twittrapi-twittrapi-mcp:
    command: "npx"
    args: ["-y", "twittrapi-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "twittrapi-twittrapi-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "twittrapi-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add twittrapi-twittrapi-mcp -t stdio -c npx -a -y twittrapi-mcp
```

### Other

```json
{
  "mcpServers": {
    "twittrapi-twittrapi-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "twittrapi-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 83, +1)

No change was recorded against any check on this day. Stability & Change Management went from 62 to 66.

### 2026-11-01 (score 82, +1)

No change was recorded against any check on this day. Stability & Change Management went from 52 to 56.

### 2026-10-31 (score 81, 0)

- [functional regression] Security disclosure: unverified → fail

### 2026-10-30 (score 81, +1)

No change was recorded against any check on this day. Stability & Change Management went from 46 to 49.

### 2026-10-29 (score 80, 0)

- [functional regression] Security disclosure: fail → unverified

### 2026-10-28 (score 80, +1)

No change was recorded against any check on this day. Stability & Change Management went from 39 to 42.

### 2026-10-26 (score 79, +1)

No change was recorded against any check on this day. Stability & Change Management went from 32 to 36.

### 2026-10-24 (score 78, −5)

- [security regression] CVE-2023-54404 affects this package: high
- [security regression] Known CVEs: pass → fail

## MCP tools (29)

### `get_user_by_username` (~182 tokens)

Get user by username

Get an X (Twitter) user's profile by handle: name, bio, follower/following counts, verification, created date, and the numeric user ID (rest_id) needed by other tools.

Input parameters:

- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.
- `username` (string, required): X handle without the URL, e.g. "elonmusk" (a leading @ is fine).

### `get_user_by_id` (~151 tokens)

Get user by ID

Get an X user's profile by numeric user ID (rest_id). Same data as get_user_by_username.

Input parameters:

- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.
- `userId` (string, required): Numeric X user ID (rest_id).

### `username_to_id` (~167 tokens)

Username to user ID

Resolve an X handle to its numeric user ID. Cheaper and smaller than get_user_by_username when you only need the ID.

Input parameters:

- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.
- `username` (string, required): X handle without the URL, e.g. "elonmusk" (a leading @ is fine).

### `users_by_ids` (~149 tokens)

Get users by IDs

Get profiles for up to 500 X users in one call, by numeric user ID.

Input parameters:

- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `ids` (array, required): Numeric X user IDs, 1 to 500.
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.

### `get_user_tweets` (~248 tokens)

Get user tweets

Get a user's recent tweets (their profile timeline, without replies), newest first, including retweets and pinned tweet. Paginated.

Input parameters:

- `count` (integer): How many tweets to request per page (default 20). X may return slightly more or fewer.
- `cursor` (string): Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page.
- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.
- `userId` (string): Numeric X user ID (rest_id). Provide this or username. Using the ID is faster.
- `username` (string): X handle, used when you do not have the user ID. Provide this or userId.

### `get_user_tweets_and_replies` (~241 tokens)

Get user tweets and replies

Get a user's tweets including their replies to others, newest first. Paginated.

Input parameters:

- `count` (integer): How many tweets to request per page (default 20). X may return slightly more or fewer.
- `cursor` (string): Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page.
- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.
- `userId` (string): Numeric X user ID (rest_id). Provide this or username. Using the ID is faster.
- `username` (string): X handle, used when you do not have the user ID. Provide this or userId.

### `get_user_media` (~234 tokens)

Get user media

Get a user's tweets that contain photos or videos. Paginated.

Input parameters:

- `count` (integer): How many tweets to request per page (default 20). X may return slightly more or fewer.
- `cursor` (string): Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page.
- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.
- `userId` (string): Numeric X user ID (rest_id). Provide this or username. Using the ID is faster.
- `username` (string): X handle, used when you do not have the user ID. Provide this or userId.

### `get_followers` (~235 tokens)

Get followers

Get accounts that follow a user, newest followers first. Paginated.

Input parameters:

- `count` (integer): How many users to request per page (default 20). X may return slightly more or fewer.
- `cursor` (string): Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page.
- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.
- `userId` (string): Numeric X user ID (rest_id). Provide this or username. Using the ID is faster.
- `username` (string): X handle, used when you do not have the user ID. Provide this or userId.

### `get_following` (~230 tokens)

Get following

Get accounts a user follows. Paginated.

Input parameters:

- `count` (integer): How many users to request per page (default 20). X may return slightly more or fewer.
- `cursor` (string): Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page.
- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.
- `userId` (string): Numeric X user ID (rest_id). Provide this or username. Using the ID is faster.
- `username` (string): X handle, used when you do not have the user ID. Provide this or userId.

### `get_verified_followers` (~239 tokens)

Get verified followers

Get a user's followers that have a verified (blue check) badge. Paginated.

Input parameters:

- `count` (integer): How many users to request per page (default 20). X may return slightly more or fewer.
- `cursor` (string): Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page.
- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.
- `userId` (string): Numeric X user ID (rest_id). Provide this or username. Using the ID is faster.
- `username` (string): X handle, used when you do not have the user ID. Provide this or userId.

### `get_user_affiliates` (~250 tokens)

Get affiliates

Get the accounts affiliated with an organization, as in the Affiliates tab of its profile. Empty for accounts without affiliates. Paginated.

Input parameters:

- `count` (integer): How many users to request per page (default 20). X may return slightly more or fewer.
- `cursor` (string): Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page.
- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.
- `userId` (string): Numeric X user ID (rest_id). Provide this or username. Using the ID is faster.
- `username` (string): X handle, used when you do not have the user ID. Provide this or userId.

### `get_friendships_batch` (~164 tokens)

Get relationships with many accounts

Check whether one account follows up to 50 others, and whether they follow it back, in one call. Returns raw JSON: one relationship per target, in order, plus errors for handles that could not be looked up.

Input parameters:

- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.
- `sourceUsername` (string, required): The account to compare with the others, e.g. "jack" (a leading @ is fine).
- `targetUsernames` (array, required): Accounts to check, 1 to 50 X handles (a leading @ is fine). Billed as one call per handle.

### `get_user_about_batch` (~144 tokens)

Get "About this account" for many users

Get the "About this account" data (country the account is based in, username changes, verification) of up to 20 accounts in one call. Returns raw JSON: one entry per handle, in order, plus errors for handles that could not be looked up.

Input parameters:

- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.
- `usernames` (array, required): Accounts to look up, 1 to 20 X handles (a leading @ is fine). Billed as one call per handle.

### `search_tweets` (~294 tokens)

Search tweets

Search X like the search box. Supports X search operators in the query, e.g. from:user, to:user, "exact phrase", lang:en, since:2025-01-01, until:2025-02-01, min_faves:100, filter:media, -filter:replies. category Latest gives newest first; People returns accounts instead of tweets. Paginated.

Input parameters:

- `category` (string): Result tab: Top (default), Latest, People, Photos or Videos.
- `count` (integer): How many results to request per page (default 20). X may return slightly more or fewer.
- `cursor` (string): Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page.
- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.
- `searchItem` (string, required): Search query, max 512 characters. May contain X search operators.

### `get_tweet` (~208 tokens)

Get tweet

Get a tweet by ID with full text, author, media, engagement counts and the reply thread (conversation). Use cursor to load more replies.

Input parameters:

- `cursor` (string): Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page.
- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.
- `rankingMode` (string): Sort order. Default Relevance.
- `tweetId` (string, required): Numeric tweet ID, the number at the end of a tweet URL.

### `get_tweet_retweets` (~195 tokens)

Get tweet retweeters

Get the users who retweeted a tweet. Paginated.

Input parameters:

- `count` (integer): How many users to request per page (default 20). X may return slightly more or fewer.
- `cursor` (string): Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page.
- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.
- `tweetId` (string, required): Numeric tweet ID.

### `get_tweet_quotes` (~193 tokens)

Get tweet quotes

Get tweets that quote a given tweet. Paginated.

Input parameters:

- `count` (integer): How many tweets to request per page (default 20). X may return slightly more or fewer.
- `cursor` (string): Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page.
- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.
- `tweetId` (string, required): Numeric tweet ID.

### `get_tweet_replies` (~208 tokens)

Get tweet replies

Get only the replies to a tweet, without the tweet itself or the tweets above it. Paginated.

Input parameters:

- `cursor` (string): Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page.
- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `includePromotedContent` (boolean): Include promoted replies (default false).
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.
- `rankingMode` (string): Sort order. Default Relevance.
- `tweetId` (string, required): Numeric tweet ID.

### `get_tweet_thread` (~159 tokens)

Get tweet thread

Get the author's own thread around a tweet in reading order: their tweets above it and their replies to themselves below it, up to the first reply by someone else.

Input parameters:

- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.
- `tweetId` (string, required): Numeric tweet ID.

### `get_list_details` (~147 tokens)

Get list details

Get an X list's name, description, owner, and member/follower counts.

Input parameters:

- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `listId` (string, required): Numeric list ID, from the list URL.
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.

### `get_list_tweets` (~202 tokens)

Get list tweets

Get the tweet timeline of an X list (tweets from its members), newest first. Paginated.

Input parameters:

- `count` (integer): How many tweets to request per page (default 20). X may return slightly more or fewer.
- `cursor` (string): Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page.
- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `listId` (string, required): Numeric list ID.
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.

### `get_list_members` (~195 tokens)

Get list members

Get the accounts that are members of an X list. Paginated.

Input parameters:

- `count` (integer): How many users to request per page (default 20). X may return slightly more or fewer.
- `cursor` (string): Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page.
- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `listId` (string, required): Numeric list ID.
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.

### `get_community` (~141 tokens)

Get community

Get an X Community's name, description, rules, member count and admins.

Input parameters:

- `communityId` (string, required): Numeric community ID.
- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.

### `get_community_about` (~95 tokens)

Get community about page

Get the About page of an X Community: description, rules, creation date, moderators and a preview of members. Returns raw JSON.

Input parameters:

- `communityId` (string, required): Numeric community ID.
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.

### `get_community_tweets` (~194 tokens)

Get community tweets

Get tweets posted in an X Community. Paginated.

Input parameters:

- `communityId` (string, required): Numeric community ID.
- `count` (integer): How many tweets to request per page (default 20). X may return slightly more or fewer.
- `cursor` (string): Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page.
- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.

### `search_communities` (~206 tokens)

Search communities

Search X Communities by keyword. Returns community IDs for get_community and get_community_tweets. Paginated.

Input parameters:

- `count` (integer): How many communities to request per page (default 20). X may return slightly more or fewer.
- `cursor` (string): Pagination cursor. Leave empty for the first page; pass the next_cursor from a previous result to get the next page.
- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.
- `searchTerm` (string, required): Keyword to search for.

### `get_trends` (~182 tokens)

Get trends

Get trending topics for a location by WOEID (1 = worldwide, 23424977 = United States, 23424975 = United Kingdom). Use get_trend_locations to look up other WOEIDs.

Input parameters:

- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `locationId` (string, required): Yahoo WOEID of the location, e.g. "1" for worldwide.
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.

### `get_trend_locations` (~137 tokens)

Get trend locations

List the locations (countries and cities) that have trends, with their WOEIDs for get_trends.

Input parameters:

- `format` (string): Response format (default simple). simple: compact JSON with flat camelCase tweets and users, about 60% fewer tokens. raw: X's full GraphQL JSON, only needed for fields simple leaves out (cards, polls…
- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.

### `get_space` (~113 tokens)

Get Space

Get an X Space by ID: title, state, host and participants, and whether a replay is available. Returns raw JSON.

Input parameters:

- `max_chars` (integer): Maximum characters of JSON to return (default 50000). Longer output is cut with a [TRUNCATED] marker. Lower it to save context, raise it if you need the full response.
- `spaceId` (string, required): Space ID, the letters and digits at the end of the Space URL (x.com/i/spaces/<spaceId>).

## Diagnostics

Captured diagnostic sections: Provenance, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/twittrapi-twittrapi-mcp/twittrapi-mcp#diagnostics

## Score history

- 2026-11-05: 83
- 2026-11-04: 83
- 2026-11-03: 82
- 2026-11-02: 82
- 2026-11-01: 82
- 2026-10-31: 81
- 2026-10-30: 81
- 2026-10-29: 80
- 2026-10-28: 80
- 2026-10-27: 79
- 2026-10-26: 79
- 2026-10-25: 78
- 2026-10-24: 78
- 2026-10-23: 83
- 2026-10-22: 82
- 2026-10-21: 82
- 2026-10-20: 81
- 2026-10-19: 81
- 2026-10-18: 79
- 2026-10-17: 79
- 2026-10-16: 79
- 2026-10-15: 79
- 2026-10-14: 79
- 2026-10-13: 38
- 2026-10-12: 38

## Common questions

### What is the TwittrAPI MCP server?

TwittrAPI is an MCP server listed in the public MCP registry as io.github.twittrapi/twittrapi-mcp. Read public Twitter/X data: tweets, profiles, followers, search. No X developer account. This page covers its npm package (twittrapi-mcp).

### Is the TwittrAPI MCP server safe to use?

TwittrAPI scores 83 out of 100 on VerifyMCP. We recorded 1 known advisory against it as of 5 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the TwittrAPI MCP server expose?

TwittrAPI exposes 29 tools: get_user_by_username, get_user_by_id, username_to_id, users_by_ids, get_user_tweets, and 24 more. Their descriptions and schemas cost roughly 5,503 tokens of context every time the server is loaded.

### Is the TwittrAPI MCP server still maintained?

TwittrAPI is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the TwittrAPI MCP server under?

TwittrAPI declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/twittrapi-mcp
- Socket report: https://socket.dev/npm/package/twittrapi-mcp
- Repository: https://github.com/twittrapi/twittrapi-mcp
- Website: https://www.twittrapi.com/docs/hosted-mcp
- Changelog RSS feed: https://verifymcp.io/servers/twittrapi-twittrapi-mcp/twittrapi-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/twittrapi-twittrapi-mcp/twittrapi-mcp.json
- HTML version of this page: https://verifymcp.io/servers/twittrapi-twittrapi-mcp/twittrapi-mcp
