Send a Bluesky direct message
send_bluesky_dmSend a direct message on Bluesky to a handle or existing conversation. Use the dry run to verify deliverability before sending, with specific refusal reasons like blocked, suspended, or nonexistent accounts.
Instructions
Send ONE direct message on the connected Bluesky account, either into an existing conversation (convoId) or to a named handle (a conversation is opened for you — the handle is resolved to a DID first, because Bluesky identifies chat members by DID). A DM allows 1000 characters, NOT the 300 a post allows. Refusals name the real situation rather than a generic failure: the recipient has DMs off, only accepts DMs from people they follow, has blocked this account, is suspended, or does not exist. There is deliberately no broadcast form — a recipient is always named.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | the recipient’s Bluesky handle, e.g. alice.bsky.social. Ignored when convoId is given. | |
| text | Yes | the message, up to 1000 characters | |
| dryRun | No | CHECK FIRST, SEND NOTHING. Asks Bluesky whether a DM to `to` would be delivered at all and returns canChat plus the reason when it would not — that account has DMs off, only accepts them from people it follows, has blocked this one, is suspended, or does not exist. Free, and the message is NOT sent. Use it before writing a long DM to someone who has never been messaged, so a refusal costs nothing instead of arriving after the words were written. `text` is still validated for length so a dry run cannot pass on a message the real send would refuse. | |
| convoId | No | reply into an existing conversation (from list_bluesky_convos). Omit to start one with `to`. | |
| replyToMessageId | No | reply to a specific message in the conversation |