The Discord MCP for servers that run on automation
Connect one bot token and your server becomes workflow material: messages, channels, threads, pins, reactions, roles, members, bans, invites, and webhooks. 66 typed nodes over the Discord HTTP API v10.
What the Discord MCP connector does
The Discord connector for Mattering Automations is a wide surface, not a token gesture. 66 nodes cover the Discord HTTP API v10: read and send messages, edit and pin them, publish announcements, bulk delete, and search a server's history. Create and update channels, set permission overwrites, mint invites, start threads and manage who is in them, add and clear reactions, list and assign roles, read and update server members, handle kicks and bans, and create, read, and post through channel webhooks.
Each capability is a node on the Automations canvas, and every node speaks MCP, the open protocol for connecting AI assistants to tools. Claude, ChatGPT, and any MCP-capable assistant can use them, and they also power Matter, the AI assistant built into the platform. Describe the Discord workflow you want in plain language and it gets built on the canvas in front of you, step by step, where you can see and edit it.
The scope is stated honestly. There is no Discord trigger node yet, so a Discord message cannot start a workflow; you poll a channel with Discord: List Channel Messages on a schedule instead. File attachments, custom emoji images, and avatars need multipart uploads and are not built, though an embed can carry a hosted image by URL. Endpoints that require an end-user OAuth token, plus the gateway, voice, interactions, and application commands, are outside a bot-token connector. Anything else Discord documents can still be called with the generic HTTP Request node, as long as you set the Authorization header to Bot followed by your token yourself.
One connection, three surfaces
- Visual automations. Drag Discord nodes onto the canvas and wire them to triggers, conditions, and other apps.
- AI agents, yours or ours. These nodes speak MCP, the open protocol, so Claude, ChatGPT, and any MCP-capable assistant can use them, and Matter, the agent built into the platform, uses them natively.
- The whole platform. Combine with native tasks, projects, and other connectors, no middleware in between.
Every Discord node, ready to drop on the canvas
66 nodes, generated from the connector itself so this list always matches what ships. Expand a category to browse.
Read and query nodes 27
Discord: Get Bot User
Get the bot user the connector's token belongs to. Takes no parameters, so it doubles as the connector's auth check.
Discord: Get Channel
Get one channel or thread by id.
Discord: Get Message
Get a single message by id, including its reactions and embeds.
Discord: Get Server
Get a server by id, including its roles and features.
Discord: Get Server Ban
Check whether one user is banned. Returns the ban with its reason, or 404 when the user is not banned.
Discord: Get Server Member
Get one member's server profile: nickname, roles, join date and timeout state.
Discord: Get Server Preview
Get the public preview of a server. Works when the bot is a member, or for any server that has Discovery enabled.
Discord: Get Server Role
Get one role by id.
Discord: Get User
Get a Discord user by id. Returns the global user, not their server profile.
Discord: Get Webhook
Get one webhook by id, using the bot token. Requires Manage Webhooks.
Discord: List Active Threads
List every active (not archived) thread in a server that the bot can see.
Discord: List Archived Threads
List a channel's public archived threads, newest archive first. Requires Read Message History.
Discord: List Bot Servers
List the servers the bot is a member of, as partial guild objects.
Discord: List Channel Invites
List the invites that point at a channel. Requires Manage Channels.
Discord: List Channel Messages
Read messages from a channel, newest first. around, before and after are mutually exclusive, pass only one.
Discord: List Channel Webhooks
List a channel's webhooks. The response includes each webhook's token, so treat this node's output as secret.
Discord: List Pinned Messages
List a channel's pinned messages, newest pin first. Page with before, using the last pinned_at value you received.
Discord: List Reaction Users
List the users who reacted to a message with one emoji.
Discord: List Server Bans
List the users banned from a server. Requires Ban Members.
Discord: List Server Channels
List every channel in a server. Threads are not included.
Discord: List Server Emojis
List a server's custom emojis. Use the returned name and id as name:id when adding a reaction.
Discord: List Server Members
List a server's members, ordered by user id. Requires the Server Members privileged intent, which you enable on the app's Bot page.
Discord: List Server Roles
List every role in a server, with its permission bitfield and position.
Discord: List Server Webhooks
List every webhook in a server. The response includes webhook tokens, so treat this node's output as secret.
Discord: List Thread Members
List the members of a thread. Needs the Server Members privileged intent. Set with_member to true to get full member objects and paginated results.
Discord: Search Server Members
Find server members whose username or nickname starts with a string.
Discord: Search Server Messages
Search a server's message history. Needs the Message Content privileged intent enabled on the app. An unindexed server answers 202 with a retry_after instead of results.
Action nodes 39
Discord: Add Member to Thread
Add a user to a thread. The bot must be able to send messages in it.
Discord: Add Reaction
React to a message as the bot. Needs Read Message History, plus Add Reactions when nobody has used that emoji on the message yet.
Discord: Add Role to Member
Give one role to a member, leaving their other roles alone. Requires Manage Roles, and the bot's own highest role must sit above the role being granted.
Discord: Ban Member
DESTRUCTIVE: ban a user from the server and optionally delete their recent messages. Requires Ban Members. Reversible only by an explicit unban, and deleted messages do not come back.
Discord: Bulk Delete Messages
DESTRUCTIVE: permanently delete 2 to 100 messages in one call. Guild channels only, requires Manage Messages, and Discord rejects the whole batch if any message is older than 2 weeks or repeated. This cannot be undone.
Discord: Clear All Reactions
DESTRUCTIVE: remove every reaction from a message, from every user and every emoji at once. Requires Manage Messages and cannot be undone.
Discord: Clear Reactions for One Emoji
DESTRUCTIVE: remove every user's reaction of one emoji from a message. Requires Manage Messages and cannot be undone.
Discord: Create Channel
Create a channel in a server. Requires the Manage Channels permission.
Discord: Create Channel Invite
Create an invite link for a channel. Requires the Create Invite permission. Every field is optional; the defaults give a 24 hour, unlimited-use invite.
Discord: Create Role
Create a role. Every field is optional; with none set you get a role named new role with the same permissions as everyone.
Discord: Create Webhook
Create a webhook on a channel and return it with its token. Requires Manage Webhooks. Store the returned token as a secret.
Discord: Delete Channel
DESTRUCTIVE: permanently delete a channel and every message in it. Deleting a category does not delete its child channels. This cannot be undone.
Discord: Delete Message
DESTRUCTIVE: permanently delete one message. Deleting somebody else's message requires Manage Messages. This cannot be undone.
Discord: Delete Role
DESTRUCTIVE: delete a role. Every member loses it and every channel permission overwrite that referenced it goes with it. This cannot be undone.
Discord: Delete Webhook
DESTRUCTIVE: delete a webhook using the bot token. Anything still posting to that webhook URL breaks immediately, and the URL cannot be recovered.
Discord: Delete Webhook Message
DESTRUCTIVE: permanently delete a message this webhook sent. This cannot be undone.
Discord: Edit Message
Edit a message. Only the original author can change content, embeds and components. Every field is optional; sending content replaces the whole text.
Discord: Edit Webhook Message
Edit a message that this webhook previously sent. The webhook token authorizes the call, so no bot token is sent.
Discord: Join Thread
Add the bot to a thread. The thread must not be archived.
Discord: Kick Member
DESTRUCTIVE: remove a member from the server. They lose their roles and nickname, and can rejoin only with a new invite. Requires Kick Members.
Discord: Leave Thread
Remove the bot from a thread.
Discord: Open Direct Message
Open (or reuse) a direct message channel with one user and return the channel. Feed the returned id into Discord: Send Message to DM someone.
Discord: Pin Message
Pin a message in a channel. Requires the Pin Messages permission.
Discord: Publish Announcement Message
Publish a message in an announcement channel so it reaches every server following that channel.
Discord: Remove Bot Reaction
Remove the bot's own reaction from a message.
Discord: Remove Channel Permission Overwrite
Remove a role or member permission overwrite from a channel, so the channel falls back to server defaults.
Discord: Remove Member from Thread
Remove a user from a thread. Requires Manage Threads on public threads.
Discord: Remove Role from Member
Take one role away from a member, leaving their other roles alone.
Discord: Remove User Reaction
Remove one specific user's reaction from a message. Requires Manage Messages.
Discord: Send Message
Post a message to a channel, thread or DM channel. At least one of content, embeds, components or sticker_ids is required. File attachments are not supported by this node.
Discord: Send Webhook Message
Post a message through a channel webhook URL, with a custom display name and avatar. The webhook token is the credential here, so no bot token is sent. Set wait to true if you need the created message back.
Discord: Set Channel Permission Overwrite
Set the permission overwrite for one role or member on a channel. Requires Manage Roles, and the bot can only grant permissions it already holds.
Discord: Start Thread
Start a thread that is not attached to a message. Set type to 11 for a public thread or 12 for a private one; Discord still defaults to private when type is omitted.
Discord: Start Thread on Message
Start a thread hanging off an existing message. The new thread id equals the source message id, so a message can only ever have one thread. Does not work in forum or media channels.
Discord: Unban User
Lift a ban so the user can rejoin with a fresh invite. Requires Ban Members.
Discord: Unpin Message
Unpin a message. The message itself is untouched, only the pin is removed.
Discord: Update Channel
Update a channel or thread. Every field is optional, send only what should change. Thread-only fields (archived, locked, auto_archive_duration, applied_tags) are ignored on normal channels.
Discord: Update Role
Update a role. Send only the fields that should change.
Discord: Update Server Member
Update a member: nickname, their whole role list, voice state, or a timeout. Note that roles REPLACES the member's roles, it does not add to them; use Discord: Add Role to Member for that.
Connecting Discord takes one credential
Create an application at discord.com/developers/applications, open its Bot page, and use Reset Token to generate a bot token. Discord shows the token once, so copy it immediately. Mattering stores it in a dedicated Discord Bot Token credential and sends it as Authorization: Bot <token>, which is the prefix Discord requires for bot tokens, not Bearer. Then invite the bot to your server with the permissions your nodes need, because the bot can only act in servers it has been added to.
At discord.com/developers/applications, create an application (or open an existing one) and open its Bot page.
Click Reset Token and copy the token. Discord shows it once and never again.
If you plan to use Discord: List Server Members, Discord: List Thread Members, or Discord: Search Server Messages, enable the matching privileged gateway intents on the same Bot page.
Use OAuth2 URL Generator with the bot scope to build an invite link, tick the permissions your workflows need, and add the bot to your server.
In Mattering Automations, open Connectors, click Add Connector, choose Discord, and create a Discord Bot Token credential holding the token.
Run Test Connection: Mattering calls Discord's current-user endpoint with the Bot prefix and reports which bot it authenticated as.
All 66 Discord nodes appear in the canvas palette.
Common uses for the Discord MCP
Alerts and releases posted where the community already is
Any workflow step can end in a Discord post. A deploy finishing, a signed contract, a support escalation, a weekly summary. Discord: Send Message posts it to the channel with values from earlier steps filled in, and Discord: Publish Announcement Message pushes it out to every server following an announcement channel.
Onboarding and role management by rule
When someone is verified, buys a plan, or fills in a form, give them the role that unlocks the right channels with Discord: Add Role to Member, and take it back with Discord: Remove Role from Member when the plan lapses. Discord: Update Server Member sets a nickname, and Discord: Search Server Members finds the person by name when you only have a handle.
Support threads that turn into tracked work
Poll a help channel, hand a new question to an AI step, then open a thread on the original message with Discord: Start Thread on Message, pull the right teammate in with Discord: Add Member to Thread, and reply in the thread with the link to the task the flow just created.
Moderation an agent can carry out
An agent can read a channel, decide, and act: Discord: Delete Message for one post, Discord: Bulk Delete Messages for a spam run, Discord: Kick Member or Discord: Ban Member for the account behind it. Ten nodes are labelled destructive in the palette so the canvas warns before the click, and bans and bulk deletes cannot be undone.
Channel provisioning for every project, cohort, or deal
When work starts, Discord: Create Channel makes the space, Discord: Set Channel Permission Overwrite decides who can see it, and Discord: Create Channel Invite mints a link with the expiry you choose. Every project gets the same structure without anyone building it by hand.
Posting without the bot, through a channel webhook
Discord: Send Webhook Message posts through a channel webhook URL with its own display name and avatar, and sends no bot token at all. It is the cleanest way to let a status page, a build system, or a third party drop into a channel under a distinct identity, and Discord: Create Webhook can mint that webhook for you.
Example: A question in a help channel becomes a tracked task and a thread reply
Built on the Automations canvas in a few minutes, or described in plain language to Matter and built for you.
Trigger: a Scheduled trigger runs every few minutes, because Discord has no trigger node yet.
Discord: List Channel Messages reads the newest messages from the help channel.
A condition step drops messages the flow has already handled and messages posted by bots.
An AI step summarizes the question and suggests a category and priority.
Mattering Productivity: a task is created with the summary, the author, and a due date.
Discord: Start Thread on Message opens a thread on the original message so the conversation has a home.
Discord: Send Message posts the task link into that thread, so the person who asked can see it was picked up.
Discord MCP questions, answered
What can this Discord MCP actually do?
66 nodes over the Discord HTTP API v10, split into 27 read nodes and 39 action nodes. They cover messages (send, edit, delete, bulk delete, pin, crosspost, search), channels and permission overwrites, invites, threads and thread membership, reactions, roles, server members, kicks and bans, servers and emojis, users and direct messages, and webhooks. The full list is on this page, grouped by read and action, generated from the connector's own node spec rather than typed by hand.
Does this work with Claude, ChatGPT, or other AI assistants?
Yes. Mattering exposes these nodes over MCP, an open protocol for connecting AI assistants to tools, so any MCP-capable assistant, including Claude and ChatGPT, can connect to your workspace and work with Discord through them. Matter, the assistant built into the platform, uses the same nodes natively, but it is never the only agent that can drive them.
Can a Discord message trigger a workflow?
Not yet, and it is worth being clear about that. There is no Discord trigger node, because a real one needs either a gateway websocket connection or Discord's Webhook Events delivery, and neither is built. To react to Discord activity today, use a Scheduled trigger with Discord: List Channel Messages and track which message ids you have already handled. The webhook nodes on this page go the other way: they post into Discord, they do not start a run.
What credential does the connector use?
A single Discord bot token from your application's Bot page, stored encrypted in Google Secret Manager. Mattering sends it as Authorization: Bot <token>. That literal Bot prefix is what Discord requires for bot tokens, and Bearer is only for end-user OAuth2 tokens, so pasting a bot token into a generic bearer credential returns 401 on every route. The connector ships a dedicated Discord Bot Token credential type that emits the right prefix, and it strips a pasted Bot or Bearer prefix so the header never doubles up. The bot also has to be invited to the server before any node can do anything there.
Why do some nodes return 403 even with a valid token?
Two reasons, and both are Discord behaviour rather than a connector fault. The first is permissions: the bot needs the right permission in that specific server and channel, and channel-level overwrites can deny something the server role grants. The second is privileged intents. Discord: List Server Members and Discord: List Thread Members need the Server Members intent, and Discord: Search Server Messages is gated on the Message Content intent. Both are toggles on your application's Bot page, and until they are on those calls fail at Discord's end. Apps in more than 100 servers additionally need Discord to approve the intent.
How does the connector handle Discord's rate limits?
It reports them rather than hiding them. Discord limits are per route and per top-level resource, with a documented global ceiling of 50 requests per second per bot, and the per-route bucket numbers are dynamic, so nothing is hard coded. When Discord answers 429, the node returns rate_limited set to true and the retry_after value from the response, and the connector does not retry on its own. You branch on rate_limited and wait retry_after seconds with an explicit Wait node. That is deliberate: Discord temporarily bans an IP at its edge for sustained invalid requests, so a node that silently loops on a failure is a bigger problem than a node that tells you what happened.
Can a workflow post to Discord without a bot?
Yes. Discord: Send Webhook Message posts through a channel webhook URL, and the webhook token in that URL is the credential, so no bot token is sent at all. Discord: Edit Webhook Message and Discord: Delete Webhook Message work the same way. This is useful when you want a distinct display name and avatar per source, or when you do not want to invite a bot at all. Treat the webhook token as a secret: it can be stored as a Secret Value and picked in the node rather than pasted into the graph, and the webhook read nodes return tokens in their output, so do not log those results into task comments or artifacts.
What is not supported?
Anything needing a multipart file upload, so message attachments, custom emoji images, and avatar uploads are not nodes; an embed can still carry a hosted image by URL. Endpoints that need an end-user OAuth2 token, such as adding a member to a server or creating a group DM, are outside a bot-token connector. The gateway and voice surfaces, interactions, and application commands are not request and response steps and are not built, which is also why there is no trigger node. Server-wide mutations such as modifying a server, pruning members, or bulk banning were left out on purpose rather than shipped untested. Anything else Discord documents can be reached with the generic HTTP Request node if you set the Bot authorization header yourself.
Put Discord to work inside your workspace
Connect once, then use every node in visual automations and AI agent workflows across the Mattering platform.
All product names, logos, and brands are property of their respective owners and are used for identification purposes only. Use of these names, logos, and brands does not imply endorsement or affiliation. Discord is a product of its respective owner; Mattering is an independent platform.