X (Twitter) MCP server: let Claude or any agent post tweets and threads

Add https://postwire.io/api/mcp to Claude, ChatGPT, Cursor or any MCP client as a remote MCP server, connect your X account once on X's own screen, and the agent posts a tweet, a thread of up to 26 posts, up to 4 images or a video with post_to_social, or queues it with schedule_post. You need no X developer account and no X API key: PostWire posts through the official X API and pays X for each call. X is part of PostWire's paid plans, from $9 a month with 30 X credits included every month: 1 X credit is 1 plain post, a post with a link uses 10, and each image or video adds 1.

X bills every post made through its API, so the question with any X MCP server is what a post will cost you. Here the agent can ask before it posts: get_x_credits tells it how many credits a tweet or a whole thread would use, and a post the account cannot cover is not sent.

Updated . Written from PostWire's own code; vendor prices read on Oct 14, 2026. Live networks: TikTok, Instagram, YouTube, LinkedIn (personal profiles), Facebook Pages, Bluesky, Mastodon, Telegram, Discord, and X on paid plans.

Set it up and post, step by step

  1. Add PostWire's MCP server to your agent

    In Claude, open PostWire in the connector directory and press Connect. Anywhere else, add the remote server https://postwire.io/api/mcp (Streamable HTTP; OAuth sign-in or an API key) — in Claude Code: claude mcp add --transport http postwire https://postwire.io/api/mcp. Cursor, VS Code, Windsurf, Codex and Gemini CLI configs: MCP client configs.

  2. Sign in with your email

    The first time the agent uses a PostWire tool, a sign-in window asks for your email and a 6-digit code; that also creates a free PostWire account if you have none. No password and no card. Agents that cannot do OAuth send an API key instead (dashboard → API & MCP → Copy key).

  3. Connect your X account

    Ask "connect my X account". create_connect_link gives you a one-hour link that opens X's own sign-in. X shows "Sensitive permissions requested · This app is not affiliated with X", as it does for every outside app: tick I trust this app, then Authorize app. The permission covers posting and uploading media; PostWire never likes, follows, replies to other people or sends messages. X needs a paid PostWire plan, and reading your @handle right after connecting uses 1 credit.

  4. Let PostWire write the post

    "Write an X post about our new CSV import." generate_posts returns a draft and publishes nothing. X's draft is one post within 280 characters as X counts them, with a first line that stands alone as the hook, one to three short lines of substance, no hashtags and, by default, no link. It writes a thread only when you ask for one.

  5. Ask what it will use

    get_x_credits with the post's text (and its thread) returns how many credits the post or the whole chain would use, what the plan has left this month and how many X posts the account has made today. An agent running on its own can check before every post.

  6. Publish, or schedule it

    After you approve, the agent calls post_to_social (or schedule_post with a run_at time up to 365 days ahead, or "next_slot"). thread holds the posts after the first, and reply is one more post under the last one, the usual place for the link:

    {
      "name": "post_to_social",
      "arguments": {
        "platforms": ["x"],
        "per_platform": {
          "x": {
            "text": "We rebuilt our CSV import three times before it worked. Here is what each attempt got wrong.",
            "thread": [
              "Attempt 1 trusted the header row. Half the files we got had none.",
              "Attempt 2 guessed the columns. It guessed dates as phone numbers.",
              "Attempt 3 shows you the first five rows and asks. That one shipped."
            ],
            "reply": "The full write-up: https://example.com/csv-import"
          }
        }
      }
    }
  7. Open the post

    The result carries the post's link (https://x.com/i/web/status/…) and, for a thread, thread.tweets with every post's id, thread_url and thread.status. get_post_status returns them again later; list_scheduled_posts shows what is queued and cancel_scheduled_post removes one before it goes out.

An image or a video from your phone or laptop gets there through create_upload_link: a 24-hour page where you pick the file, then get_uploaded_file returns its media_url. The same post from your own code: POST /api/post with {"platforms": ["x"], "text": "…"} and your API key, or the PostWire node in n8n. Prefer to set it up by hand first? Open the dashboard, connect the account under Accounts and copy your key under API & MCP.

X MCP servers for posting, side by side

Each vendor's endpoint, sign-in and what a post to X costs, read on its own X MCP or plans page on Oct 14, 2026.

ServerEndpointSign-inWhat posting to X costsThreadsWrites the post
PostWirehttps://postwire.io/api/mcpOAuth 2.1 or API keyIn the plan: 30 X credits a month on Starter ($9/mo), 150 on Pro ($29/mo); a plain post is 1 creditYes — up to 26 posts, plus a reply for the linkYes — generate_posts writes the X post and each other network's from one idea
Upload-Postmcp.upload-post.com/mcpAPI key headerAny plan, the free tier included (10 uploads a month); Basic is $24/moYesNot listed
Blotatomcp.blotato.com/mcpOAuth (Claude) or API key header$29/mo flat — 20 connected accounts; API and MCP access is not part of its 7-day trialYesNot listed
Zerniomcp.zernio.com/mcpOAuth or API keyX's per-call rates passed through: $0.015 a post, $0.20 a post with a link; a payment method on file before the first X accountYesNot listed

Checked on Oct 14, 2026 (2026-10-14) on each vendor's own pricing or docs page, linked in the first column and below. Monthly billing in USD unless noted. "Not listed" means we could not find it on their page, not that it is missing.

Where PostWire is ahead

  • The post is written for X, and so is every other network's version: generate_posts turns one idea into a tweet with a hook that stands alone, a LinkedIn post and a Bluesky post in one call.
  • The agent knows what a post uses before it posts: get_x_credits with the text returns the credits for the tweet or the whole thread, and a post the account cannot cover is not sent. Zernio bills each X call to the payment method on file at X's rate, $0.015 a post and $0.20 a post with a link.
  • X and nine more networks for $9 a month: TikTok, Instagram, YouTube, LinkedIn, Facebook Pages, Bluesky, Mastodon, Telegram and Discord in the same call. Blotato starts at $29 a month and Upload-Post's Basic plan is $24.
  • A thread is all or nothing on credits: the whole chain is set aside before the first post, and if X refuses a later post PostWire finishes the thread by itself, without posting anything twice.
  • No password and no key to start: the sign-in window asks for your email and a 6-digit code.
  • Approvals on every paid plan (from $9 a month): a post can wait until a person approves it, which suits an agent that posts to X on its own.
Sources, all read on Oct 14, 2026:
  • Upload-Post — X (Twitter) MCP server (endpoint, API key header, upload_text "Post a tweet or thread", "works with any Upload-Post plan, including the free tier"): www.upload-post.com/mcp/x/
  • Upload-Post plans (llms-full.txt: Free 10 uploads a month; Basic $24 a month, 5 profiles): www.upload-post.com/llms-full.txt
  • Blotato — X MCP server (endpoint, OAuth for Claude and an API key header elsewhere, threads, $29/mo flat for 20 connected accounts, API and MCP access not part of the 7-day trial): www.blotato.com/mcp/x
  • Zernio — X MCP server (endpoint, sign-in or API key, threads and polls, "a post is $0.015, a post with a link $0.20", "connecting an X account needs a payment method on file, even on the free tier"): zernio.com/x-mcp

What a post to X uses

X charges for every post made through its API. PostWire pays X and counts your posts in X credits, with one rule: 1 X credit is 1 plain post, a post with a link uses 10, and each image or video adds 1. Each post of a thread, and the reply under it, is a post by the same rule.

What the agent postsX credits
A plain tweet1
A tweet with one image2
A tweet with 4 images5
A tweet with a video2
A tweet with a link in its text10
A thread of 4 plain posts4
A thread of 4 plain posts, with the link in a reply under it14
  • Included every month: 30 X credits on Starter ($9 a month) and 150 on Pro ($29). Top-up credits are there for a busy month (80 credits for $5, 340 credits for $20) and do not expire.
  • A post the account cannot cover is not sent to X, and its result says how many credits it needed. There is no bill after the fact.
  • X posts a day: 5 on Starter and 20 on Pro.

Source: PostWire's X credit table, read Oct 14, 2026. X is on paid plans; the free plan and a trial do not include it.

X's rules the agent works within

  • 280 characters as X counts them: a link counts 23 whatever its length, and an emoji counts 2. PostWire measures the same way before anything is sent.
  • A single post that runs long is shortened at the end of a sentence; a post inside a thread that runs long is refused before anything goes out, because a cut tweet in the middle of a thread reads as a mistake.
  • Up to 4 images, or one video: images of up to 5 MB each, a video of up to 512 MB. In a thread, the media stays on the first post.
  • Threads of up to 26 posts: the first post plus 25 more, each a reply to the one before. The credits for the whole thread are set aside before the first post goes out, so a thread never stops halfway for lack of credits.
  • If X refuses a later post of a thread, the earlier ones stay published, the result says pending, and PostWire posts the rest by itself from where it stopped. No post is sent twice, and credits for a post that never went out come back.
  • X refuses a duplicate of a recent post from the same account; the result says so in those words.

Source: PostWire's X publisher, read Oct 14, 2026.

What it does not do

PostWire writes, publishes and schedules your own posts on X. It does not read your timeline or search X, it does not like, repost, follow or send direct messages, it does not post polls, and it does not report an X post's views or likes. X is on paid plans; the free plan publishes to the other nine networks.

Questions people ask

Is there an MCP server that posts to X (Twitter)?

Yes. PostWire's hosted MCP server (https://postwire.io/api/mcp) posts tweets, threads, images and video to your X account from Claude, ChatGPT, Cursor or any MCP client, and can schedule them. X is part of PostWire's paid plans, from $9 a month.

Do I need an X developer account or an X API key?

No. You connect your X account on X's own sign-in screen and PostWire posts through the official X API with its own developer app. PostWire pays X for each call and counts your posts in X credits.

How much does it cost to post to X through the MCP server?

X credits come with the plan: 30 a month on Starter ($9 a month) and 150 on Pro ($29). 1 X credit is 1 plain post, a post with a link uses 10, and each image or video adds 1. Top-up credits (80 credits for $5, 340 credits for $20) do not expire.

Can the agent post a thread?

Yes. Put the posts after the first in thread (up to 25), each within 280 characters as X counts them, and an optional reply under the last one for the link. The credits for the whole thread are set aside before the first post goes out.

Why does a post with a link use more credits?

X bills a post that contains a link at a higher rate than a plain post, so it uses 10 credits instead of 1. That is why generate_posts writes X posts without a link unless the idea is the link, and why the link usually goes in a reply under the post.

Does it work with Claude and Claude Code?

Yes. In Claude, press Connect on PostWire in the connector directory and sign in with your email. Claude Code adds it with: claude mcp add --transport http postwire https://postwire.io/api/mcp. Then ask it to connect your X account.

Can the agent schedule tweets?

Yes. schedule_post takes a run_at time up to 365 days ahead, or "next_slot" for your next free queue slot. The post is published by PostWire at its time, with the agent closed.