Prompt
I just gave a talk called 'Boring Postgres for Busy Teams'. Here are my slides as text. Draft a 3-post Bluesky thread for the developer crowd: the one idea people asked about most, one concrete tip, and a link to the recording at example.com/talks/boring-postgres. No hashtags except #postgres on the last post. How to do it
- Mint a Bluesky agent key In https://app.socialhandoff.com, open Connections, connect your Bluesky account, then create an agent key scoped to Bluesky with draft permission only. Copy the key when it is shown; only its hash is stored.
- Add the stdio server Open claude_desktop_config.json and add an mcpServers entry that runs npx -y socialhandoff-mcp with your instance URL and the Bluesky key. The key-mint dialog prints this block ready to paste.
- Restart and check the tools Quit Claude Desktop completely and reopen it. The tools menu should list draft_post, schedule_post, and preview_posts.
- Draft from the conversation Ask Claude for the Bluesky post. It calls draft_post, then preview_posts so you see the approval card inline. Approve or edit it in the inbox on desktop or phone.
Example draft
1/3 Gave a talk today on boring Postgres for busy teams. The question everyone asked: do we really need a queue service? Often no. A jobs table with SKIP LOCKED gets small teams a long way. 2/3 One tip that surprised people: set statement_timeout per role, not globally. Your migration role and your web role need very different limits. 3/3 Recording and slides: example.com/talks/boring-postgres #postgres
Gotchas
- Bluesky refuses images over 1 MB and allows at most 4 per post. Resize screenshots before the agent attaches them, and add alt text to each.
- Links, @handles, and #tags become clickable facets when the post publishes. Have the agent write the plain URL and handle, not markdown links.
- Connect Bluesky with an app password from Settings, never your account password. Revoking that app password cuts off only this connection.
- Claude Desktop reads its config only at launch. After editing claude_desktop_config.json, quit the app fully, not just the window, or the tools will not appear.
- Character limit: 300 graphemes per post. An emoji or an accented letter counts as 1 grapheme even if it uses several bytes.
- Media per post: Up to 4 images, or 1 video. Images and video cannot be mixed in one post.
- Image size: The AT Protocol image embed accepts blobs of about 1 MB each; the official app compresses larger photos. SocialHandoff checks for 1 MB per image.
- Video: Up to 3 minutes and 100 MB, MP4. SocialHandoff does not publish video to Bluesky.
Frequently asked questions
Can Claude Desktop publish to Bluesky by itself?
No. With a draft-only key, Claude Desktop can create and preview Bluesky posts but not publish them. You approve in the inbox, or promote the agent on the trust ladder once it has a clean record.
Can Claude Desktop write a Bluesky thread instead of one post?
Yes. Ask for a thread and the draft is stored as a reply chain, each part checked against the 300-grapheme limit. You approve the whole thread at once.
Do I need a Bluesky app password?
Yes. Create one in Bluesky under Settings, then App passwords, and paste it when you connect the account. It can be revoked without changing your main password.