DEV Community

Failed Ahmad
Failed Ahmad

Posted on

bluesky-mcp: Manage a Bluesky Account From Your AI Assistant

What is this?

bluesky-mcp is a Model Context Protocol server for managing a Bluesky account from an AI assistant: post, reply, like, repost, follow/unfollow, search, and read your timeline and notifications.

It uses the official AT Protocol API with a handle + app password — no OAuth app, no approval process, and it works fine with 2FA enabled since it never touches your real account password.

This is the last of a four-part series — minecraft-mcp-server, streamlabs-mcp, and devto-mcp were covered in the previous three posts, all published (and promoted) using these exact tools.

Tools exposed

Tool Does
bluesky_get_timeline Get your home feed
bluesky_get_author_feed Get a user's posts
bluesky_search_posts Search public posts
bluesky_get_post Get post details, incl. the cid needed to like/repost
bluesky_get_profile Get profile info
bluesky_get_followers / bluesky_get_following List a user's followers / follows
bluesky_get_notifications / bluesky_mark_notifications_read Read/clear notifications
bluesky_resolve_handle Look up a DID from a handle
bluesky_post Post, optionally as a reply
bluesky_delete_post Delete your own post
bluesky_like / bluesky_unlike Like / undo a like
bluesky_repost / bluesky_unrepost Repost / undo a repost
bluesky_follow / bluesky_unfollow Follow / unfollow (by DID)

For the "un-" actions, pass the AT-URI of the record itself (the like/repost/follow record, returned in viewer.like / viewer.repost / viewer.following on posts and profiles) — not the original post or account's URI.

Getting started

git clone https://github.com/AhmadTariq1337/bluesky-mcp.git
cd bluesky-mcp
npm install
cp .env.example .env
Enter fullscreen mode Exit fullscreen mode

Add your handle and an app password to .env (get one from Bluesky: Settings → Privacy and Security → App Passwords), then register it as an MCP server in your client's config — for Claude Desktop that's claude_desktop_config.json:

"bluesky": {
  "command": "node",
  "args": ["/absolute/path/to/bluesky-mcp/index.js"]
}
Enter fullscreen mode Exit fullscreen mode

Fully quit and reopen your client (not just close the window) so it picks up the new server.

Bonus: standalone CLI

There's also a one-off post.js script for firing a single post from the terminal without going through an AI assistant:

node post.js "Just shipped a new project, check it out!"
Enter fullscreen mode Exit fullscreen mode

Prints a link to the live post. 300-character limit, checked before sending.

Security

.env holds your real handle and app password, and is gitignored. App passwords are scoped and revocable from Bluesky's settings, unlike your main account password.

Links


That wraps the series — four MCP servers (minecraft-mcp-server, streamlabs-mcp, devto-mcp, bluesky-mcp), all open source, all MIT licensed, all usable from any MCP-compatible client.

Top comments (0)