Discord message-tool ops: send/read/edit/delete, react, poll, pin, thread, search, presence, media/components.
Discord
Use the message tool with channel: "discord". No separate Discord tool.
Rules
Respect channels.discord.actions.* gates.
Prefer explicit guildId, channelId, messageId, userId.
Multi-account: pass accountId when needed.
Send targets: to: "channel:<id>" or to: "user:<id>".
Mention users as <@USER_ID>.
Avoid Markdown tables in outbound Discord messages.
Prefer components v2 for rich UI; do not mix v2 components with legacy embeds.
Common actions
Send:
{ "action": "send", "channel": "discord", "to": "channel:123", "message": "hello", "silent": true }
Send media:
{
"action": "send",
"channel": "discord",
"to": "channel:123",
"message": "see attachment",
"media": "file:///tmp/example.png"
}
Components v2:
{
"action": "send",
"channel": "discord",
"to": "channel:123",
"message": "Status",
"components": "[Carbon v2 components]"
}
React:
{ "action": "react", "channel": "discord", "channelId": "123", "messageId": "456", "emoji": "👍" }
Read:
{ "action": "read", "channel": "discord", "to": "channel:123", "limit": 20 }
Edit/delete:
{
"action": "edit",
"channel": "discord",
"channelId": "123",
"messageId": "456",
"message": "fixed typo"
}
{ "action": "delete", "channel": "discord", "channelId": "123", "messageId": "456" }
Poll:
{
"action": "poll",
"channel": "discord",
"to": "channel:123",
"pollQuestion": "Lunch?",
"pollOption": ["Pizza", "Sushi"],
"pollDurationHours": 24
}
Pin:
{ "action": "pin", "channel": "discord", "channelId": "123", "messageId": "456" }
Thread:
{
"action": "thread-create",
"channel": "discord",
"channelId": "123",
"messageId": "456",
"threadName": "bug triage"
}
Search:
{
"action": "search",
"channel": "discord",
"guildId": "999",
"query": "release notes",
"channelIds": ["123"],
"limit": 10
}
Presence, often gated:
{
"action": "set-presence",
"channel": "discord",
"activityType": "playing",
"activityName": "OpenClaw",
"status": "online"
}
1fdon't have the plugin yet? install it then click "run inline in claude" again.