Skip to main content
Glama
cameronrye

AT Protocol MCP Server

create_post

Create a public post on Bluesky with text, images, video, link cards, or quotes. Control who can reply and whether quoting is allowed.

Instructions

Create a new post on AT Protocol (Bluesky). The single rich post-creation tool: supports plain text with auto-detected mentions/links/#hashtags, explicit richtext facets, replies, image embeds, a video embed (from upload_video), an external link card, a quote (record) embed, language tags, reply controls (who can reply, via a threadgate record), and quote controls (quote policy, via a postgate record). Requires authentication (app password). SIDE EFFECT: publishes a public post visible to everyone. Subject to per-tool rate limiting. Use create_thread to publish a multi-post chain in one call, and reply_to_post to reply to an existing post; use this tool for a single standalone post (it can also reply via the reply field).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
textYesThe post body. Max 300 graphemes / 3000 bytes (emoji count as one grapheme). Mentions, links and #hashtags are auto-detected into richtext facets unless you supply `facets` explicitly.
replyNoSet to make this post a reply in an existing thread.
embedNoOptional media embed: images OR an external link card OR a video (at most one).
facetsNoOptional explicit richtext facets (byte-range annotations). For mentions, `value` is a handle or DID; for links, a URL; for hashtags, the tag without #. Omit to let the server auto-detect facets from the text.
quoteNoQuote another post (record embed). Mutually exclusive with the `embed.images`, `embed.external`, and `embed.video` embeds.
langsNoOptional BCP-47 language tags (e.g. en, en-US, pt-BR) declaring the languages of the post text.
replyControlsNoWho can reply to this post. Writes an app.bsky.feed.threadgate record (same rkey as the post) AFTER the post is created. Enabled options combine, up to 5 rules. Provide the object with NO rules enabled to let nobody reply; omit it entirely to leave replies open to everyone. If the gate write fails after the post succeeded, the call still succeeds with gateApplied:false and a warning instead of failing.
quoteControlsNoQuote (embed) policy for this post. Only allowQuotes:false writes an app.bsky.feed.postgate record, AFTER the post is created. If that write fails after the post succeeded, the call still succeeds with gateApplied:false and a warning instead of failing.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
uriYesAT-URI of the newly created post.
cidYesCID (content hash) of the newly created post.
successYesWhether the post was created successfully.
messageYesHuman-readable status message.
gateAppliedNoPresent only when replyControls and/or quoteControls were requested. True when every requested gate record (threadgate/postgate) is in effect. False when the post was created but a gate write failed — the post is LIVE without the requested controls (success stays true; see `warning` for which gate failed and how to retry).
warningNoPresent only when gateApplied is false: explains which gate record (threadgate and/or postgate) could not be written and how to retry. The post itself was created successfully.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses important behavioral traits beyond annotations: the post is public, subject to rate limiting, requires auth, and creates additional records (threadgate, postgate) for reply/quote controls. It also explains side effects and error handling for gate write failures.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear opening, a list of supported features, side effects, and alternatives. It is somewhat lengthy due to the tool's complexity, but every sentence contributes meaningful information. Slightly more conciseness could be achieved by reducing redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (8 parameters, nested objects, output schema present), the description covers all necessary aspects: main functionality, usage modes, side effects, preconditions, and error handling. It leaves no significant gaps for an agent to misinterpret.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value by explaining mutual exclusivity among embed types, auto-detection of facets, and the relationship between reply controls and threadgate records. This provides context that enriches the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Create a new post on AT Protocol (Bluesky).' It explicitly distinguishes itself from sibling tools like create_thread and reply_to_post by stating when to use each.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool versus alternatives: 'Use create_thread to publish a multi-post chain... and reply_to_post to reply...; use this tool for a single standalone post.' It also mentions prerequisites (authentication, app password) and side effects.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

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/cameronrye/atproto-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server