Message Tools
Tools for reading, sending, editing, and moderating messages and reactions.
When you only need message IDs or author IDs around a known message, prefer
get_messages_id_range. It is usually easier for models to use correctly than
raw pagination.
get_message #
- Purpose: fetch one message by ID.
- Key arguments: channel scope +
message_id. - If your integration sets
X-Current-Channel,channel_idandchannel_namecan usually be omitted.
fetch_messages #
- Purpose: fetch one raw page of full message objects.
- Key arguments: channel scope.
- Optional fields:
limit,before,after,around. - Recommendation: prefer
get_messages_id_rangewhen you only need compact context around a known message.
get_messages_id_range #
- Purpose: return a compact message window around a known message ID.
- Returns:
{id, author, created_at}entries plus counters and truncation metadata. - Required arguments:
- channel scope
from_id- exactly one of
to_id,count_before, orcount_after - Optional fields:
authors: strict author filter
Practical Notes #
authorsis absolute. Messages from other authors are excluded, includingfrom_idwhen it does not match.count_beforeandcount_afterdescribe the final result size, not “extra” messages in addition tofrom_id.truncatedis onlytruewhen the Discord MCP had to stop early.
send_message #
- Purpose: send a plain text message to another channel.
- Key arguments: channel scope +
content. - This tool is meant for channels other than the current one.
- If your integration sets
X-Current-Channel,channel_idandchannel_namebecome optional, but the Discord MCP service still refuses this tool for that same current channel. - If your integration sets
X-Current-Channel, the Discord MCP blocks attempts to usesend_messagefor that same channel and tells the model to reply normally instead. - If
X-Target-Channelsis locked to one specific channel, the Discord MCP hides this tool because a normal reply is enough. - If your integration needs mention restrictions, use
X-Allowed-Mentions.
send_direct_message #
- Purpose: send a direct message to one user.
- Key arguments:
user_idoruser_name. - Payload:
content,embeds, or both. - If your integration sets
X-Current-User,user_idanduser_namecan be omitted and the Discord MCP uses that current user by default. - If
X-Target-Users: 0is set, the Discord MCP hides this tool entirely. - If your integration configures a DM prefix, the Discord MCP prepends it automatically before sending the message.
- The hosted default prefix identifies the requester and, when
X-Current-GuildplusX-Current-Channelare available, adds a context link back to Discord. - If
X-Current-Messageis also present with the same guild and channel context, the Discord MCP prefers a direct message link over a channel link. - If your integration needs mention restrictions, use
X-Allowed-Mentions.
send_embeds #
- Purpose: send one or more embeds, with optional text content.
- Key arguments: channel scope +
embeds. - Optional fields:
content. - Required Discord permissions:
SEND_MESSAGESandEMBED_LINKS. - Empty or invalid embeds are filtered out before the request is sent.
- If no valid embeds remain, the Discord MCP rejects the call.
- If your integration needs mention restrictions, use
X-Allowed-Mentions.
create_poll #
- Purpose: send a Discord poll message.
- Key arguments: channel scope,
question,answers. - Optional fields:
duration_hours,allow_multiselect,content. - Required Discord permissions:
SEND_MESSAGESandSEND_POLLS. - If your integration needs mention restrictions, use
X-Allowed-Mentions.
edit_own_message #
- Purpose: edit a message previously sent by the current application.
- Key arguments: channel scope +
message_id. - Optional fields:
content,embeds. - The Discord MCP verifies ownership before sending the edit.
delete_own_messages #
- Purpose: delete one or more messages previously sent by the current application.
- Key arguments: channel scope +
snowflake. snowflakeaccepts one message ID or a list of message IDs.- Maximum batch size:
50unique IDs. - The Discord MCP verifies ownership for each message and deletes them one by one.
- Result shape includes one entry per message plus aggregate counts.
- If
X-Permission-Bitsalready includesMANAGE_MESSAGES, the Discord MCP hides this tool and expectsdelete_messageorbulk_delete_messagesinstead.
delete_message #
- Purpose: delete any message when the application is allowed to moderate it.
- Key arguments: channel scope +
message_id. - Optional fields:
reason.
bulk_delete_messages #
- Purpose: bulk-delete
2..100messages. - Key arguments: channel scope +
message_ids. - Optional fields:
reason.
add_reaction #
- Purpose: add a bot reaction to a message.
- Key arguments: channel scope +
message_id,emoji.
remove_own_reaction #
- Purpose: remove the bot's own reaction from a message.
- Key arguments: channel scope +
message_id,emoji.
clear_reactions #
- Purpose: clear all reactions from a message.
- Key arguments: channel scope +
message_id.
clear_emoji_reactions #
- Purpose: clear one emoji reaction from a message.
- Key arguments: channel scope +
message_id,emoji.
pin_message #
- Purpose: pin a message in a channel.
- Key arguments: channel scope +
message_id. - Optional fields:
reason.
unpin_message #
- Purpose: unpin a message in a channel.
- Key arguments: channel scope +
message_id. - Optional fields:
reason.