bluesky-mcp
{
"answer": "bluesky-mcp is a Bluesky/AT Proto MCP server that provides a human-approved, dry-run-first outbox client for managing social media content over MCP and REST.\n\n- Compose & publish: Create posts with text and media attachments, reply to existing posts, repost content, and set visibility — all via the bluesky_social portmanteau tool.\n- Human-approved outbox workflow: Enqueue drafts (outbox_enqueue), list/approve pending drafts, and publish — nothing goes live without explicit approval. Includes a rich UI card (show_outbox_card) to visualize the queue.\n- Dry-run default: Operations run in preview mode by default, so you can review actions before they actually post.\n- Timelines & notifications: Pull home timelines and other feeds, plus read Bluesky notifications (mentions, replies, follows, etc.).\n- Webhooks: Inbound webhook support secured by a shared secret for event delivery.\n- Webapp: A full SOTA web interface (Dashboard, Inbox, Outbox, AI-assisted Compose, Chat, Skills, Tools, Settings, Help) served on a companion port.\n- Fleet PR integration: Handoff promotion drafts from fleet-public-relations-mcp through the outbox.\n- Server utilities: bluesky_help for introspection (version, ports, tools, outbox flow), bluesky_shutdown for graceful shutdown, and SQLite-backed stateful storage for the outbox queue and webhook event log.\n- MCP transport: Available via stdio (Claude Desktop / Cursor) or HTTP (127.0.0.1:10760/mcp)."
}
Provides tools for interacting with Bluesky (AT Protocol) to compose and manage posts, replies, reposts, media, timelines, notifications, and webhooks, including a human-approved outbox for promotion drafts.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@bluesky-mcppost a hello world message to my timeline"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
bluesky-mcp
Bluesky / AT Proto client — compose, timelines, and a human-approved outbox for promotion drafts from fleet-public-relations-mcp.
v0.1.1 · Ports 10760 / 10761 · Sibling of discord-mcp · ActivityPub sibling mastodon-mcp
FastMCP 3.4+ · full portmanteau (reply/repost/media/webhooks) · SOTA webapp · dry-run default · Windows CI + local
just ci
Bluesky = AT Proto. Not Mastodon / ActivityPub.
Principle
Agents draft. Humans approve. Nothing posts without outbox approve → publish.
Tone: FLEET_PROMOTION.md.
Related MCP server: Bluesky MCP Server
Features
Human-approved outbox + fleet-PR REST handoff
Full
bluesky_socialops: post, reply, Repost, media, timelines, notifications, webhooksDark SOTA webapp: Dashboard, Inbox, Outbox, Compose (AI assist), Chat, Skills, Tools, Settings, Help
Dry-run default; inbound webhooks with shared secret
Ruff + Biome + pytest gate; Windows-only CI workflow
Stack
Layer | Tech |
Backend | FastAPI + FastMCP 3.4 (uvicorn, pydantic v2, httpx) |
Webapp | React 18 + Vite + TailwindCSS + Lucide + Framer Motion + Zustand + TanStack Query |
Storage | SQLite outbox + webhook event log |
Desktop | Tauri 2 (NSIS installer, embedded PyInstaller backend) |
Quality | ruff, biome, pyright, pytest + pytest-cov, Playwright e2e |
Quick start
cd D:\Dev\repos\bluesky-mcp
Copy-Item .env.example .env
# Edit BLUESKY_INSTANCE + BLUESKY_ACCESS_TOKEN
.\start.batDashboard: http://127.0.0.1:10761 · MCP: http://127.0.0.1:10760/mcp
Claude Desktop / Cursor MCP config (stdio):
{
"mcpServers": {
"bluesky-mcp": {
"command": "uv",
"args": ["run", "--directory", "D:\\Dev\\repos\\bluesky-mcp", "python", "-m", "bluesky_mcp"]
}
}
}Documentation
Doc | Contents |
Install paths | |
First-timer: account creation, app passwords, download links, verify | |
Bluesky / AT Proto vs ActivityPub — where this server sits | |
Env vars | |
MCP + REST reference | |
Lint, | |
Symptom → fix | |
Product requirements + roadmap | |
LLM index + full corpus | |
Release history |
Ports
Service | Port |
Backend | 10760 |
Webapp | 10761 |
MCP tools
Portmanteau bluesky_social — all operations implemented (see docs/TOOLS.md). Also bluesky_help, bluesky_shutdown, show_outbox_card.
Quality
just ciPrivate repos: GitHub Actions stay disabled at account level (billing). Workflow file is still required; run just ci locally.
License
MIT (see LICENSE if present)
Available Tools
4 toolsbluesky_helpC
Help for bluesky-mcp.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ports | No | |
| tools | No | |
| server | No | |
| dry_run | No | |
| version | No | |
| outbox_flow | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are empty, so the description must disclose behavior. It only says 'Help for bluesky-mcp,' which does not communicate what happens (e.g., returns a help message, lists tools, side effects, safety profile). No behavioral traits are disclosed, making the tool a black box.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is a seven-word fragment. While it is short, it is under-specified rather than concise; it reads as a placeholder. It does not earn its place because it conveys almost no information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no params) and the presence of an output schema, the description still fails to provide enough context. It does not state what help is offered, whether it is safe/read-only, or how it relates to sibling tools. The agent cannot confidently invoke this tool based on this description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The schema description coverage is trivially 100%, and the description correctly avoids adding parameter details that don't exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Help for bluesky-mcp' is essentially a restatement of the tool name without specifying a clear action or what the help contains. It lacks a specific verb and resource, and does not differentiate from siblings beyond being a generic help entry. This is closer to a tautology than a purposeful description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to call this tool versus alternatives like bluesky_shutdown or bluesky_social_tool. There is no mention of context, prerequisites, or exclusions. The agent receives no decision-relevant usage information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bluesky_shutdownA
Signal graceful shutdown (process exit left to host).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| message | No | |
| success | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a valuable behavioral detail beyond the tool name: 'process exit left to host.' This clarifies that the tool only signals shutdown and does not terminate the process itself. With no annotations, this disclosure is meaningful, though it does not address other potential side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action ('Signal graceful shutdown') and adds the key qualifier about process exit. Every word earns its place, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no annotations), the description is nearly complete. It covers the essential behavior, and the output schema presumably handles return values. The lack of usage guidance is minor but not a significant gap for such a straightforward tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty schema. The description naturally provides no parameter information, but the zero-parameter baseline of 4 is appropriate since there is nothing to explain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as signaling a graceful shutdown, with a specific verb ('signal') and resource ('graceful shutdown'). It is distinct from sibling tools like bluesky_help or show_outbox_card, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (call when you want a graceful shutdown) but provides no explicit context, prerequisites, or alternatives. There is no stated when-to-use or when-not-to-use guidance, making it acceptable but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bluesky_social_toolC
Portmanteau: post/timeline/outbox_* — fleet drafts use outbox_enqueue → approve → publish.
Return Format
{success, message?, error?, …} dialogic dict from bluesky_social.
Examples
operation=outbox_listoperation=notificationsoperation=outbox_enqueuewithstatus_text
| Name | Required | Description | Default |
|---|---|---|---|
| cid | No | ||
| reason | No | ||
| dry_run | No | ||
| payload | No | ||
| timeline | No | home | |
| operation | Yes | ||
| outbox_id | No | ||
| status_id | No | ||
| media_path | No | ||
| visibility | No | public | |
| status_text | No | ||
| in_reply_to_id | No | ||
| media_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are empty, so the description carries the full burden of behavioral disclosure. It only provides a vague return format ('dialogic dict') and a few examples, without addressing side effects, authorization, rate limits, or error handling. The 'fleet drafts' note is a workflow clue but doesn't reveal operational traits like whether operations are destructive or read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but poorly structured; the 'Portmanteau' opener is cryptic and wastes the front-loaded position. The return format section is clear but too generic, and the examples are helpful yet insufficient. The overall content is concise in volume but not in usefulness, with jargon like 'dialogic dict' adding confusion.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 13 parameters, no annotations, and only a vague return format, the description is far from complete. It doesn't enumerate possible operation values, explain output schema, or cover use scenarios beyond the outbox example. The tool's complexity demands a much more detailed description to be usable by an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter semantics. It only references operation and status_text in examples, leaving 11 parameters unexplained. While names like media_path and visibility are intuitive, their constraints, defaults, or interactions with operations are not described, and payload is entirely opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Portmanteau: post/timeline/outbox_*' which hints at a multi-operation dispatcher but never states a clear verb+resource purpose. The examples show operation=outbox_list, notifications, and outbox_enqueue, but no overarching statement like 'perform Bluesky social actions'. This leaves the tool's core function ambiguous and fails to distinguish it from siblings other than by implication.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage hint is 'fleet drafts use outbox_enqueue → approve → publish', which describes a specific workflow but doesn't explain when to choose this tool over alternatives like bluesky_help or show_outbox_card. There are no decision criteria for selecting operations, and no exclusions or alternatives are mentioned. The guidance is minimal and not actionable for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_outbox_cardB
Rich Prefab card summarizing pending outbox drafts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With empty annotations, the description carries full responsibility for behavioral disclosure. It only states that the tool 'summarizes pending outbox drafts', but it does not indicate whether this is a read-only operation, if it has side effects, or what the output format is. The lack of behavioral details is a significant gap for a tool that likely consumes UI resources.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that gets to the point. However, the phrase 'Rich Prefab card' is not self-explanatory and adds slight ambiguity, preventing a perfect score. Still, it is efficiently worded with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description is minimal and fails to provide context about what 'pending outbox drafts' are, what 'Rich Prefab card' means, or when the tool should be used. Given its simplicity, some context might be assumed, but the description alone is insufficient for an AI agent to fully understand the tool's role in a larger workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, which earns a baseline score of 4. The input schema is empty, so there are no parameter details to explain. The description does not need to add parameter semantics, and the 100% schema coverage is vacuous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Rich Prefab card summarizing pending outbox drafts' clearly states the tool's function: to display a card summarizing pending outbox content. It uses a strong verb ('summarizing') and a specific resource ('pending outbox drafts'), distinguishing it from sibling tools like bluesky_help and bluesky_shutdown. The term 'Prefab' is somewhat jargon, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description does not explain when to use this tool versus alternatives, nor does it mention any prerequisites or contexts. Users are left to infer that this is for viewing outbox drafts, but there is no explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
4 tool updates
v0.1.1- First observed
bluesky_help - First observed
bluesky_shutdown - First observed
bluesky_social_tool - First observed
show_outbox_card
TDQS
Scored across 4 tools
bluesky_help and bluesky_shutdown are clearly distinct, but show_outbox_card overlaps with the outbox operations in bluesky_social_tool. The portmanteau nature of bluesky_social_tool also makes it a catch-all, increasing selection difficulty.
Naming is inconsistent: bluesky_help and bluesky_shutdown share a prefix, but show_outbox_card uses a verb_noun pattern without the prefix, and bluesky_social_tool is a descriptive noun. No uniform verb or prefix convention is applied.
4 tools is within the typical 3-15 range, though the portmanteau tool feels overloaded by encapsulating many operations. Still, the count is reasonable for the server's apparent scope.
The tool set covers help, shutdown, outbox management (enqueue/approve/publish/list), and social interactions (post/timeline/notifications). Minor gaps like explicit post deletion or profile updates may exist, but the core workflow appears covered.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Create, schedule, and publish social posts, manage accounts, and read analytics as MCP tools.
Schedule and publish social posts across 9 platforms (Instagram, LinkedIn, X, TikTok, Facebook, Threads, Pinterest, Bluesky, Mastodon) straight from Claude, ChatGPT, Cursor, or any MCP client. Create, edit, and reschedule posts, upload media, and pull account and post analytics, follower demographics, and best-time windows. 20 tools, free on every plan.
MCP server for QPost — lets AI agents publish video and image posts to YouTube, TikTok, Instagram.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server for Bluesky that can post on your behalf by using the AT Protocol.127MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Bluesky/AT Protocol enabling LLM clients and agents to authenticate, search, post, like, follow, and manage chat on Bluesky.141MIT
- AlicenseAqualityDmaintenanceMCP server for Bluesky/AT Protocol that enables AI agents to search, post, reply, like, and follow.15161MIT
- AlicenseAqualityCmaintenanceEnables search, reading, and posting to Bluesky from any MCP client; features 11 tools (5 read, 6 write) with gated writes requiring explicit confirmation to prevent accidental publishing.1111MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sandraschi/bluesky-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server