send_direct_message
Send a plain-text direct message on Bluesky to an existing conversation or to a recipient by handle/DID, automatically resolving or creating the conversation.
Instructions
Send a plain-text Bluesky direct message (chat.bsky.convo.sendMessage, proxied to the bsky.chat service). Target either an existing conversation by convoId, or a recipient by handle/DID via member — the conversation is then resolved (or created) automatically with chat.bsky.convo.getConvoForMembers. Message text is limited to 1000 graphemes / 10000 UTF-8 bytes and is sent without facets (mentions/links appear as plain text). Requires authentication with an app password created with "Allow access to your direct messages" enabled; the recipient's settings must also allow DMs from you. Subject to per-tool rate limiting.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| convoId | No | Id of an existing conversation to send into (from list_conversations). Provide exactly one of convoId or member. | |
| member | No | Handle (e.g. bob.bsky.social) or DID of the account to message. The conversation is resolved (or created) via chat.bsky.convo.getConvoForMembers, so no prior conversation is needed. Provide exactly one of convoId or member. | |
| text | Yes | Plain-text message body (max 1000 graphemes / 10000 UTF-8 bytes). Mentions, links and hashtags are sent as plain text — no facets are attached. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| success | Yes | Whether the message was sent. | |
| message | Yes | Human-readable status message. | |
| convoId | Yes | Id of the conversation the message was sent into; reuse it for follow-up messages to skip conversation resolution. | |
| recipientDid | No | DID the member parameter resolved to. Present only when member was used to target the message. | |
| sentMessage | Yes | The message as recorded by the chat service. |