bluesky-mcp-cliCAUTION
Bluesky MCP server and CLI for Claude Code, Codex and AI agents. 45 tools for posting, threads, replies, timeline, search, custom feeds, lists, notifications and the social graph.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
[](https://www.npmjs.com/package/@thenavidm/bluesky-mcp-cli) [](./LICENSE) [](https://youtube.com/@thenavidm?sub_confirmation=1) [](https://x.com/thenavidm) [](https://linkedin.com/in/thenavidm)
Bluesky MCP server and CLI for Claude Code, Codex and AI agents. 45 tools for posting, threads, replies, timeline, search, custom feeds, lists, notifications and the social graph.
One install gives you both surfaces, the same tools under the same names, covering everything the app does and a few things it cannot.
There is no OAuth app to register: a handle and an app password are all you need, and most reads work with no credentials at all.
Built and maintained by Navid Moazzez. Built on Slipway, which turns one definition of each tool into the MCP server and the CLI.
Two ways to use it
Command line
bluesky-cli in your terminal, for scripting, cron, pipes, or just asking a quick question without opening anything:
bluesky-cli # every command, one line each bluesky-cli get-timeline --limit 50 # your home timeline bluesky-cli get-author-feed --actor navid.me # someone's posts bluesky-cli search-posts "model context protocol" bluesky-cli create-p
0e60f45e5f30OBSERVED · 2026-10-11Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add bluesky-mcp-cli --env BLUESKY_APP_PASSWORD=${BLUESKY_APP_PASSWORD} -- npx -y @thenavidm/[email protected]{
"mcpServers": {
"bluesky-mcp-cli": {
"command": "npx",
"args": [
"-y",
"@thenavidm/[email protected]"
],
"env": {
"BLUESKY_APP_PASSWORD": "${BLUESKY_APP_PASSWORD}"
}
}
}
}Exposed tools (44)
29 read · 11 write · 4 destructive. Blast radius: 4 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
block_account | read | Block an account. This is visible to them and severs the relationship in both directions: it removes any follow either way, and hides your posts from them. Reversible with unblock_account, but the follows do not come back. Needs confirm: true. |
catch-up | read | Summarise what happened on Bluesky while you were away |
delete_post | destructive | Delete one of your own posts. This cannot be undone, and it does not remove the post from feeds and caches that already have it. Needs confirm: true. |
draft-thread | read | Turn an idea into a Bluesky thread, without posting it |
follow | read | Follow an account by handle or DID. Following twice is harmless. |
get_engagement_summary | read | Totals, averages and engagement rate across recent posts, broken down by format so you can see whether images or video actually earn their effort. Bluesky offers no equivalent. |
get_feed | read | Read posts from a custom feed by its at:// URI or bsky.app link. Find one with search_feeds, or your own with get_pinned_feeds. |
get_followers | read | Accounts that follow a given account, newest first. Pages automatically past Bluesky |
get_follows | read | Accounts a given account follows. Pages automatically. |
get_liked_posts | read | Posts a connected account has liked, newest first. Only works for your own accounts, because Bluesky does not expose anyone else |
get_list_members | read | The accounts on a curated list. |
get_list_posts | read | Posts from the accounts on a curated list, newest first. Take the list URI from get_pinned_feeds or a bsky.app /lists/ link. |
get_notifications | read | Your likes, reposts, follows, mentions, replies and quotes, newest first. Filter by reason to get just the ones that need an answer: |
get_pinned_feeds | read | The feeds and lists pinned to a connected account |
get_post_likes | write | The accounts that liked a specific post, newest first. |
get_post_stats | write | Likes, reposts, replies and quotes for a single post, by URL or at:// URI. The one-post version of rank_posts. |
get_post_thread | write | Read a post together with the conversation around it: everything above it and the replies below. Accepts an at:// URI or a bsky.app link. Use this before replying, so the reply lands with context. |
get_posting_patterns | read | Your posting times crossed with the engagement they earned, by hour and by weekday, so |
get_profile | read | Full profile for one or more accounts: bio, follower counts, labels, and, when a connected account is available, whether you follow them and whether they follow you. Works without credentials. |
get_quotes | write | Posts that quote a specific post. This is where the argument about a post usually lives: quotes carry commentary, reposts do not. |
get_relationships | read | For each account named, whether a connected account follows them and whether they follow back. One call for a whole list. Use this before a bulk follow or unfollow rather than reading a profile each time. |
get_reposted_by | write | The accounts that reposted a specific post. |
get_suggested_follows | read | Accounts Bluesky suggests following. With an |
get_timeline | read | Your following feed, newest first. Pass since_hours to read a time window rather than a fixed number of posts. Requires a connected account. |
get_trends | read | Current trending topics on Bluesky, each with the feed link that shows the posts behind it. Works without credentials. |
get_unread_count | read | How many notifications have arrived since you last marked them seen. One cheap call, worth making before you pull the full list. |
get_video_job_status | read | Check a Bluesky video transcoding job by id. Only needed when create_post reported that a video was still processing when it gave up waiting. The job usually finishes on its own, and the id is in that message. |
like_post | write | Like a post. Accepts an at:// URI or a bsky.app link. Liking twice is harmless: the existing like is returned rather than a second one created. |
list_accounts | read | List every Bluesky account this server can act as. Use the handle from here as the |
mark_notifications_seen | read | Mark every notification up to now as seen, so the unread count resets. Affects only your own view, and nobody else can tell. |
mute_account | read | Hide an account |
rank_posts | read | Your posts, best first, with likes, reposts, replies and quotes for each. Bluesky shows you none of this. Use days to score a period rather than a fixed count, and format to compare text against images and video. |
repost | write | Repost a post to your followers. Reposting twice is harmless. To add your own comment instead, use create_post with |
search_actors | read | Find Bluesky accounts by name, handle or bio text. Works without credentials. Returns each account |
search_feeds | write | Find custom feeds, meaning the algorithmic feeds anyone on Bluesky can publish. Pass a feed |
search_posts | read | Full-text search across public posts. Supports Bluesky |
set_reply_permissions | write | Change who is allowed to reply to one of your existing posts, after it is already published. Also lets you hide specific replies from the thread. This is the main tool for a post that is going badly. |
study-account | read | Work out how an account gets engagement |
unblock_account | destructive | Remove a block. Any follows the block severed do not come back. Both sides have to follow again. |
unfollow | write | Stop following an account. Finds your own follow record from the profile |
unlike_post | destructive | Remove your like from a post. Finds your own like record from the post |
unmute_account | write | Stop hiding an account |
unrepost | destructive | Remove your repost of a post. |
whoami | read | Authenticate and return the live profile for a connected account, including follower counts. Use this to confirm credentials work, or when the user says |
Trust audit
CAUTIONgrade B · trust 89/100 Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | WARN |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (1 observation(s))
- Network
- declared (2 observation(s))
- Shell
- none-observed
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (7)
/(^|\s)[##]((?!️)[^\s ⃢]*[^\d\s\p{P} ⃢]+[^\s ⃢]*)?/gu;delete_post, unblock_account, unlike_post, unrepost
.mcpbignore
const family = "👨👩👧👦";
const text = "👨👩👧👦".repeat(300);
@thenavidm/slipway, zod, @types/node, ajv, typescript, vitest
Node 22 or newer. Scripts keep working for success, usage errors and missing setup; a script that treated exit 1 as "unknown command" or "read-only" should read 2. Over MCP, expect an approval prompt
Gates applied: no_behavioural_pass.
0e60f45e5f30full audit observations/trust-audit/mcp-server/thenavidm__bluesky-mcp-cli.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | 0e60f45e5f30 | CAUTION | B | 89 | first audit |
Questions
What is the bluesky-mcp-cli MCP server?
Bluesky MCP server and CLI for Claude Code, Codex and AI agents. 45 tools for posting, threads, replies, timeline, search, custom feeds, lists, notifications and the social graph.
What tools does bluesky-mcp-cli expose?
44 in total: 29 read-only, 11 that write, and 4 that can delete or overwrite (delete_post, unblock_account, unlike_post, unrepost). Every one is listed on this page with its risk.
Is bluesky-mcp-cli safe to connect to an agent?
With care. The audit graded it B (89/100) and found 7 things worth knowing before you trust this server, listed below with the exact line each was found on. Separately from the audit: 4 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does bluesky-mcp-cli need?
It reads BLUESKY_APP_PASSWORD from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How current is this page?
The grade is for one exact copy of the source (0e60f45e5f30), read on 2026-10-11. The repository is watched and re-audited when it changes.