Post or schedule to Bluesky
Text up to 300 characters with images, published now, at scheduledFor, or from the queue. Links, mentions, and hashtags become proper facets automatically.
Give your agent a Bluesky MCP server that speaks AT Protocol for it. Connect an account with an app password once, and any MCP client can post text and images with working links, mentions, and hashtags, now or on a schedule, from the conversation.
No credit card required

Paste this into your agent
What Your Agent Gets
Every PostZen API endpoint is an MCP tool. These are the ones that matter for Bluesky.

Text up to 300 characters with images, published now, at scheduledFor, or from the queue. Links, mentions, and hashtags become proper facets automatically.
One alt text per attached image, in order, so posts stay accessible without extra prompting.
Let PostZen build the link-card embed from the first URL, or turn it off for a plain post.
Likes, replies, reposts, and quotes per post and per day, plus follower counts. Bluesky counts no impressions, so none are invented.
The agent asks for an upload URL and sends the image. PostZen uploads the blob to your PDS and builds the embed.
Every target reports status, the live post URL, and any error. Scheduled posts can be changed until they go out.
Example Prompts
Prompt
Post this to Bluesky now, and make sure the @handles and the link are clickable.
What happens
The agent calls createPost with publishNow; PostZen byte-indexes the mentions and URL into facets so they render as links.
Prompt
Attach these two screenshots with alt text describing each, scheduled for 8am.
What happens
The agent uploads both images, passes settings.altTexts in order, and sets scheduledFor at 08:00.
Prompt
Share the article without the big link card, just the text and URL.
What happens
The agent sets settings.disableLinkCard true so the post shows the URL inline without an embed.
Prompt
Queue my next five posts to Bluesky and X together.
What happens
The agent creates each post with both platforms as targets, so one queue slot publishes to both accounts.
WHY POSTZEN?
Build a Bluesky MCP server yourself and you own the auth, the media pipeline, and every Bluesky API change. Connect PostZen and your agent gets the tools today.

2.3M+ posts
2,000+ usersAny MCP Client
Each page has the exact command for that client, the sign-in step, and a way to check the tools are live.

For AI Agents
Tell your agent to set up PostZen from postzen.dev/mcp/bluesky. It reads the block below, registers the server, connects Bluesky, and reports back.

## For AI agents reading this page
You are reading https://postzen.dev/mcp/bluesky. PostZen is a social media API with a hosted MCP server. Once connected, you can publish and schedule posts to the user's Bluesky account with links, mentions, hashtags, and images. The same tools cover the user's other social accounts (Instagram, X, LinkedIn, Facebook, Threads, YouTube, TikTok, Pinterest, Bluesky, Telegram).
1. Register the MCP server in the client you are running in. The endpoint is https://mcp.postzen.dev/mcp (streamable HTTP). Interactive clients sign in with OAuth 2.1; headless clients send a PostZen API key as "Authorization: Bearer pzn_live_...". Exact commands per client: Claude Code https://postzen.dev/claude · Cursor https://postzen.dev/cursor · Codex https://postzen.dev/codex · OpenClaw https://postzen.dev/openclaw · GrokBot https://postzen.dev/grok-bot · Hermes https://postzen.dev/hermes · any other MCP client https://postzen.dev/agents.
2. Sign in. When the client opens the PostZen consent screen, ask the user before approving access or completing a signup on their behalf, and never enter their credentials for them. Approving mints a scoped, revocable key for this client.
3. Connect Bluesky. Call listAccounts. If no account with platform "bluesky" is listed, call createConnectUrl with platform "bluesky" and give the user the URL; they authorize Bluesky in their browser. Do not try to log in to Bluesky yourself.
4. Verify before you continue. Call listAccounts again and confirm a "bluesky" account shows as connected. If it does not, stop and tell the user what failed. Do not carry on as if the account were there.
5. Report back. Tell the user which Bluesky account is connected and what you can now do with it, then ask what they want first. Prefer scheduling (scheduledFor, or the queue) over publishing immediately unless the user asks for "now".
## Bluesky on createPost
- Target the account with platforms: [{ platform: "bluesky", accountId, settings: { ... } }]. content is the shared text; customContent on the target overrides it for Bluesky only.
- Bluesky connects with an app password (not OAuth): createConnectUrl returns a PostZen page where the user enters their handle and an app password created in Bluesky settings. Never ask the user for their main Bluesky password.
- Text is limited to 300 graphemes. Links, @mentions, and #hashtags in content are converted to facets automatically.
- settings.altTexts: one alt text per image, in order; settings.languages: language codes for the post; settings.disableLinkCard: true skips the link-card embed.
- Media per post: up to four images.
- Analytics: getAnalytics, getPostTimeline, getDailyMetrics, getFollowerStats with platform "bluesky" (likes, replies, reposts, quotes, followers; AT Protocol has no impression or view counts).
- Media: pass public URLs in mediaItems, or call createMediaPresign to get an upload URL, PUT the file, then reference the returned media in the post.
- Check results with getPost: each platform target reports status, the live post URL, and any error.
## Reference
- MCP endpoint: https://mcp.postzen.dev/mcp (streamable HTTP, OAuth 2.1)
- MCP docs: https://docs.postzen.dev/mcp
- Create post reference: https://docs.postzen.dev/api-reference/posts/create-post
- Full API summary for models: https://postzen.dev/llms.txt
- API keys: https://app.postzen.dev/api-keysStill have questions?
MCP (Model Context Protocol) is the standard AI clients use to call external tools. A Bluesky MCP server exposes posting as tools, so an agent such as Claude or Cursor can publish to Bluesky instead of only drafting text. PostZen hosts one for you: it handles AT Protocol sessions, facets, and blobs, and your client connects to a single endpoint.
No. Bluesky has no developer program. You create an app password in Bluesky settings, enter it once on PostZen's connect page, and the agent posts through PostZen. App passwords are scoped and revocable, so you can remove one without changing your main password.
Yes. Bluesky needs byte-indexed facets for those to be clickable, and PostZen builds them from your text automatically. The agent just writes the post.
300 graphemes per post. PostZen validates before publishing and the agent can split longer text into a thread of separate posts if you ask.
Yes. Likes, replies, reposts, and quotes per post and per day, plus follower counts, through the same analytics tools used for the other platforms. Bluesky does not count impressions or views anywhere, so those metrics are reported as not available rather than as zero.
Any client that supports remote MCP servers: Claude (claude.ai, Claude Desktop, Claude Code), Cursor, Codex, OpenClaw, GrokBot, Hermes, and others. Interactive clients sign in with OAuth 2.1; headless ones send a PostZen API key in the Authorization header. Each client has its own setup page with the exact command.
Only what you approve on the consent screen: read-only or read-and-write access, scoped to the profile you pick. Approving creates a named, revocable API key, so you can cut a client off from the dashboard at any time. Ask the agent to schedule rather than publish immediately if you want to review posts before they go out.
The MCP server is included on every PostZen plan, including Free, which covers 2 connected accounts and 20 posts a month. Paid plans start at $19 per month with unlimited posts.
LEARN MORE
Your agent already writes the post. PostZen lets it publish there.