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_id and channel_name can 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_range when 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, or count_after
  • Optional fields:
  • authors: strict author filter

Practical Notes #

  • authors is absolute. Messages from other authors are excluded, including from_id when it does not match.
  • count_before and count_after describe the final result size, not “extra” messages in addition to from_id.
  • truncated is only true when 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_id and channel_name become 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 use send_message for that same channel and tells the model to reply normally instead.
  • If X-Target-Channels is 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_id or user_name.
  • Payload: content, embeds, or both.
  • If your integration sets X-Current-User, user_id and user_name can be omitted and the Discord MCP uses that current user by default.
  • If X-Target-Users: 0 is 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-Guild plus X-Current-Channel are available, adds a context link back to Discord.
  • If X-Current-Message is 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_MESSAGES and EMBED_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_MESSAGES and SEND_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.
  • snowflake accepts one message ID or a list of message IDs.
  • Maximum batch size: 50 unique 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-Bits already includes MANAGE_MESSAGES, the Discord MCP hides this tool and expects delete_message or bulk_delete_messages instead.

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..100 messages.
  • 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.