Post to Bluesky from Cline

Cline can draft and post to Bluesky from the editor sidebar, and a Bluesky delete is gated so an agent cannot remove the wrong post by accident.

Hermoso is a marketing MCP server: 850+ tools over one OAuth’d endpoint that let an agent research the ads already running in a market, generate finished image and video ads, publish them, and build the paid campaigns behind them. Cline reaches all of it through one connection. This page is about one slice of that — what Cline can actually do on Bluesky, and what Bluesky will not let it do.

Connect Hermoso to Cline

  1. Create an API key. In Hermoso, open the MCP & CLI tab and, under Terminal & API keys, press + Create API key. It looks like hmk_… and carries real spend authority, so treat it like a password.
  2. Add an MCP server in Cline’s MCP settings, pointing at the hosted endpoint with your key:
    { "url": "https://app.hermoso.ai/mcp",
      "headers": { "Authorization": "Bearer <your key>" } }
  3. Ask Cline for something. “Pull my three closest competitors’ longest-running ads and remix the best hook into a 9:16 video,” or “post this render to the channel.” The agent picks the tools; you approve the spend.

This is Hermoso’s generic HTTP MCP block rather than a bespoke Cline integration, and it is worth saying so plainly. What is Cline-specific on our side is the authorization server: it accepts loopback (http://127.0.0.1:PORT/…) redirect URIs precisely so locally installed agents like Cline can complete a registration handshake at all.

Then connect Bluesky itself, once, under Settings → Connectors in Hermoso, with your handle and a Bluesky app password. There is no consent screen: the app password is made in Bluesky’s own settings, and it can be revoked there without touching your real password.

The Bluesky tools Cline gets

  • post_to_bluesky — publishes a post as the connected account: up to 300 characters, with up to four images and alt text, or one MP4 video with optional caption tracks. A link with no media gets a preview card, which Hermoso builds because Bluesky does not fetch one.
  • schedule_post — queues it on the calendar every other channel shares, with the 300-character cap checked when it is queued rather than when it fires.
  • list_bluesky_posts — the account’s own recent posts with their AT-URIs and live counts, marking reposts so someone else’s post is never read as yours.
  • bluesky_post_metrics / bluesky_account — likes, reposts, replies, quotes and bookmarks per post, and followers, following and post count for your account or any public one.
  • list_bluesky_convos / read_bluesky_dm / send_bluesky_dm — read and answer direct messages, including message requests from people the account does not follow.
  • manage_bluesky_convo / react_to_bluesky_dm / mark_bluesky_convo_read — accept a request, mute, lock or leave a conversation, react with one emoji, and clear unread counts.
  • delete_bluesky_post — removes a post, after a first call that deletes nothing and reads back what would go.

Bluesky connects with an app password rather than a sign-in screen: create one in Bluesky’s settings and paste it with the handle under Settings → Connectors. Tick direct-message access when you create it, or the DM tools will tell you the password cannot chat, which is a property of the password and not a broken connection. Two more Bluesky rules Hermoso checks before sending: a video needs a confirmed email on the Bluesky account, and a link card and an image cannot share a post. Publishing costs no credits, because Bluesky charges nothing per call.

Bluesky limits worth knowing before you automate anything

TextA Bluesky post is capped at 300 characters and, separately, at 3,000 bytes, so an emoji-heavy post can be under 300 characters and still too long. It is enforced when the post is created or queued — refused while you are still there to fix it, rather than silently cut on the way out.
VisibilityPublic only. A Bluesky post is a public record on the AT Protocol, and there is no unlisted, private or draft form of one. The review happens before the call, never after it.
Carousel2 to 4 images, images only. Four is Bluesky’s own number, from the AT Protocol lexicon for an image embed, and a fifth is refused rather than dropped. A video is a different embed that carries exactly one clip, and a post has a single embed, so a Bluesky post is images, one video or a link card: one of the three.
Which accountNone, unless the brand has connected more than one Bluesky account. Then account names which, and several with none named is refused by name rather than guessed.

Try it in Cline

Ask for it in ordinary language — these are sentences, not a DSL:

“Post a short Bluesky update under 300 characters about this fix, then show me the replies and draft answers for me to approve.”

That walks get_brandgenerate_imagepost_to_blueskybluesky_post_metrics. Cline asks before each tool call by default, which is the behaviour you want on anything that publishes.

Cline on Bluesky: the part that bites

Deleting on Bluesky is permanent, and the likes, reposts and replies go with the post. So delete_bluesky_post takes two calls: the first deletes nothing and reads back the post’s real text and counts, the second needs confirm, plus the start of the post’s own text once it has any engagement. That echo is what stops an auto-approved agent confirming a wrong id blind. Keep the confirming call out of auto-approve anyway.

If you run Cline in auto-approve, exclude the publishing and campaign tools — those are the ones with a public or a financial consequence.

Research Bluesky before you post

There is no Bluesky ad library and no Bluesky search in Hermoso, so competitor research there comes down to one honest thing: bluesky_account reads any public account’s followers, following and post count, which is enough to size a competitor and chart it week by week. Everything else in the research surface (the Meta, Google and LinkedIn ad libraries, organic TikTok, Instagram, YouTube, Reddit and Threads) is unaffected.

The paid half

There is no Bluesky ads product in Hermoso, and we do not imply one. Bluesky here is organic: publish, schedule, read, reply and measure. The paid tools cover Meta, Google Ads, Microsoft Advertising, Reddit Ads, LinkedIn, Pinterest, X Ads, TikTok Ads, Snapchat Ads, ChatGPT Ads and Apple Search Ads.

What Cline cannot do on its own

An agent with a budget is only useful if the blast radius is bounded, so the fence is in the server rather than in a prompt. Every ad campaign, ad set, ad group and ad is created paused, and the status switches that arm real money refuse to run without an explicit confirmation flag. Every render is quoted first — hermoso_capabilities publishes each model’s exact credit cost before anything spends — and credits are reserved before the first provider call and settled at the exact cost afterwards, so a failed dispatch refunds rather than leaving you billed for nothing. Deletes are confirm-gated too, and every campaign tree is read back from the ad platform before your agent tells you what it built.

One step is deliberately yours: creating the Bluesky app password and connecting it once. Everything after that is a tool call.

The rest of the matrix

From Cline, post to: Facebook · Instagram · Threads · TikTok · YouTube · X · LinkedIn · Pinterest · Telegram — or see everything Cline can publish to.

Post to Bluesky from: Claude · ChatGPT · Claude Code · Cursor · Codex · OpenClaw · Grok Bot · Hermes · Gemini CLI · Perplexity · Le Chat

Frequently asked questions

Can Cline post to Bluesky?

Yes, through Hermoso's MCP server. Create an API key in Hermoso on the MCP & CLI tab, under Terminal & API keys, then add https://app.hermoso.ai/mcp to Cline with an Authorization: Bearer header. Cline then has 850+ tools, including the ones that publish to Bluesky — and the ones that research the ads already running in your market and render the creative in the first place.

How do I connect Bluesky to Cline?

Two steps, once each. Create an API key in Hermoso on the MCP & CLI tab, under Terminal & API keys, then add https://app.hermoso.ai/mcp to Cline with an Authorization: Bearer header. Then create an app password in Bluesky's settings (tick direct-message access if you want the DM tools) and paste it with your handle under Settings → Connectors in Hermoso. After that Cline publishes to Bluesky as an ordinary tool call.

Can Cline post a carousel to Bluesky?

Up to a point: 2 to 4 images, images only, which is the limit in Bluesky’s own lexicon. A video goes up as its own post, one clip per post, because a Bluesky post carries a single embed. Cline calls the same publish tool either way, and a channel that cannot carry a carousel is refused with the real reason attached.

Can Cline run Bluesky ads as well as posting?

No. There is no Bluesky ads product in Hermoso. Bluesky here is organic: publish, schedule, read engagement, and handle replies and DMs.

Start free — 30 credits at signup and 250+ more to earn, and every feature on every plan. Credits are spent only on AI models and Ad Spy research; posting, scheduling, ads management and analytics are free.

Start free   See pricing