Bluesky MCP server: let Claude or any agent post to your Bluesky account

Add https://postwire.io/api/mcp to Claude, ChatGPT, Cursor or any MCP client as a remote MCP server, paste your Bluesky handle and an app password once, and the agent publishes a post of up to 300 characters, with up to 4 images, using post_to_social, or queues it with schedule_post. It takes about a minute and has no sign-in screen: an app password is a separate password you create in Bluesky's settings and can delete at any time, so your real password never leaves Bluesky. The free plan includes Bluesky and the MCP server: 1 business, 20 posts a month, 5 AI drafts a day, 2 networks per post, no card.

Links, @mentions and #hashtags in the post are clickable, every image carries its own alt text, and generate_posts writes the Bluesky version the way people there write: conversational, not a brand announcement.

Updated . Written from PostWire's own code; vendor prices read on Oct 10, 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. Create an app password in Bluesky

    In Bluesky, open Settings → Privacy and security → App passwords, add one and copy it. It is not your account password, and deleting it in Bluesky disconnects PostWire.

  4. Connect Bluesky

    Ask "connect my Bluesky". create_connect_link gives you a one-hour link; choose Bluesky there and paste your full handle (name.bsky.social) and the app password. PostWire signs in to Bluesky with them before saving, so a wrong handle is refused on that page — and if you pasted your account password and Bluesky asked for an email code, the page tells you to use an app password instead.

  5. Let PostWire write the post

    "Write a Bluesky post about our open-source release, and the LinkedIn post for it." generate_posts returns one draft per network and publishes nothing. Bluesky's draft stays within 300 characters, sounds like a person taking part in the conversation, carries one or two specific hashtags and no hard sell; LinkedIn's is a longer first-person post.

  6. Publish, or schedule it

    After you approve, the agent calls post_to_social (or schedule_post with a run_at time, or "next_slot"). One image goes in photo_url; up to four go in media, each with its own alt:

    {
      "name": "post_to_social",
      "arguments": {
        "platforms": ["bluesky"],
        "text": "we open-sourced the scheduler today. issues and rude feedback welcome https://example.com/repo #opensource",
        "media": [
          { "url": "https://postwire.io/m/…/calendar.jpg", "alt": "A weekly calendar with six posts queued" },
          { "url": "https://postwire.io/m/…/terminal.jpg", "alt": "Terminal output of the install command" }
        ]
      }
    }
  7. Open the post, and see how it did

    The result carries the post's link (https://bsky.app/profile/…/post/…). get_post_status returns it again later, and get_post_performance ranks your Bluesky posts against your own median by likes, reposts and replies, the numbers Bluesky reports. list_scheduled_posts shows what is queued and cancel_scheduled_post removes one before it goes out.

An image 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": ["bluesky"], "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.

Bluesky MCP servers for posting, side by side

Each vendor's endpoint, sign-in and price, read on its own Bluesky MCP or plans page on Oct 10, 2026.

ServerEndpointSign-inFree to startCheapest paid planWrites the post
PostWirehttps://postwire.io/api/mcpOAuth 2.1 or API keyFree plan: 1 business, 20 posts a month, 5 AI drafts a day, 2 networks per post, no card$9/mo — 3 businesses, every network in each postYes — generate_posts writes the Bluesky post and each other network's from one idea
Upload-Postmcp.upload-post.com/mcpOAuth or API keyFree plan: 2 profiles, 10 uploads a month$24/mo — 5 profilesNot listed
Blotatomcp.blotato.com/mcpOAuth (Claude) or API key headerNo — its 7-day trial excludes API and MCP access$29/mo flatNot listed

Checked on Oct 10, 2026 (2026-10-10) 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 Bluesky, and so is every other network's version: generate_posts turns one idea into a conversational Bluesky post, a LinkedIn post and a Mastodon post in one call.
  • 20 posts a month on the free plan, without a card. Upload-Post's free plan has 10 uploads a month; Blotato's MCP access is not part of its 7-day trial.
  • No password and no key to start: the sign-in window asks for your email and a 6-digit code, and that creates the free account too.
  • The app password is tested before it is saved, and again later: a wrong handle or a deleted app password is caught when you connect, not when a scheduled post was due.
  • Bluesky plus nine more networks in the same call: TikTok, Instagram, YouTube, LinkedIn, Facebook Pages, Mastodon, Telegram, Discord, and X on paid plans.
Sources, all read on Oct 10, 2026:

Bluesky's rules the agent works within

  • 300 characters per post. generate_posts writes within that.
  • Clickable links, mentions and hashtags: on Bluesky a link is only clickable when the post marks where it starts and ends. PostWire marks every link, @mention and #hashtag, so none of them arrives as dead text.
  • Up to 4 images, each with alt text, shown at their own proportions. A fifth image is refused with a message that says so.
  • 1 MB per image: Bluesky takes images up to 1,000,000 bytes. A larger one is refused with its size and the fix (export it as a JPEG under 1 MB), and no Bluesky post is created.
  • Images, not video: PostWire posts text and images to Bluesky. Video goes out through the networks that take it, such as TikTok, YouTube or Telegram.
  • Dead app passwords are noticed: PostWire's connection check signs in with the stored app password; if you deleted it in Bluesky, the dashboard asks you to reconnect before a scheduled post is due.

Source: PostWire's Bluesky publisher, read Oct 10, 2026. More on the API itself: Does Bluesky have an API?

What it does not do

PostWire publishes and schedules your own posts on Bluesky. It does not read your timeline or notifications, reply, like, repost, follow or send direct messages, and it does not post video to Bluesky.

Questions people ask

Is there an MCP server that posts to Bluesky?

Yes. PostWire's hosted MCP server (https://postwire.io/api/mcp) publishes text and image posts to your Bluesky account from Claude, ChatGPT, Cursor or any MCP client, and can schedule them. It is in Claude's connector directory.

Do I give it my Bluesky password?

No. You create an app password in Bluesky (Settings → Privacy and security → App passwords) and paste that with your handle. It is separate from your account password and you can delete it in Bluesky at any time, which disconnects PostWire.

Do I need to write AT Protocol code or run a server?

No. The MCP server is hosted, and PostWire builds the post record for you, including the markers that make links, mentions and hashtags clickable.

Can it post images with alt text?

Yes. Up to 4 images per post, each with its own alt text, passed in media as { url, alt }. Each image can be up to 1 MB, Bluesky's limit; a larger one is refused with a clear message that gives its size.

Can it post video or threads to Bluesky?

PostWire posts single text and image posts to Bluesky, not video or threads. Video goes out through TikTok, YouTube, Instagram, Facebook Pages and Telegram.

Can the agent schedule Bluesky posts?

Yes. schedule_post takes a run_at time up to 365 days ahead, or "next_slot" for your next free queue slot. The free plan keeps 3 posts waiting in the queue at once.

How much does it cost?

The free plan includes Bluesky and the MCP server: 1 business, 20 posts a month, 5 AI drafts a day, 2 networks per post, no card. Starter is $9 a month for 3 businesses and Pro $29 for 10, with every network in each post; paid plans have a 14-day refund.