> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to the Twitter MCP server

The Twitter MCP connector routes your AI agent's tool calls to Twitter's own MCP server through Scalekit. Each user signs in to Twitter once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 100 tools.

**Authentication:** OAuth 2.0 + PKCE
**Categories:** Communication, Marketing
**Tools:** 100: 59 read, 27 write, 14 destructive
**Users sign in with:** OAuth
**OAuth app:** Your own Twitter MCP server app
**Built by:** Vendor MCP
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=TWITTERMCP)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Twitter MCP connection

   In **AgentKit > Connections**, create a Twitter MCP connection and copy its redirect URI. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Register an OAuth app

   Twitter MCP server connections use your own OAuth app. Register one with Twitter MCP server and add the redirect URI you copied.

   Then enter the app's Client ID and Client Secret on the Twitter MCP connection.

5. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'twittermcp'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Twitter MCP:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'twittermcp_get_users_me',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "twittermcp"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Twitter MCP:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="twittermcp_get_users_me",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'twittermcp_chat_media_download',
  toolInput: {
    id: '<id>',
    media_hash_key: '<media_hash_key>',
  },
  connector: 'twittermcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="twittermcp_chat_media_download",
    tool_input={
        "id": "<id>",
        "media_hash_key": "<media_hash_key>",
    },
    connection_name="twittermcp",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `twittermcp_chat_media_download`

Chat Media Download · Read-only

Downloads encrypted media bytes from an XChat conversation. The response body contains raw binary bytes. Returns JSON with the response bytes base64-encoded in `data`, plus `content_type` and `size_bytes`. Needs the OAuth2 scope `media.write`.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `media_hash_key` (`string`, required): No description.

Example input: `{"id":"<id>","media_hash_key":"<media_hash_key>"}`

### `twittermcp_get_broadcast`

Get Broadcast · Read-only

Returns a broadcast owned by the authenticated user.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): The ID of the broadcast to retrieve.
- `broadcast.fields` (`string`, optional): A comma separated list of Broadcast fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_broadcast_chat`

Get Broadcast Chat · Read-only

Returns newest-first chat messages for a broadcast owned by the authenticated user.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): ID of the broadcast whose chat messages to return. The broadcast must be owned by the authenticated user.
- `broadcast_chat_message.fields` (`string`, optional): A comma separated list of BroadcastChatMessage fields to display.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `max_results` (`integer`, optional): Maximum number of chat messages to return.
- `pagination_token` (`string`, optional): A 64-bit signed integer.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_chat_conversation`

Get Chat Conversation · Read-only

Returns metadata for a Chat conversation including type, muted status, group details, and your unread state. For the unread state, request chat_conversation.fields=unread,last_read_event_id,newest_event_id: those fields give your read state, computed from your latest read receipt and the conversation's latest notifying message. Use chat_conversation.fields to select which fields are returned. Use expansions to hydrate member, admin, or participant user objects. Use user.fields to control which profile fields are returned for expanded users.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): ID of the Chat conversation to retrieve metadata for.
- `chat_conversation.fields` (`string`, optional): A comma separated list of ChatConversation fields to display.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_chat_conversation_events`

Get Chat Conversation Events · Read-only

Retrieves the events of a specific Chat conversation, newest first, with pagination support: messages, key changes, group changes, and read receipts. Events with an id above the conversation's last_read_event_id are unread: they come after the point you read up to. To collect them, page until an event's id is at or below it. Only `id` and `encoded_event` are always present. Events are either end-to-end encrypted or unencrypted, such as messages sent before the conversation was encrypted. Encrypted events carry `conversation_key_version`, and usually `conversation_token` and `message_event_signature`; treat an encrypted event without `message_event_signature` as unverified. An event without `conversation_key_version` is unencrypted. Decode each `encoded_event` client-side, and decrypt it with the conversation key named by `conversation_key_version` when that is present. A page holds up to `max_results` events and can hold fewer while `has_more` is true. For 1:1 conversations, provide the recipient's user ID; the server constructs the canonical conversation ID from the authenticated user and recipient.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `chat_message_event.fields` (`string`, optional): A comma separated list of ChatMessageEvent fields to display.
- `max_results` (`integer`, optional): The maximum number of events to return.
- `pagination_token` (`string`, optional): The next_token from a previous response, to fetch the next page.

Example input: `{"id":"<id>"}`

### `twittermcp_get_chat_conversations`

Get Chat Conversations · Read-only

Retrieves a list of Chat conversations for the authenticated user's inbox, newest first: the most recently active conversation comes first. The unread, last_read_event_id and newest_event_id fields give your read state, computed from your latest read receipt and each conversation's latest notifying message. Request them with chat_conversation.fields=unread,last_read_event_id,newest_event_id.

The filters unread_only, type, is_archived, is_muted, participant_ids, participant_query, start_time and end_time are optional, and all filters must match (AND). participant_query keeps conversations where another participant's username, or a word of their display name, starts with the query, ignoring case and accents; with a leading @ it matches usernames only. It considers the 100 people who best match the query, uses only public profile information, and never matches group names, nicknames or messages. start_time and end_time apply to the time of each conversation's latest message.

Each page covers max_results conversations and returns those that match, so a page can hold fewer than max_results, or none, while meta.next_token is set and has_more is true: keep paging, passing meta.next_token as pagination_token. Once a page reaches a conversation whose latest message is older than start_time, has_more is false. A pagination_token only works with the same filters as the request that returned it; with other filters, the request fails with a 400.

When both are provided, `start_time` must be earlier than `end_time`.

Read only: yes. Destructive: no.

Inputs:

- `chat_conversation.fields` (`string`, optional): A comma separated list of ChatConversation fields to display.
- `end_time` (`string`, optional): ISO 8601, e.g. 2026-10-17T00:00:00Z. Chats whose latest message is before this time.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `is_archived` (`boolean`, optional): true: only archived; false: only not archived. Omit for both.
- `is_muted` (`boolean`, optional): true: only muted; false: only not muted. Omit for both.
- `max_results` (`integer`, optional): Conversations covered per page (1-1000, default 200). Filtered pages can return fewer.
- `pagination_token` (`string`, optional): meta.next_token from the previous page. Send the same filters with it, or the request fails.
- `participant_ids` (`string`, optional): Comma-separated numeric user IDs (1-10), all in the chat. Names or @handles: use participant_query.
- `participant_query` (`string`, optional): Name or @username prefix (1-50 chars); keeps chats where any other participant matches it.
- `start_time` (`string`, optional): ISO 8601, e.g. 2026-10-16T00:00:00Z. Chats whose latest message is at or after this time.
- `type` (`string`, optional): Only direct (1:1) or only group conversations. Omit for both. One of: `direct`, `group`.
- `unread_only` (`boolean`, optional): Return only unread conversations. A page can be short; keep paging while has_more.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{}`

### `twittermcp_get_chat_message_request`

Get Chat Message Request · Read-only

Retrieves the message request state of a 1:1 Chat conversation and its newest message events. Like opening the request in an X app, reading it marks the returned messages as delivered and updates the unread badge.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): The other user's ID, or both user IDs joined by a hyphen.
- `chat_message_request_detail.fields` (`string`, optional): A comma separated list of ChatMessageRequestDetail fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_chat_message_requests`

Get Chat Message Requests · Read-only

Retrieves the authenticated user's pending Chat message requests from one inbox. Message contents are end-to-end encrypted unless the conversation is unencrypted. Accepting or deleting requests between pages can skip or repeat requests, and a page can be empty while `next_token` is set.

Read only: yes. Destructive: no.

Inputs:

- `chat_message_request.fields` (`string`, optional): A comma separated list of ChatMessageRequest fields to display.
- `inbox_type` (`string`, optional): Which message request inbox to list: `you_may_know` (the apps' Priority tab) or `low_quality` (th... One of: `you_may_know`, `low_quality`.
- `max_results` (`integer`, optional): The maximum number of message requests to return.
- `pagination_token` (`string`, optional): The next_token from a previous response, to fetch the next page.

Example input: `{}`

### `twittermcp_get_chat_moderators`

Get Chat Moderators · Read-only

Returns the authenticated broadcaster's persistent moderators as User resources. The list applies to all of their current and future broadcast chats.

Read only: yes. Destructive: no.

Inputs:

- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{}`

### `twittermcp_get_communities_by_id`

Get Communities By Id · Read-only

Retrieves details of a specific Community by its ID.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `community.fields` (`string`, optional): A comma separated list of Community fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_lists_by_id`

Get Lists By Id · Read-only

Retrieves details of a specific List by its ID.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): The ID of the List.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `list.fields` (`string`, optional): A comma separated list of List fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_lists_followers`

Get Lists Followers · Read-only

Retrieves a list of Users who follow a specific List by its ID.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): The ID of the List.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `max_results` (`integer`, optional): The maximum number of results to return.
- `pagination_token` (`string`, optional): A 64-bit signed integer.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_lists_members`

Get Lists Members · Read-only

Retrieves a list of Users who are members of a specific List by its ID.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `max_results` (`integer`, optional): No description.
- `pagination_token` (`string`, optional): A 64-bit signed integer.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_lists_posts`

Get Lists Posts · Read-only

Retrieves a list of Posts associated with a specific List by its ID.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): The ID of the List whose Posts to retrieve.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `max_results` (`integer`, optional): Maximum number of results to return per page. Allowed range is defined by the X API for this endpoint.
- `media.fields` (`string`, optional): A comma separated list of Media fields to display.
- `pagination_token` (`string`, optional): A base32hex-encoded pagination token.
- `place.fields` (`string`, optional): A comma separated list of Place fields to display.
- `poll.fields` (`string`, optional): A comma separated list of Poll fields to display.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_news`

Get News · Read-only

Retrieves news story by its ID. Each returned story includes a `url` deeplinking to its x.com page.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `news.fields` (`string`, optional): A comma separated list of News fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_posts_by_id`

Get Posts By Id · Read-only

Retrieves details of a specific Post by its ID. Each returned post includes a `url` deeplinking to it on x.com.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `media.fields` (`string`, optional): A comma separated list of Media fields to display.
- `place.fields` (`string`, optional): A comma separated list of Place fields to display.
- `poll.fields` (`string`, optional): A comma separated list of Poll fields to display.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_posts_by_ids`

Get Posts By Ids · Read-only

Retrieves details of multiple Posts by their IDs. Each returned post includes a `url` deeplinking to it on x.com.

Read only: yes. Destructive: no.

Inputs:

- `ids` (`string`, required): (comma-separated)
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `media.fields` (`string`, optional): A comma separated list of Media fields to display.
- `place.fields` (`string`, optional): A comma separated list of Place fields to display.
- `poll.fields` (`string`, optional): A comma separated list of Poll fields to display.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"ids":"<ids>"}`

### `twittermcp_get_posts_counts_recent`

Get Posts Counts Recent · Read-only

Retrieves the count of Posts from the last 7 days matching a search query.

At most one of `pagination_token`, `next_token` may be provided.

Read only: yes. Destructive: no.

Inputs:

- `query` (`string`, required): The search query to count matching Posts for.
- `end_time` (`string`, optional): The end of the time window, as an ISO 8601 timestamp.
- `granularity` (`string`, optional): The granularity of the returned counts. One of: `minute`, `hour`, `day`.
- `next_token` (`string`, optional): A base32hex-encoded pagination token.
- `pagination_token` (`string`, optional): A base32hex-encoded pagination token.
- `search_count.fields` (`string`, optional): A comma separated list of search count fields to display.
- `since_id` (`string`, optional): Returns results with a Post ID greater than (more recent than) this ID.
- `start_time` (`string`, optional): Must be within the last 7 days.
- `until_id` (`string`, optional): Returns results with a Post ID less than (older than) this ID.

Example input: `{"query":"<query>"}`

### `twittermcp_get_posts_liking_users`

Get Posts Liking Users · Read-only

Retrieves a list of Users who liked a specific Post by its ID.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `max_results` (`integer`, optional): No description.
- `pagination_token` (`string`, optional): A base32hex-encoded pagination token.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_posts_quoted_posts`

Get Posts Quoted Posts · Read-only

Retrieves a list of Posts that quote a specific Post by its ID. Each returned post includes a `url` deeplinking to it on x.com.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): The ID of the Post whose quote Posts to retrieve.
- `exclude` (`string`, optional): (comma-separated)
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `max_results` (`integer`, optional): Maximum number of results to return per page. Allowed range is defined by the X API for this endpoint.
- `media.fields` (`string`, optional): A comma separated list of Media fields to display.
- `pagination_token` (`string`, optional): A base32hex-encoded pagination token.
- `place.fields` (`string`, optional): A comma separated list of Place fields to display.
- `poll.fields` (`string`, optional): A comma separated list of Poll fields to display.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_posts_reposted_by`

Get Posts Reposted By · Read-only

Retrieves a list of Users who reposted a specific Post by its ID.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): The ID of the resource this call applies to.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `max_results` (`integer`, optional): Maximum number of results to return.
- `pagination_token` (`string`, optional): A base32hex-encoded pagination token.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_scheduled_broadcast`

Get Scheduled Broadcast · Read-only

Returns a single scheduled broadcast by its alphanumeric broadcast id.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): The ID of the resource this call applies to.

Example input: `{"id":"<id>"}`

### `twittermcp_get_scheduled_call`

Get Scheduled Call · Read-only

Returns a scheduled call the authenticated user organizes or is invited to, at its occurrence running now or its next one within a year: its time, call, recurrence and who is invited and how they answered. Changes can take a few seconds to show here. Use scheduled_call.fields to select which fields are returned.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): The ID of the resource this call applies to.
- `call.fields` (`string`, optional): A comma separated list of Call fields to display.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `scheduled_call.fields` (`string`, optional): A comma separated list of ScheduledCall fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_source`

Get Source · Read-only

Returns one of the authenticated user's stream sources. Poll it after starting an encoder and wait for `is_stream_active` before going live. The stream key is not included; read it with GET /2/sources/:id/stream_key.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): Source id, from GET /2/sources.

Example input: `{"id":"<id>"}`

### `twittermcp_get_spaces_by_creator_ids`

Get Spaces By Creator Ids · Read-only

Retrieves details of Spaces created by specified User IDs.

Read only: yes. Destructive: no.

Inputs:

- `user_ids` (`string`, required): (comma-separated)
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `space.fields` (`string`, optional): A comma separated list of Space fields to display.
- `topic.fields` (`string`, optional): A comma separated list of Topic fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"user_ids":"<user_ids>"}`

### `twittermcp_get_spaces_by_id`

Get Spaces By Id · Read-only

Retrieves details of a specific Space by its ID.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): The ID of the resource this call applies to.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `space.fields` (`string`, optional): A comma separated list of Space fields to display.
- `topic.fields` (`string`, optional): A comma separated list of Topic fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_spaces_by_ids`

Get Spaces By Ids · Read-only

Retrieves details of multiple Spaces by their IDs.

Read only: yes. Destructive: no.

Inputs:

- `ids` (`string`, required): (comma-separated)
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `space.fields` (`string`, optional): A comma separated list of Space fields to display.
- `topic.fields` (`string`, optional): A comma separated list of Topic fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"ids":"<ids>"}`

### `twittermcp_get_spaces_posts`

Get Spaces Posts · Read-only

Retrieves a list of Posts shared in a specific Space by its ID.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `max_results` (`integer`, optional): No description.
- `media.fields` (`string`, optional): A comma separated list of Media fields to display.
- `pagination_token` (`string`, optional): A base32hex-encoded pagination token.
- `place.fields` (`string`, optional): A comma separated list of Place fields to display.
- `poll.fields` (`string`, optional): A comma separated list of Poll fields to display.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_trends_by_woeid`

Get Trends By Woeid · Read-only

Retrieves trending topics for a specific location identified by its WOEID. Each returned trend includes a `url` deeplinking to its x.com search.

Read only: yes. Destructive: no.

Inputs:

- `woeid` (`integer`, required): No description.
- `max_trends` (`integer`, optional): No description.
- `trend.fields` (`string`, optional): A comma separated list of Trend fields to display.

Example input: `{"woeid":1}`

### `twittermcp_get_usage_credits`

Get Usage Credits · Read-only

Returns the payer's developer-platform credit balance in USD. total_balance is max(0, prepaid_balance + free_balance); prepaid_balance may be negative.

Read only: yes. Destructive: no.

Inputs: none.

Example input: `{}`

### `twittermcp_get_users_blocking`

Get Users Blocking · Read-only

Returns the Users that the given User is blocking.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): The ID of the authenticated user whose blocked users to list.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `max_results` (`integer`, optional): Maximum number of results to return per page. Allowed range is defined by the X API for this endpoint.
- `pagination_token` (`string`, optional): A base32hex-encoded pagination token returned as next_token by a previous call, used to fetch the next page.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_users_bookmark_folders`

Get Users Bookmark Folders · Read-only

Retrieves a list of Bookmark folders created by the authenticated user.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): The ID of the authenticated user.
- `max_results` (`integer`, optional): Maximum number of results to return.
- `pagination_token` (`string`, optional): A base32hex-encoded pagination token.

Example input: `{"id":"<id>"}`

### `twittermcp_get_users_bookmarks`

Get Users Bookmarks · Read-only

Retrieves a list of Posts bookmarked by the authenticated user. Each returned post includes a `url` deeplinking to it on x.com.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `max_results` (`integer`, optional): No description.
- `media.fields` (`string`, optional): A comma separated list of Media fields to display.
- `pagination_token` (`string`, optional): A base32hex-encoded pagination token.
- `place.fields` (`string`, optional): A comma separated list of Place fields to display.
- `poll.fields` (`string`, optional): A comma separated list of Poll fields to display.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_users_bookmarks_by_folder_id`

Get Users Bookmarks By Folder Id · Read-only

Retrieves Posts in a specific Bookmark folder by its ID for the authenticated user. Each returned post includes a `url` deeplinking to it on x.com.

Read only: yes. Destructive: no.

Inputs:

- `folder_id` (`string`, required): The ID of the Bookmark folder.
- `id` (`string`, required): The ID of the authenticated user.
- `max_results` (`integer`, optional): The maximum number of results to return.
- `pagination_token` (`string`, optional): A base32hex-encoded pagination token.

Example input: `{"folder_id":"<folder_id>","id":"<id>"}`

### `twittermcp_get_users_by_id`

Get Users By Id · Read-only

Retrieves details of a specific User by their ID.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_users_by_username`

Get Users By Username · Read-only

Retrieves details of a specific User by their username.

Read only: yes. Destructive: no.

Inputs:

- `username` (`string`, required): The username of the User to look up.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"username":"<username>"}`

### `twittermcp_get_users_by_usernames`

Get Users By Usernames · Read-only

Retrieves details of multiple Users by their usernames.

Read only: yes. Destructive: no.

Inputs:

- `usernames` (`string`, required): (comma-separated)
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"usernames":"<usernames>"}`

### `twittermcp_get_users_followed_lists`

Get Users Followed Lists · Read-only

Retrieves a list of Lists followed by a specific User by their ID.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `list.fields` (`string`, optional): A comma separated list of List fields to display.
- `max_results` (`integer`, optional): No description.
- `pagination_token` (`string`, optional): A 64-bit signed integer.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_users_liked_posts`

Get Users Liked Posts · Read-only

Retrieves a list of Posts liked by a specific User by their ID. Each returned post includes a `url` deeplinking to it on x.com.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): The ID of the resource this call applies to.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `max_results` (`integer`, optional): Maximum number of results to return.
- `media.fields` (`string`, optional): A comma separated list of Media fields to display.
- `pagination_token` (`string`, optional): A base32hex-encoded pagination token.
- `place.fields` (`string`, optional): A comma separated list of Place fields to display.
- `poll.fields` (`string`, optional): A comma separated list of Poll fields to display.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_users_list_memberships`

Get Users List Memberships · Read-only

Retrieves a list of Lists that a specific User is a member of by their ID.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `list.fields` (`string`, optional): A comma separated list of List fields to display.
- `max_results` (`integer`, optional): No description.
- `pagination_token` (`string`, optional): No description.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_users_me`

Get Users Me · Read-only

Retrieves details of the authenticated user.

Read only: yes. Destructive: no.

Inputs:

- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{}`

### `twittermcp_get_users_me_followers`

Get Users Me Followers · Read-only

Returns the Users who follow the authenticated user. Same results as `GET /2/users/{id}/followers` with your own user ID, without looking it up.

Read only: yes. Destructive: no.

Inputs:

- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `max_results` (`integer`, optional): The maximum number of users to return.
- `pagination_token` (`string`, optional): The next_token or previous_token from a previous response, to fetch that page. A base32hex-encode...
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{}`

### `twittermcp_get_users_me_following`

Get Users Me Following · Read-only

Returns the Users the authenticated user follows. Same results as `GET /2/users/{id}/following` with your own user ID, without looking it up.

Read only: yes. Destructive: no.

Inputs:

- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `max_results` (`integer`, optional): The maximum number of users to return.
- `pagination_token` (`string`, optional): The next_token or previous_token from a previous response, to fetch that page. A base32hex-encode...
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{}`

### `twittermcp_get_users_mentions`

Get Users Mentions · Read-only

Retrieves a list of Posts that mention a specific User by their ID.

When both are provided, `start_time` must be earlier than `end_time`. When both are provided, `since_id` must be less than `until_id`. Each returned post includes a `url` deeplinking to it on x.com.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `end_time` (`string`, optional): Must be on or after 2010-11-06.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `max_results` (`integer`, optional): No description.
- `media.fields` (`string`, optional): A comma separated list of Media fields to display.
- `pagination_token` (`string`, optional): A base32hex-encoded pagination token.
- `place.fields` (`string`, optional): A comma separated list of Place fields to display.
- `poll.fields` (`string`, optional): A comma separated list of Poll fields to display.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `since_id` (`string`, optional): No description.
- `start_time` (`string`, optional): Must be on or after 2010-11-06.
- `until_id` (`string`, optional): No description.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_users_owned_lists`

Get Users Owned Lists · Read-only

Retrieves a list of Lists owned by a specific User by their ID.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): The ID of the User.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `list.fields` (`string`, optional): A comma separated list of List fields to display.
- `max_results` (`integer`, optional): Maximum number of results to return.
- `pagination_token` (`string`, optional): A 64-bit signed integer.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_users_pinned_lists`

Get Users Pinned Lists · Read-only

Retrieves a list of Lists pinned by the authenticated user.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): ID of the authenticated user whose pinned Lists to retrieve.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `list.fields` (`string`, optional): A comma separated list of List fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_users_posts`

Get Users Posts · Read-only

Retrieves a list of Posts authored by a specific User by their ID.

When both are provided, `start_time` must be earlier than `end_time`. When both are provided, `since_id` must be less than `until_id`. Each returned post includes a `url` deeplinking to it on x.com.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): The ID of the User whose Posts to retrieve.
- `end_time` (`string`, optional): Must be on or after 2010-11-06.
- `exclude` (`string`, optional): (comma-separated)
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `max_results` (`integer`, optional): Maximum number of results to return per page. Allowed range is defined by the X API for this endpoint.
- `media.fields` (`string`, optional): A comma separated list of Media fields to display.
- `pagination_token` (`string`, optional): A base32hex-encoded pagination token.
- `place.fields` (`string`, optional): A comma separated list of Place fields to display.
- `poll.fields` (`string`, optional): A comma separated list of Poll fields to display.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `since_id` (`string`, optional): Only return Posts with an ID greater than this one. Must be less than until_id when both are given.
- `start_time` (`string`, optional): Must be on or after 2010-11-06.
- `until_id` (`string`, optional): Only return Posts with an ID less than this one.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_users_public_key`

Get Users Public Key · Read-only

Returns a user's registered public keys for X Chat encryption.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `public_key.fields` (`string`, optional): A comma separated list of PublicKey fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_get_users_public_keys`

Get Users Public Keys · Read-only

Returns registered public keys for X Chat encryption for the specified users.

Read only: yes. Destructive: no.

Inputs:

- `ids` (`string`, required): (comma-separated)
- `public_key.fields` (`string`, optional): A comma separated list of PublicKey fields to display.

Example input: `{"ids":"<ids>"}`

### `twittermcp_get_users_timeline`

Get Users Timeline · Read-only

Retrieves a reverse chronological list of Posts in the authenticated user's Timeline.

When both are provided, `start_time` must be earlier than `end_time`. When both are provided, `since_id` must be less than `until_id`. Each returned post includes a `url` deeplinking to it on x.com.

Read only: yes. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `end_time` (`string`, optional): Must be on or after 2010-11-06.
- `exclude` (`string`, optional): (comma-separated)
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `max_results` (`integer`, optional): No description.
- `media.fields` (`string`, optional): A comma separated list of Media fields to display.
- `pagination_token` (`string`, optional): A base32hex-encoded pagination token.
- `place.fields` (`string`, optional): A comma separated list of Place fields to display.
- `poll.fields` (`string`, optional): A comma separated list of Poll fields to display.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `since_id` (`string`, optional): No description.
- `start_time` (`string`, optional): Must be on or after 2010-11-06.
- `until_id` (`string`, optional): No description.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"id":"<id>"}`

### `twittermcp_list_broadcasts`

List Broadcasts · Read-only

Returns the authenticated user's live-video broadcasts, or selected owned broadcasts when ids are provided.

At most one of `ids`, `max_results` may be provided. At most one of `ids`, `pagination_token` may be provided.

Read only: yes. Destructive: no.

Inputs:

- `broadcast.fields` (`string`, optional): A comma separated list of Broadcast fields to display.
- `ids` (`string`, optional): Comma-separated broadcast IDs to retrieve instead of listing broadcasts.
- `max_results` (`integer`, optional): Maximum number of results to return.
- `pagination_token` (`string`, optional): Token for fetching the next page of results.

Example input: `{}`

### `twittermcp_list_scheduled_broadcasts`

List Scheduled Broadcasts · Read-only

Returns scheduled broadcasts owned by the authenticated user.

Read only: yes. Destructive: no.

Inputs:

- `max_results` (`integer`, optional): No description.
- `newest_start_time` (`string`, optional): No description.
- `oldest_start_time` (`string`, optional): No description.
- `pagination_token` (`string`, optional): No description.

Example input: `{}`

### `twittermcp_list_scheduled_calls`

List Scheduled Calls · Read-only

Returns the X calls on the authenticated user's calendar, earliest first: events on their X Calls calendar, and events on the Microsoft Outlook calendars they linked to X whose conference is an X call. Calls still running at start_time are included. The window defaults to the next 24 hours and may span at most 7 days. Use scheduled_call.fields to select which fields are returned.

When both are provided, `start_time` must be earlier than `end_time`.

Read only: yes. Destructive: no.

Inputs:

- `call.fields` (`string`, optional): A comma separated list of Call fields to display.
- `end_time` (`string`, optional): Calls starting before this time (RFC 3339). Defaults to 24 hours after start_time.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `max_results` (`integer`, optional): The most calls to return. Defaults to 20.
- `scheduled_call.fields` (`string`, optional): A comma separated list of ScheduledCall fields to display.
- `start_time` (`string`, optional): Calls still running at this time or starting after it (RFC 3339). Defaults to now.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{}`

### `twittermcp_list_sources`

List Sources · Read-only

Returns the authenticated user's RTMP/RTMPS stream sources. A source's `id` is the `source_id` that POST /2/broadcasts and scheduled broadcasts take. Stream keys are not included; read one with GET /2/sources/:id/stream_key.

Read only: yes. Destructive: no.

Inputs: none.

Example input: `{}`

### `twittermcp_search_communities`

Search Communities · Read-only

Retrieves a list of Communities matching the specified search query.

Read only: yes. Destructive: no.

Inputs:

- `query` (`string`, required): The search query string.
- `community.fields` (`string`, optional): A comma separated list of Community fields to display.
- `max_results` (`integer`, optional): Maximum number of results to return.
- `next_token` (`string`, optional): Token for fetching the next page of results.
- `pagination_token` (`string`, optional): Token for fetching the next or previous page of results.

Example input: `{"query":"<query>"}`

### `twittermcp_search_news`

Search News · Read-only

Retrieves a list of News stories matching the specified search query. Each returned story includes a `url` deeplinking to its x.com page.

Read only: yes. Destructive: no.

Inputs:

- `query` (`string`, required): The search query string.
- `max_age_hours` (`integer`, optional): Maximum age of news stories in hours.
- `max_results` (`integer`, optional): Maximum number of results to return.
- `news.fields` (`string`, optional): A comma separated list of News fields to display.

Example input: `{"query":"<query>"}`

### `twittermcp_search_posts_all`

Search Posts All · Read-only

Retrieves Posts from the full archive matching a search query.

At most one of `start_time`, `since_id` may be provided. At most one of `end_time`, `until_id` may be provided. At most one of `pagination_token`, `next_token` may be provided. Each returned post includes a `url` deeplinking to it on x.com.

Read only: yes. Destructive: no.

Inputs:

- `query` (`string`, required): No description.
- `end_time` (`string`, optional): No description.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `max_results` (`integer`, optional): No description.
- `media.fields` (`string`, optional): A comma separated list of Media fields to display.
- `next_token` (`string`, optional): A base32hex-encoded pagination token.
- `pagination_token` (`string`, optional): A base32hex-encoded pagination token.
- `place.fields` (`string`, optional): A comma separated list of Place fields to display.
- `poll.fields` (`string`, optional): A comma separated list of Poll fields to display.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `since_id` (`string`, optional): No description.
- `sort_order` (`string`, optional): No description. One of: `recency`, `relevancy`.
- `start_time` (`string`, optional): No description.
- `until_id` (`string`, optional): No description.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"query":"<query>"}`

### `twittermcp_search_spaces`

Search Spaces · Read-only

Retrieves a list of Spaces matching the specified search query.

Read only: yes. Destructive: no.

Inputs:

- `query` (`string`, required): The search term used to find Spaces by title or topic.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `max_results` (`integer`, optional): Maximum number of results to return per page. Allowed range is defined by the X API for this endpoint.
- `space.fields` (`string`, optional): A comma separated list of Space fields to display.
- `state` (`string`, optional): Filter Spaces by state: live, scheduled, or all. One of: `live`, `scheduled`, `all`.
- `topic.fields` (`string`, optional): A comma separated list of Topic fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"query":"<query>"}`

### `twittermcp_search_users`

Search Users · Read-only

Retrieves a list of Users matching a search query.

Read only: yes. Destructive: no.

Inputs:

- `query` (`string`, required): No description.
- `expansions` (`string`, optional): A comma separated list of fields to expand.
- `max_results` (`integer`, optional): No description.
- `next_token` (`string`, optional): No description.
- `post.fields` (`string`, optional): A comma separated list of Post fields to display.
- `user.fields` (`string`, optional): A comma separated list of User fields to display.

Example input: `{"query":"<query>"}`

### `twittermcp_accept_chat_message_request`

Accept Chat Message Request · Write

Accepts the other user's pending message request in a 1:1 Chat conversation, which moves to the authenticated user's inbox. Without a pending request, including after a successful accept, the response is 404. Replying to a request does not accept it.

Read only: no. Destructive: no.

Inputs:

- `id` (`string`, required): The other user's ID, or both user IDs joined by a hyphen.

Example input: `{"id":"<id>"}`

### `twittermcp_add_chat_moderator`

Add Chat Moderator · Write

Adds a moderator to the authenticated broadcaster's persistent list and returns the updated moderator user IDs. The list applies to all current and future broadcast chats.

Read only: no. Destructive: no.

Inputs:

- `user_id` (`string`, required): The user to appoint as a moderator.

Example input: `{"user_id":"<user_id>"}`

### `twittermcp_add_conversation_keys`

Add Conversation Keys · Write

Adds (initializes or rotates) the encryption keys for a Chat conversation. Call this before sending messages in a new 1:1 conversation, and again with a newer key version to rotate the conversation key. For 1:1 conversations, provide the recipient's user ID as the conversation id; the server constructs the canonical conversation ID from the authenticated user and recipient. The request body must contain the conversation key version and participant keys (the conversation key encrypted for each participant using their public key).

Read only: no. Destructive: no.

Inputs:

- `conversation_key_version` (`string`, required): Version of the conversation encryption key (typically a timestamp in milliseconds).
- `conversation_participant_keys` (`array`, required): Encrypted conversation keys for each participant.
- `id` (`string`, required): No description.
- `action_signatures` (`array`, optional): Signatures for this action, forwarded in the order they are sent.
- `base64_encoded_key_rotation` (`string`, optional): Base64-encoded key rotation payload for ratchet tree key management.

Example input: `{"conversation_key_version":"<conversation_key_version>","conversation_participant_keys":[],"id":"<id>"}`

### `twittermcp_add_lists_member`

Add Lists Member · Write

Adds a User to a specific List by its ID.

Read only: no. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `user_id` (`string`, required): No description.

Example input: `{"id":"<id>","user_id":"<user_id>"}`

### `twittermcp_article_create_draft`

Article Create Draft · Write

Creates a new Article draft that can later be published.

Read only: no. Destructive: no.

Inputs:

- `content_state` (`object`, required): No description.
- `title` (`string`, required): The title of the Article.
- `cover_media` (`object`, optional): No description.

Example input: `{"content_state":{},"title":"<title>"}`

### `twittermcp_chat_media_upload_append`

Chat Media Upload Append · Write

Appends media data to an XChat upload session. Needs the OAuth2 scope `media.write`.

Read only: no. Destructive: no.

Inputs:

- `conversation_id` (`string`, required): The XChat conversation the upload belongs to.
- `id` (`string`, required): ID of the XChat upload session to append the media segment to.
- `media` (`string`, required): The media segment bytes: base64-encoded in JSON bodies, raw bytes in multipart bodies.
- `media_hash_key` (`string`, required): The media hash key returned by the initialize step.
- `segment_index` (`integer`, required): The index of this segment in the upload sequence.

Example input: `{"conversation_id":"<conversation_id>","id":"<id>","media":"<media>","media_hash_key":"<media_hash_key>","segment_index":1}`

### `twittermcp_chat_media_upload_finalize`

Chat Media Upload Finalize · Write

Finalizes an XChat media upload session. Needs the OAuth2 scope `media.write`.

Read only: no. Destructive: no.

Inputs:

- `conversation_id` (`string`, required): The XChat conversation the upload belongs to.
- `id` (`string`, required): The ID of the media upload session to finalize.
- `media_hash_key` (`string`, required): The media hash key returned by the initialize step.
- `num_parts` (`string`, required): Total number of uploaded parts, as a numeric string.
- `message_id` (`string`, optional): Optional message identifier associated with the upload.
- `ttl_msec` (`string`, optional): Optional TTL for the media in milliseconds, as a numeric string.

Example input: `{"conversation_id":"<conversation_id>","id":"<id>","media_hash_key":"<media_hash_key>","num_parts":"<num_parts>"}`

### `twittermcp_chat_media_upload_initialize`

Chat Media Upload Initialize · Write

Initializes an XChat media upload session. Needs the OAuth2 scope `media.write`.

Read only: no. Destructive: no.

Inputs:

- `conversation_id` (`string`, required): The XChat conversation the upload belongs to.
- `total_bytes` (`integer`, required): Total size of the media upload in bytes.

Example input: `{"conversation_id":"<conversation_id>","total_bytes":1}`

### `twittermcp_create_lists`

Create Lists · Write

Creates a new List for the authenticated user.

Read only: no. Destructive: no.

Inputs:

- `name` (`string`, required): Name of the List (1-25 characters).
- `description` (`string`, optional): Description of the List (up to 100 characters).
- `private` (`boolean`, optional): Whether the List is private.

Example input: `{"name":"<name>"}`

### `twittermcp_create_posts`

Create Posts · Write

Creates a new Post for the authenticated user, or edits an existing Post when edit_options are provided. Supports paid partnership disclosure via the paid_partnership field.

Read only: no. Destructive: no.

Inputs:

- `card_uri` (`string`, optional): Card URI parameter.
- `community_id` (`string`, optional): Community to post the tweet to.
- `direct_message_deep_link` (`string`, optional): Direct message deep link.
- `edit_options` (`object`, optional): Object with previous_post_id, the ID of the Post being edited.
- `for_super_followers_only` (`boolean`, optional): Restrict tweet to super followers.
- `geo` (`object`, optional): Object with place_id, the Place ID used for geo tagging.
- `made_with_ai` (`boolean`, optional): Disclose that the tweet contains AI-generated media.
- `media` (`object`, optional): Media object. media_ids (array of media IDs) is required; optional keys include description, title, embeddable, preview_media_id, tagged_user_ids and call_to_actions (app_install, visit_site, watch_now).
- `nullcast` (`boolean`, optional): If true, the tweet is not shown in the public timeline.
- `paid_partnership` (`boolean`, optional): Disclose that the tweet is a paid partnership.
- `poll` (`object`, optional): Poll object. options (2-4 choices, 1-25 characters each) and duration_minutes are required; reply_settings is optional.
- `quote_tweet_id` (`string`, optional): Tweet ID to quote.
- `reply` (`object`, optional): Reply object. in_reply_to_tweet_id is required; optional keys are exclude_reply_user_ids and auto_populate_reply_metadata.
- `reply_settings` (`string`, optional): Who can reply to this tweet. One of: `following`, `mentionedUsers`, `subscribers`, `verified`.
- `share_with_followers` (`boolean`, optional): Share an exclusive (super-follower) tweet with all followers.
- `text` (`string`, optional): Text of the tweet. Required unless media is provided.  Defaulted to an empty string so it is alwa...

Example input: `{}`

### `twittermcp_create_scheduled_broadcast`

Create Scheduled Broadcast · Write

Schedules a broadcast for the authenticated user on one of their sources: `source_id` is required. Passing a stream key as `source_id` is deprecated and stops working when the /2/users/:id/sources and /2/users/:id/broadcasts routes reach end of life on January 1, 2027; pass the source's `id` from GET /2/sources instead.

Read only: no. Destructive: no.

Inputs:

- `scheduled_start_ms` (`string`, required): Start time, ms since Unix epoch (decimal string).
- `source_id` (`string`, required): Source to bind: a source's `id` from GET /2/sources. A stream key is also accepted but deprecated...
- `available_for_replay` (`boolean`, optional): Enable replay.
- `chat_option` (`string`, optional): Who can chat (numeric string): `0` default, `1` chat off, `2` everyone, `3` verified accounts, `4...
- `description` (`string`, optional): Description.
- `is_locked` (`boolean`, optional): Lock the broadcast.
- `locale` (`string`, optional): Locale.
- `manual_publish` (`boolean`, optional): If true, do not auto-publish at start; call POST .../live when ready.
- `recurrence` (`object`, optional): No description.
- `scheduled_end_ms` (`string`, optional): Optional end time, ms since Unix epoch (decimal string). Omit for an open-ended broadcast.
- `telecast_id` (`string`, optional): Deprecated: telecast associations are being retired and this field will be ignored.
- `thumbnail_media_id` (`string`, optional): Pre-live slate media id (numeric string).
- `title` (`string`, optional): Title / status text.

Example input: `{"scheduled_start_ms":"<scheduled_start_ms>","source_id":"<source_id>"}`

### `twittermcp_create_source`

Create Source · Write

Creates a persistent RTMP/RTMPS ingest point for the authenticated user. Push an encoder to `rtmps_url` with the returned `stream_key`. This is the only response that includes the stream key; read it later with GET /2/sources/:id/stream_key.

Read only: no. Destructive: no.

Inputs:

- `name` (`string`, required): Label for the source.
- `region` (`string`, required): Ingest region, as returned by GET /2/region. us-west-1 and us-west-2 ingest in US West; us-east-1...

Example input: `{"name":"<name>","region":"<region>"}`

### `twittermcp_create_users_bookmark`

Create Users Bookmark · Write

Adds one or more Posts to the authenticated user's Bookmarks. Supply `tweet_id` for a single Post, or `tweet_ids` (at most 25) to bookmark several in one request. Optional `folder_id` applies to every Post in the request. Billing and rate limits still apply per HTTP request.

Read only: no. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `folder_id` (`string`, optional): Optional ID of the Bookmark folder to add the Post(s) to. When omitted, Posts are added to the us...
- `tweet_id` (`string`, optional): The ID of the Post to add to the user's Bookmarks. Mutually exclusive with `tweet_ids`.
- `tweet_ids` (`array`, optional): Post IDs to add to the user's Bookmarks. At most 25. Mutually exclusive with `tweet_id`.

Example input: `{"id":"<id>"}`

### `twittermcp_create_users_bookmark_folder`

Create Users Bookmark Folder · Write

Creates a new Bookmark folder for the authenticated user.

Read only: no. Destructive: no.

Inputs:

- `id` (`string`, required): ID of the authenticated user who owns the new Bookmark folder.
- `name` (`string`, required): Name of the Bookmark folder (1-25 characters).

Example input: `{"id":"<id>","name":"<name>"}`

### `twittermcp_follow_list`

Follow List · Write

Causes the authenticated user to follow a specific List by its ID.

Read only: no. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `list_id` (`string`, required): No description.

Example input: `{"id":"<id>","list_id":"<list_id>"}`

### `twittermcp_go_live_scheduled_broadcast`

Go Live Scheduled Broadcast · Write

Publishes a schedule that was created or updated with `manual_publish: true`. Without that flag the coordinator auto-publishes at start and this call is rejected.

Read only: no. Destructive: no.

Inputs:

- `id` (`string`, required): No description.

Example input: `{"id":"<id>"}`

### `twittermcp_mark_chat_conversation_read`

Mark Chat Conversation Read · Write

Marks a specific Chat conversation as read on behalf of the authenticated user. For 1:1 conversations, provide the recipient's user ID; the server constructs the canonical conversation ID from the authenticated user and recipient. Without action_signatures the conversation is marked read up to its newest event and the read receipt is unsigned. With one action signature over a MarkConversationReadEvent, the server sends that signed read receipt, marking the conversation read up to the event it names.

Read only: no. Destructive: no.

Inputs:

- `id` (`string`, required): The ID of the resource this call applies to.
- `action_signatures` (`array`, optional): Signature over the read receipt (a MarkConversationReadEvent). Omit to send it unsigned.

Example input: `{"id":"<id>"}`

### `twittermcp_mark_chat_conversation_unread`

Mark Chat Conversation Unread · Write

Marks a specific Chat conversation as unread on behalf of the authenticated user. For 1:1 conversations, provide the recipient's user ID; the server constructs the canonical conversation ID from the authenticated user and recipient.

Read only: no. Destructive: no.

Inputs:

- `id` (`string`, required): No description.

Example input: `{"id":"<id>"}`

### `twittermcp_pin_list`

Pin List · Write

Causes the authenticated user to pin a specific List by its ID.

Read only: no. Destructive: no.

Inputs:

- `id` (`string`, required): The ID of the authenticated user pinning the List.
- `list_id` (`string`, required): The ID of the List to pin.

Example input: `{"id":"<id>","list_id":"<list_id>"}`

### `twittermcp_respond_to_scheduled_call`

Respond To Scheduled Call · Write

Accepts, declines or tentatively accepts an invitation to a scheduled call for the authenticated user. For a recurring call, scope and occurrence_start_time pick the occurrences the answer is for: all of them (the default), one, or one and every one after it.

Read only: no. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `response` (`string`, required): The answer to the invitation. One of: `accepted`, `declined`, `tentative`.
- `occurrence_start_time` (`string`, optional): Start of the occurrence that scope this or this_and_following refers to (RFC 3339).
- `scope` (`string`, optional): Which occurrences of a recurring call: all (the default without occurrence_start_time), this (the... One of: `all`, `this`, `this_and_following`.

Example input: `{"id":"<id>","response":"accepted"}`

### `twittermcp_schedule_call`

Schedule Call · Write

Puts an X call on the authenticated user's X Calls calendar, with them as its organizer, and invites people to it. The call exists right away: share its join_url, or put an agent in it at start time with POST /2/calls/:id/join. A recurrence (an RFC 5545 RRULE) repeats it. Invitees get an email unless notify_invitees is false.

Read only: no. Destructive: no.

Inputs:

- `start_time` (`string`, required): When the call starts (RFC 3339); not in the past.
- `description` (`string`, optional): What the call is about.
- `duration_minutes` (`integer`, optional): How long the call lasts, in minutes. Defaults to 30; at most 31 days.
- `invitee_ids` (`array`, optional): X user ids of the people to invite.
- `notify_invitees` (`boolean`, optional): Whether invitees get an email about the call. Defaults to true.
- `recurrence` (`string`, optional): RFC 5545 RRULE to repeat the call by, such as FREQ=WEEKLY;BYDAY=MO; the RRULE: prefix is optional.
- `time_zone` (`string`, optional): IANA time zone the recurrence follows, such as America/Los_Angeles.
- `title` (`string`, optional): Title invitees see.

Example input: `{"start_time":"<start_time>"}`

### `twittermcp_send_chat_message`

Send Chat Message · Write

Sends a message or reaction to a specific Chat conversation. Send `encoded_message_create_event`, an end-to-end encrypted event built with the Chat XDK. `content`, a plaintext message or reaction sent unencrypted, is only a fallback for a 1:1 conversation that X Chat can't encrypt because one of the two users has connected an enterprise app that reads their DMs; check that the recipient's `receives_your_chat` user field is `unencrypted` before using it. Otherwise a `content` send is refused, and retrying it won't help: HTTP 400 https://api.x.com/2/problems/encryption-required when the conversation can be encrypted or is a group (send `encoded_message_create_event` instead), 400 https://api.x.com/2/problems/xchat-setup-required when you haven't set up X Chat, 400 https://api.x.com/2/problems/recipient-xchat-setup-required when the recipient hasn't, and 403 https://api.x.com/2/problems/message-request-not-supported when it would be a message request. HTTP 503 https://api.x.com/2/problems/chat-permissions-unavailable means the check failed and nothing was sent; retry it. For 1:1 conversations, provide the recipient's user ID; the server constructs the canonical conversation ID from the authenticated user and recipient. A recipient who cannot be messaged (closed inbox, system/notification account, or a 1:1 block) returns HTTP 403 with type https://api.x.com/2/problems/recipient-not-messageable.

Read only: no. Destructive: no.

Inputs:

- `id` (`string`, required): The Chat conversation ID. For a 1:1 conversation, provide the recipient's user ID. Sending posts a real message from the authenticated account.
- `message_id` (`string`, required): Unique identifier for this message.
- `content` (`object`, optional): Plaintext message or reaction sent unencrypted. Only a fallback for 1:1 conversations that X Chat cannot encrypt; otherwise use encoded_message_create_event. Provide one of message, reaction_add or reaction_remove as a JSON object.
- `conversation_token` (`string`, optional): Optional conversation token.
- `encoded_message_create_event` (`string`, optional): Base64-encoded Thrift MessageCreateEvent containing encrypted message contents. Omit when sending...
- `encoded_message_event_signature` (`string`, optional): Base64-encoded Thrift MessageEventSignature for message verification.
- `xdk_version` (`string`, optional): Version of the Chat XDK that produced the payload.

Example input: `{"id":"<id>","message_id":"<message_id>"}`

### `twittermcp_send_chat_typing_indicator`

Send Chat Typing Indicator · Write

Sends a typing indicator to a specific Chat conversation on behalf of the authenticated user. For 1:1 conversations, provide the recipient's user ID; the server constructs the canonical conversation ID from the authenticated user and recipient.

Read only: no. Destructive: no.

Inputs:

- `id` (`string`, required): No description.

Example input: `{"id":"<id>"}`

### `twittermcp_update_lists`

Update Lists · Write

Updates the details of a specific List owned by the authenticated user by its ID.

Read only: no. Destructive: no.

Inputs:

- `id` (`string`, required): ID of the List to update. The List must be owned by the authenticated user.
- `description` (`string`, optional): New description for the List (up to 100 characters).
- `name` (`string`, optional): New name for the List (1-25 characters).
- `private` (`boolean`, optional): Whether the List is private.

Example input: `{"id":"<id>"}`

### `twittermcp_update_scheduled_broadcast`

Update Scheduled Broadcast · Write

Updates a scheduled broadcast. Path `:id` is the broadcast id; the body must include `scheduled_broadcast_id`. Re-send every field that should be kept. Passing a stream key as `source_id` is deprecated and stops working when the /2/users/:id/sources and /2/users/:id/broadcasts routes reach end of life on January 1, 2027; pass the source's `id` from GET /2/sources instead.

Read only: no. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `scheduled_broadcast_id` (`string`, required): Numeric scheduler id from create/list/get.
- `scheduled_end_ms` (`string`, required): End time, ms since Unix epoch (decimal string).
- `scheduled_start_ms` (`string`, required): Start time, ms since Unix epoch (decimal string).
- `available_for_replay` (`boolean`, optional): Enable replay.
- `chat_option` (`string`, optional): Who can chat (numeric string): `0` default, `1` chat off, `2` everyone, `3` verified accounts, `4...
- `description` (`string`, optional): Description.
- `is_locked` (`boolean`, optional): Lock the broadcast.
- `locale` (`string`, optional): Locale.
- `manual_publish` (`boolean`, optional): If true, do not auto-publish at start; call POST .../live when ready.
- `roll_forward` (`boolean`, optional): Deprecated: recurring schedules are being retired and `true` will be rejected.
- `source_id` (`string`, optional): Source to bind: a source's `id` from GET /2/sources. A stream key is also accepted but deprecated...
- `thumbnail_media_id` (`string`, optional): Pre-live slate media id (numeric string).
- `title` (`string`, optional): Title / status text.

Example input: `{"id":"<id>","scheduled_broadcast_id":"<scheduled_broadcast_id>","scheduled_end_ms":"<scheduled_end_ms>","scheduled_start_ms":"<scheduled_start_ms>"}`

### `twittermcp_update_scheduled_call`

Update Scheduled Call · Write

Moves, renames or re-invites a scheduled call the authenticated user organizes. Only the fields sent change. For a recurring call, scope and occurrence_start_time pick the occurrences: all of them (the default), one, or one and every one after it.

Read only: no. Destructive: no.

Inputs:

- `id` (`string`, required): No description.
- `description` (`string`, optional): What the call is about.
- `duration_minutes` (`integer`, optional): How long the call lasts, in minutes.
- `invitee_ids` (`array`, optional): Everyone to invite: replaces the invite list. At most 25 of them may be people not invited yet.
- `notify_invitees` (`boolean`, optional): Whether invitees get an email about the change. Defaults to true.
- `occurrence_start_time` (`string`, optional): Start of the occurrence that scope this or this_and_following refers to (RFC 3339).
- `recurrence` (`string`, optional): RFC 5545 RRULE to repeat the call by, such as FREQ=WEEKLY;BYDAY=MO.
- `scope` (`string`, optional): Which occurrences of a recurring call: all (the default without occurrence_start_time), this (the... One of: `all`, `this`, `this_and_following`.
- `start_time` (`string`, optional): When the call (or the chosen occurrence) starts now (RFC 3339).
- `time_zone` (`string`, optional): IANA time zone the recurrence follows.
- `title` (`string`, optional): Title invitees see.

Example input: `{"id":"<id>"}`

### `twittermcp_update_source`

Update Source · Write

Renames one of the authenticated user's stream sources.

Read only: no. Destructive: no.

Inputs:

- `id` (`string`, required): Source id, from GET /2/sources.
- `name` (`string`, required): New label for the source.

Example input: `{"id":"<id>","name":"<name>"}`

### `twittermcp_archive_chat_conversation`

Archive Chat Conversation · Destructive

Archives a Chat conversation for the authenticated user only. Archiving an archived conversation changes nothing. Works for group and 1:1 conversations. For 1:1 conversations, provide the recipient's user ID; the server constructs the canonical conversation ID from the authenticated user and recipient.

Read only: no. Destructive: yes.

Inputs:

- `id` (`string`, required): The ID of the conversation: a group ID starting with `g`, the other user's ID for a 1:1 conversat...
- `action_signatures` (`array`, optional): Signatures for this action, forwarded in the order they are sent.

Example input: `{"id":"<id>"}`

### `twittermcp_cancel_scheduled_call`

Cancel Scheduled Call · Destructive

Cancels a scheduled call the authenticated user organizes, and takes it off invitees' calendars. For a recurring call, scope and occurrence_start_time pick the occurrences: all of them (the default), one, or one and every one after it. Cancelling what is already cancelled succeeds.

Read only: no. Destructive: yes.

Inputs:

- `id` (`string`, required): The ID of the scheduled call to cancel. The authenticated user must be the organizer.
- `notify_invitees` (`boolean`, optional): Whether invitees get an email about it. Defaults to true.
- `occurrence_start_time` (`string`, optional): Start of the occurrence that scope this or this_and_following refers to (RFC 3339).
- `scope` (`string`, optional): Which occurrences: all (the default without occurrence_start_time), this (the default with it), o... One of: `all`, `this`, `this_and_following`.

Example input: `{"id":"<id>"}`

### `twittermcp_delete_scheduled_broadcast`

Delete Scheduled Broadcast · Destructive

Deletes a scheduled broadcast by its alphanumeric broadcast id.

Read only: no. Destructive: yes.

Inputs:

- `id` (`string`, required): The alphanumeric ID of the scheduled broadcast to delete. This permanently deletes the broadcast.
- `roll_forward` (`boolean`, optional): Deprecated: recurring schedules are being retired and `true` will be rejected.

Example input: `{"id":"<id>"}`

### `twittermcp_delete_source`

Delete Source · Destructive

Deletes one of the authenticated user's stream sources.

Read only: no. Destructive: yes.

Inputs:

- `id` (`string`, required): Source id, from GET /2/sources.

Example input: `{"id":"<id>"}`

### `twittermcp_delete_users_bookmark`

Delete Users Bookmark · Destructive

Removes a Post from the authenticated user's Bookmarks by its ID.

Read only: no. Destructive: yes.

Inputs:

- `id` (`string`, required): No description.
- `tweet_id` (`string`, required): No description.

Example input: `{"id":"<id>","tweet_id":"<tweet_id>"}`

### `twittermcp_mute_broadcast_chat_user`

Mute Broadcast Chat User · Destructive

Prevents a user from posting further messages in a running broadcast chat. When `end_at_ms` is provided, the mute expires at that time. The authenticated user must be the broadcast host or a moderator.

Read only: no. Destructive: yes.

Inputs:

- `id` (`string`, required): The ID of the broadcast whose chat the user is muted in.
- `user_id` (`string`, required): The user to mute.
- `end_at_ms` (`string`, optional): The Unix timestamp in milliseconds when the mute expires. Omit this field to mute indefinitely.
- `message_id` (`string`, optional): A chat message to remove while muting the user.

Example input: `{"id":"<id>","user_id":"<user_id>"}`

### `twittermcp_remove_chat_moderator`

Remove Chat Moderator · Destructive

Removes a moderator from the authenticated broadcaster's persistent list and returns the updated moderator user IDs.

Read only: no. Destructive: yes.

Inputs:

- `user_id` (`string`, required): A 64-bit signed integer.

Example input: `{"user_id":"<user_id>"}`

### `twittermcp_remove_lists_member_by_user_id`

Remove Lists Member By User Id · Destructive

Removes a User from a List by their ID.

Read only: no. Destructive: yes.

Inputs:

- `id` (`string`, required): No description.
- `user_id` (`string`, required): No description.

Example input: `{"id":"<id>","user_id":"<user_id>"}`

### `twittermcp_unarchive_chat_conversation`

Unarchive Chat Conversation · Destructive

Unarchives a Chat conversation for the authenticated user only. Unarchiving a conversation that is not archived changes nothing. Works for group and 1:1 conversations. For 1:1 conversations, provide the recipient's user ID; the server constructs the canonical conversation ID from the authenticated user and recipient.

Read only: no. Destructive: yes.

Inputs:

- `id` (`string`, required): The ID of the conversation: a group ID starting with `g`, the other user's ID for a 1:1 conversat...

Example input: `{"id":"<id>"}`

### `twittermcp_unfollow_list`

Unfollow List · Destructive

Causes the authenticated user to unfollow a List by its ID.

Read only: no. Destructive: yes.

Inputs:

- `id` (`string`, required): The ID of the authenticated user who will unfollow the List.
- `list_id` (`string`, required): The ID of the List to unfollow.

Example input: `{"id":"<id>","list_id":"<list_id>"}`

### `twittermcp_unmute_broadcast_chat_user`

Unmute Broadcast Chat User · Destructive

Allows a muted user to post messages in a running broadcast chat again. The authenticated user must be the broadcast host or a moderator.

Read only: no. Destructive: yes.

Inputs:

- `id` (`string`, required): No description.
- `user_id` (`string`, required): A 64-bit signed integer.

Example input: `{"id":"<id>","user_id":"<user_id>"}`

### `twittermcp_unpin_list`

Unpin List · Destructive

Causes the authenticated user to unpin a List by its ID.

Read only: no. Destructive: yes.

Inputs:

- `id` (`string`, required): No description.
- `list_id` (`string`, required): No description.

Example input: `{"id":"<id>","list_id":"<list_id>"}`

### `twittermcp_users_id_block`

Users Id Block · Destructive

Causes the source User to block the target User.

Read only: no. Destructive: yes.

Inputs:

- `id` (`string`, required): The ID of the resource this call applies to.
- `target_user_id` (`string`, required): The numeric ID of the target user.

Example input: `{"id":"<id>","target_user_id":"<target_user_id>"}`

### `twittermcp_users_id_unblock`

Users Id Unblock · Destructive

Causes the source User to unblock the target User.

Read only: no. Destructive: yes.

Inputs:

- `source_user_id` (`string`, required): The numeric ID of the source user (the account performing the action).
- `target_user_id` (`string`, required): The numeric ID of the target user.

Example input: `{"source_user_id":"<source_user_id>","target_user_id":"<target_user_id>"}`

## Related

Other Communication connectors ([all 77](/agentkit/connectors/?category=communication)):

- [Crisp](/agentkit/connectors/crisp/): Scalekit connector, API key, 50 tools
- [Gmail](/agentkit/connectors/gmail/): Scalekit connector, OAuth, 48 tools
- [Google Calendar](/agentkit/connectors/googlecalendar/): Scalekit connector, OAuth, 30 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
