Twitter MCP server for AI agents and assistants

Securely connect your AI agents and chatbots (Claude, ChatGPT, Cursor, etc) with Twitter MCP or direct API to post tweets, read timelines, manage DMs, and analyze user engagement through natural language.

Twitter logoTwitter
Oauth2

Twitter is a social media platform for sharing real-time updates, conversations, and news. Stay connected, informed, and engaged with communities worldwide.

78 Tools

Try Twitter now

Type what you want done — sign in and watch it run live in the Tool Router playground.

TOOL ROUTER PLAYGROUND
Twitter
Try asking
TOOLS

Supported Tools

Every Twitter action and event your agent gets out of the box.

Add a list member

Adds a user to a specified Twitter List; the list must be owned by the authenticated user.

Add post to bookmarks

Adds a specified, existing, and accessible Tweet to a user's bookmarks, with success indicated by the 'bookmarked' field in the response.

Append Media Upload

Append data chunk to an ongoing media upload session on X/Twitter.

Get bookmarks by user

Retrieves Tweets bookmarked by the authenticated user, where the provided User ID must match the authenticated user's ID.

Create activity subscription

Tool to create a subscription for an X activity event.

Create compliance job

Creates a new compliance job to check the status of Tweet or user IDs; upload IDs as a plain text file (one ID per line) to the `upload_url` received in the response.

Create group DM conversation

Creates a new group Direct Message (DM) conversation on Twitter.

Create a list

Creates a new, empty List on X (formerly Twitter), for which the provided name must be unique for the authenticated user; accounts are added separately.

Create a post

Creates a Tweet on Twitter; `text` is required unless `card_uri`, `media_media_ids`, `poll_options`, or `quote_tweet_id` is provided.

Delete direct message

Permanently deletes a specific Twitter Direct Message (DM) event using its `event_id` if the authenticated user sent it; this action is irreversible and does not delete entire conversations.

Delete list

Permanently deletes a specified Twitter List using its ID, which must be owned by the authenticated user; this action is irreversible and the list must already exist.

Get followers by user id

Retrieves a list of users who follow a specified public Twitter user ID.

Get following by user ID

Retrieves users followed by a specific Twitter user, allowing pagination and customization of returned user and tweet data fields via expansions.

Follow a list

Allows the authenticated user (`id`) to follow a specific Twitter List (`list_id`) they are permitted to access, subscribing them to the list's timeline; this does not automatically follow individual list members.

Follow a user

Allows an authenticated user (path `id`) to follow another user (`target_user_id`), which results in a pending request if the target user's tweets are protected.

Search full archive of tweets

Searches the full archive of public Tweets from March 2006 onwards; use 'start_time' and 'end_time' together for a defined time window.

Get users blocked by user ID

Retrieves the authenticated user's own block list.

Retrieve compliance job by id

Retrieves status, download/upload URLs, and other details for an existing Twitter compliance job specified by its unique ID.

Retrieve compliance jobs

Returns a list of recent compliance jobs, filtered by type (tweets or users) and optionally by status.

Get DM events for a DM conversation

Fetches Direct Message (DM) events for a one-on-one conversation with a specified participant ID, ordered chronologically newest to oldest; does not support group DMs.

Get DM events by ID

Fetches a specific Direct Message (DM) event by its unique ID, allowing optional expansion of related data like users or tweets; ensure the `event_id` refers to an existing DM event accessible to the authenticated user.

Lookup list by ID

Returns metadata for a specific Twitter List, identified by its ID; does not return list members but can expand the owner's User object via the `expansions` parameter.

Get list followers

Fetches a list of users who follow a specific Twitter List, identified by its ID; ensure the authenticated user has access if the list is private.

Fetch list members by id

Fetches members of a specific Twitter List, identified by its unique ID.

Get Media Upload Status

Get the processing status of uploaded media (videos/GIFs) on X/Twitter.

Get muted users

Returns user objects muted by the X user identified by the `id` path parameter.

Fetch OpenAPI specification

Fetches the OpenAPI specification (JSON) for Twitter's API v2, used to programmatically understand the API's structure for developing client libraries or tools.

Get Post analytics

Tool to retrieve analytics data for specified Posts within a defined time range.

Get post retweeters

Retrieves users who publicly retweeted a specified public Post ID, excluding Quote Tweets and retweets from private accounts.

Retrieve retweets of a post

Retrieves Tweets that Retweeted a specified public or authenticated-user-accessible Tweet ID, optionally customizing the response with fields and expansions.

Fetch tweet usage data

Fetches Tweet usage statistics for a Project (e.

Get recent direct message events

Returns recent Direct Message events for the authenticated user, such as new messages or changes in conversation participants.

Look up space by ID

Retrieves details for a Twitter Space by its ID, allowing for customization and expansion of related data, provided the Space ID is valid and accessible.

Retrieve posts from a space

Retrieves Tweets that were shared/posted during a Twitter Space broadcast.

Get spaces by creator IDs

Retrieves Twitter Spaces created by a list of specified User IDs, with options to customize returned data fields.

Get space information by IDs

Fetches detailed information for one or more Twitter Spaces (live, scheduled, or ended) by their unique IDs; at least one Space ID must be provided.

Fetch space ticket buyers list

Retrieves a list of users who purchased tickets for a specific, valid, and ticketed Twitter Space.

Look up user by ID

Retrieves detailed public information for a Twitter user by their ID, optionally expanding related data (e.

Get user's followed lists

Returns metadata (not Tweets) for lists a specific Twitter user follows, optionally including expanded owner details.

Get a user's list memberships

Retrieves all Twitter Lists a specified user is a member of, including public Lists and private Lists the authenticated user is authorized to view.

Get a user's owned lists

Call this action to retrieve Lists created (owned) by a specific Twitter user, not Lists they follow or are subscribed to.

Get a user's pinned lists

Retrieves the Lists a specific, existing Twitter user has pinned to their profile to highlight them.

Look up users by IDs

Retrieves detailed information for specified X (formerly Twitter) user IDs, optionally customizing returned fields and expanding related entities.

Set reply visibility

Hides or unhides an existing reply Tweet.

Initialize Media Upload

Initialize a media upload session for X/Twitter.

List post likers

Retrieves users who have liked the Post (Tweet) identified by the provided ID.

List posts timeline by list ID

Fetches the most recent Tweets posted by members of a specified Twitter List.

Mute user by ID

Mutes a target user on behalf of an authenticated user, preventing the target's Tweets and Retweets from appearing in the authenticated user's home timeline without notifying the target.

Pin a list

Pins a specified List to the authenticated user's profile, provided the List exists, the user has access rights, and the pin limit (typically 5 Lists) is not exceeded.

Delete tweet

Irreversibly deletes a specific Tweet by its ID; the Tweet may persist in third-party caches after deletion.

Look up post by id

Fetches comprehensive details for a single Tweet by its unique ID, provided the Tweet exists and is accessible.

Get tweets by IDs

Retrieves detailed information for one or more Posts (Tweets) identified by their unique IDs, allowing selection of specific fields and expansions.

Search recent tweets

Searches Tweets from the last 7 days matching a query (using X's search syntax), ideal for real-time analysis, trend monitoring, or retrieving posts from specific users (e.

Remove a list member

Removes a user from a Twitter List; the response `is_member` field will be `false` if removal was successful or the user was not a member, and the updated list of members is not returned.

Remove a bookmarked post

Removes a Tweet, specified by `tweet_id`, from the authenticated user's bookmarks; the Tweet must have been previously bookmarked by the user for the action to have an effect.

Retrieve DM conversation events

Retrieves Direct Message (DM) events for a specific conversation ID on Twitter, useful for analyzing messages and participant activities.

Retrieve posts that quote a post

Retrieves Tweets that quote a specified Tweet, requiring a valid Tweet ID.

Retrieve liked tweets by user ID

Retrieves Tweets liked by a specified Twitter user, provided their liked tweets are public or accessible.

Retweet post

Retweets a Tweet for the authenticated user.

Get full archive search counts

Returns a count of Tweets from the full archive that match a specified query, aggregated by day, hour, or minute; `start_time` must be before `end_time` if both are provided, and `since_id`/`until_id` cannot be used with `start_time`/`end_time`.

Fetch recent tweet counts

Retrieves the count of Tweets matching a specified search query within the last 7 days, aggregated by 'minute', 'hour', or 'day'.

Search for spaces

Searches for Twitter Spaces by a textual query, optionally filtering by state (live, scheduled, all) to discover audio conversations.

Send a new message to a user

Sends a new Direct Message with text and/or media (media_id for attachments must be pre-uploaded) to a specified Twitter user; this creates a new DM and does not modify existing messages.

Send a new message to a DM conversation

Sends a message, with optional text and/or media attachments (using pre-uploaded `media_id`s), to a specified Twitter Direct Message conversation.

Get tweets label stream

Stream real-time Tweet label events (apply/remove).

Unfollow a list

Enables a user (via `id`) to unfollow a specific Twitter List (via `list_id`), which removes its tweets from their timeline and stops related notifications; the action reports `following: false` on success, even if the user was not initially following the list.

Unfollow user

Allows the authenticated user to unfollow an existing Twitter user (`target_user_id`), which removes the follow relationship.

Unlike post

Allows an authenticated user (`id`) to remove their like from a specific post (`tweet_id`); the action is idempotent and completes successfully even if the post was not liked.

Unmute a user by user ID

Unmutes a target user for the authenticated user, allowing them to see Tweets and notifications from the target user again.

Unpin a list

Unpins a List (specified by list_id) from the authenticated user's profile.

Unretweet post

Removes a user's retweet of a specified Post, if the user had previously retweeted it.

Update list attributes

Updates an existing Twitter List's name, description, or privacy status, requiring the List ID and at least one mutable property.

Upload Media

Upload media (images only) to X/Twitter using the v2 API.

Get user reverse chronological timeline

Retrieves the home timeline (reverse chronological feed) for the authenticated Twitter user.

Like a tweet

Allows the authenticated user to like a specific, accessible Tweet, provided neither user has blocked the other and the authenticated user is not restricted from liking.

Look up user by username

Fetches public profile information for a valid and existing Twitter user by their username, optionally expanding related data like pinned Tweets; results may be limited for protected profiles not followed by the authenticated user.

Look up users by username

Retrieves detailed information for 1 to 100 Twitter users by their usernames (each 1-15 alphanumeric characters/underscores), allowing customizable user/tweet fields and expansion of related data like pinned tweets.

Get authenticated user

Returns profile information for the currently authenticated X user, customizable via request fields.

SETUP GUIDE

Connect Twitter MCP Tool with your Agent

1

Install Composio

typescript
npm install @composio/core ai @ai-sdk/mcp @ai-sdk/openai
Install the Composio SDK and your agent framework
2

Create a session with MCP enabled

typescript
import { Composio } from "@composio/core";

const composio = new Composio();
const { mcp } = await composio.create("your-user-id", {
  toolkits: ["twitter"],
  mcp: true,
});
Create a session scoped to Twitter and read its MCP URL and headers
3

Connect your agent to the MCP server

typescript
import { createMCPClient } from "@ai-sdk/mcp";
import { openai } from "@ai-sdk/openai";
import { generateText, stepCountIs } from "ai";

const client = await createMCPClient({
  transport: { type: "http", url: mcp.url, headers: mcp.headers },
});

const { text } = await generateText({
  model: openai("gpt-5.6-sol"),
  tools: await client.tools(),
  prompt: "Create a tweet announcing our new product launch",
  stopWhen: stepCountIs(10),
});

console.log(text);
await client.close();
Pass the session's MCP URL and headers to your agent and run a Twitter request
SETUP GUIDE

Connect Twitter API Tool with your Agent

1

Install Composio

typescript
npm install @composio/core @composio/openai openai
Install the Composio SDK, the OpenAI provider, and the OpenAI SDK
2

Create a Composio session

typescript
import OpenAI from "openai";
import { Composio } from "@composio/core";
import { OpenAIResponsesProvider } from "@composio/openai";

const composio = new Composio({ provider: new OpenAIResponsesProvider() });
const client = new OpenAI();

const session = await composio.create("your-user-id", { toolkits: ["twitter"] });
const tools = await session.tools();
Initialize Composio with the OpenAI Responses provider and create a session scoped to Twitter
3

Run Twitter tools with your agent

typescript
let response = await client.responses.create({
  model: "gpt-5.6-sol",
  tools,
  input: [{ role: "user", content: "Create a tweet announcing our new product launch" }],
});

while (response.output.some((o) => o.type === "function_call")) {
  const outputs = await composio.provider.handleToolCalls(session, response.output);
  response = await client.responses.create({
    model: "gpt-5.6-sol",
    tools,
    previous_response_id: response.id,
    input: outputs,
  });
}

console.log(response.output_text);
Send a request, execute the Twitter tool calls through the session, and print the final answer

Why Use Composio?

AI Native Twitter Integration

  • Supports both Twitter MCP and direct API based integrations
  • Structured, LLM-friendly schemas for reliable tool execution
  • Rich coverage for reading, writing, and querying your Twitter data

Managed Auth

  • Built-in OAuth handling with automatic token refresh and rotation
  • Central place to manage, scope, and revoke Twitter access
  • Per user and per environment credentials instead of hard-coded keys

Agent Optimized Design

  • Tools are tuned using real error and success rates to improve reliability over time
  • Comprehensive execution logs so you always know what ran, when, and on whose behalf

Enterprise Grade Security

  • Fine-grained RBAC so you control which agents and users can access Twitter
  • Scoped, least privilege access to Twitter resources
  • Full audit trail of agent actions to support review and compliance

Rolling this out across your team?

Give your team centralized access control across every framework with Composio’s MCP Gateway.

EXPLORE MCP GATEWAY
FAQ

Frequently asked questions

No. Composio provides a managed OAuth app for Twitter, so you sign in with your normal Twitter account and approve access. If you later want the consent screen to show your own company name, you can add your own Twitter OAuth app in the Composio dashboard, and every connection after that uses it.

Yes! Composio's Tool Router enables agents to use multiple toolkits. Learn more.

Yes. Composio is SOC 2 Type II compliant and is built to keep your Twitter connection and credentials secure. OAuth tokens and API keys are encrypted, and sensitive customer data is protected at rest and in transit.

Composio also undergoes independent security testing and continuously monitors its systems for security threats. You can review the latest reports and policies in the Composio Trust Center.

Composio maintains and updates all toolkit integrations automatically, so your agents always work with the latest API versions.

When you connect a Twitter account through Composio, every action runs under that account, so anything the agent creates, sends, or changes shows up in Twitter as done by you. Keep an approval step in your prompt for actions with side effects, such as sending or deleting, and have the agent draft first.

Exactly the ones Twitter lists on its consent screen when you connect. Review that screen before approving. If you connect a work account, your Twitter administrator may need to approve the app first, and you can revoke the access inside Twitter whenever you want.

Yes. Composio supports multiple connected accounts for the same app, and that works in Claude, ChatGPT, or any other assistant you connect through Composio. Give each Twitter connection a name such as work or personal, and the assistant uses the one you mention in the request. Each account keeps its own credentials and nothing is merged.

Composio refreshes Twitter tokens automatically, so day to day you do nothing. If you revoke access inside Twitter, or Twitter invalidates the session, the connection shows as expired in Composio and the agent stops acting on that account until you reconnect it, which is a single sign-in.

Composio's free Hobby plan includes 100,000 tool calls per month with no credit card, and up to 20,000 of those can run through Composio-managed apps like Twitter. Personal Twitter use rarely gets near that. Paid plans add higher limits and team features, and Twitter's own pricing is unaffected.

Built-in connectors usually give one AI access to a limited set of apps. Many people use Composio because it lets their AI connect to more apps than it normally supports, or connect to multiple accounts for the same app (e.g. connect Claude to multiple Twitter accounts).

With Composio, you connect Twitter once and then use it across different AI assistants without setting it up separately in each one. Connect your apps to Composio once, then connect Composio to whichever AI you use, whether that's Claude, ChatGPT, Hermes, or your own custom assistant.

Start with Twitter.It takes 30 seconds.

Managed auth, hosted MCP servers, and every Twitter tool your agent needs.Free to start.

Start building