
Security News
White House Authorizes Private Companies to Conduct Offensive Cyber Operations
A new federal program will let vetted U.S. cybersecurity firms help investigate and disrupt foreign cybercrime groups under government direction.
bluesky-mcp-server
Advanced tools
A Model Context Protocol (MCP) server that enables Claude Desktop (and other MCP clients) to read and post on Bluesky via the AT Protocol.
action field with exactly what to do nextfrom:handleRun directly without installing anything:
BLUESKY_HANDLE=you.bsky.social BLUESKY_APP_PASSWORD=xxxx-xxxx-xxxx-xxxx npx bluesky-mcp-server
Claude Desktop Configuration for npx:
Add to your Claude Desktop config file:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"bluesky": {
"command": "npx",
"args": ["bluesky-mcp-server"],
"env": {
"BLUESKY_HANDLE": "you.bsky.social",
"BLUESKY_APP_PASSWORD": "xxxx-xxxx-xxxx-xxxx"
}
}
}
}
npm install -g bluesky-mcp-server
Claude Desktop Configuration:
{
"mcpServers": {
"bluesky": {
"command": "bluesky-mcp-server",
"env": {
"BLUESKY_HANDLE": "you.bsky.social",
"BLUESKY_APP_PASSWORD": "xxxx-xxxx-xxxx-xxxx"
}
}
}
}
git clone https://github.com/luminarylane/bluesky-mcp-server.git
cd bluesky-mcp-server
npm install
npm run build
Claude Desktop Configuration:
{
"mcpServers": {
"bluesky": {
"command": "node",
"args": ["/path/to/bluesky-mcp-server/dist/index.js"],
"env": {
"BLUESKY_HANDLE": "you.bsky.social",
"BLUESKY_APP_PASSWORD": "xxxx-xxxx-xxxx-xxxx"
}
}
}
}
After updating the config, restart Claude Desktop.
Credentials can be overridden per tool call — useful for managing multiple Bluesky accounts:
Post as alice.bsky.social using handle "alice.bsky.social" and appPassword "aaaa-aaaa-aaaa-aaaa"
Post as bob.bsky.social using handle "bob.bsky.social" and appPassword "bbbb-bbbb-bbbb-bbbb"
Once configured, ask Claude to:
| Tool | Description | Key Parameters |
|---|---|---|
bsky_get_timeline | Home timeline from followed accounts | limit (max 50), cursor |
bsky_get_notifications | Likes, reposts, follows, mentions, replies | limit (max 50), cursor |
bsky_search_posts | Search posts by keyword/phrase/hashtag | query, sort (top/latest), limit |
bsky_get_post_thread | Fetch a post and its full thread | uri (AT URI), depth (max 20) |
bsky_get_profile | Get a user's profile | actor (handle or DID) |
bsky_get_followers | List followers of an account | actor, limit (max 100) |
bsky_search_users | Find users by name or keyword | query, limit (max 50) |
bsky_get_feed | Posts from a custom feed generator | feed (AT URI), limit |
bsky_get_media_specs | Platform media format requirements | — |
| Tool | Description | Key Parameters |
|---|---|---|
bsky_create_post | Create a post (text, link card, image, or video) | text, linkUrl / imageUrl / videoUrl |
bsky_reply | Reply to a post | text, parentUri, parentCid |
bsky_like | Like a post | uri, cid |
bsky_repost | Repost a post | uri, cid |
bsky_follow | Follow a user | did |
bsky_delete_post | Delete a post | uri |
All tools accept optional
handleandappPasswordarguments to override the environment-variable credentials.
bsky_create_post supports three embed types (mutually exclusive):
| Type | Parameter | Accepted Formats | Max Size |
|---|---|---|---|
| Link preview card | linkUrl | Any URL | — |
| Image | imageUrl | JPEG, PNG (https:// only) | 1 MB |
| Video | videoUrl | MP4 (https:// only) | 50 MB, 60s |
Link preview cards automatically fetch og:title, og:description, and og:image from the target URL.
Missing credentials — Provide handle + appPassword as arguments, or set BLUESKY_HANDLE and BLUESKY_APP_PASSWORD env vars.
Solution: Set the env vars in your Claude Desktop config, or pass handle and appPassword directly in the tool call.
Auth failed — Bluesky login failed: Invalid identifier or password
Solution: Generate a fresh App Password at bsky.app/settings/app-passwords. App passwords are separate from your account password.
Rate limited — Bluesky API rate limit reached (write bucket). Wait 45s then retry.
Solution: The server includes built-in rate limiting. Wait the indicated number of seconds and retry the same tool call — the retryAfterSeconds field tells you exactly how long.
400 Bad Request — POST_TOO_LONG: Text exceeds 300 graphemes. Shorten the text and retry.
Solution: Bluesky's limit is 300 graphemes (not bytes). Shorten the post text.
URL rejected (not https:// or blocked address)
Solution: imageUrl and videoUrl must use https:// and point to a public internet address. Local or private network URLs are blocked.
POST_NOT_FOUND: This post may have been deleted. Skip it and move on.
Solution: The post was deleted after you retrieved its URI. Skip this operation.
Many tools require an AT URI (at://did:plc:xxx/app.bsky.feed.post/yyy). You can obtain one by:
bsky_search_posts — each result includes uri and cidbsky_get_timeline — same shapebsky_get_post_thread — the root post's uri is in the responseError: [paste full error message]
Tool: [tool name]
Steps to reproduce: [what you asked Claude to do]
Environment: [OS, Node.js version]
Contributions are welcome! To get started:
git clone https://github.com/luminarylane/bluesky-mcp-server.git
cd bluesky-mcp-server
npm install
npm test # Run the test suite
npm run build # Compile TypeScript
MIT License — see LICENSE for details.
FAQs
Standalone Bluesky MCP Server — SENSE + ACT tools for the AT Protocol
We found that bluesky-mcp-server demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
A new federal program will let vetted U.S. cybersecurity firms help investigate and disrupt foreign cybercrime groups under government direction.

Research
/Security News
The campaign amassed more than 75,000 installs by targeting Russian-speaking users seeking access to blocked services.

Company News
Open source maintainers are under more pressure than ever. We're raising our open source program from the Team plan to the Business plan, free.