Discord
Community chat. Send and manage messages, work with channels and threads, look up and moderate members, and manage roles.
| Property | Value |
|---|---|
| Slug | discord |
| Definition version | 0.1.0 |
| Base URL | https://discord.com/api/v10 |
| Auth schemes | api_key, oauth2 |
| Action tools | 39 |
| By class | 14 read, 19 write, 6 destructive |
| Triggers | 0 |
| Provider rate limit | not declared, so outbound calls are unpaced |
Measured routing accuracy
60 golden cases replayed through the router over the whole index: measured over corpus ea4f12ad2948 (65 toolkits, 2283 tools indexed and 13 declared uncallable), 39 cases written by hand and 21 cases from the paraphrase pass. A case counts as top-1 when its gold tool ranked first and top-8 when it reached the slate at all.
| Measure | Cases | Share |
|---|---|---|
| top-1 | 27/60 | 45.0% |
| top-8 | 52/60 | 86.7% |
The sweep is offline: the reranker is a deterministic identity fake that returns candidates in the order retrieval produced them, so top-1 measures retrieval order rather than a reranked slate. just eval-live measures the same cases through the live reranker.
Authentication
Connect an entity with ConnectionsService.InitiateConnection, naming this toolkit's slug. Credentials stay in the connections vault; callers hold connected-account ids only.
api_key
| Property | Value |
|---|---|
| Placement | header |
| Name | Authorization |
| Rendered as | Bot {key} |
Submit the key with ConnectionsService rather than putting it in a request; it is sealed at rest and never returned.
oauth2
| Property | Value |
|---|---|
| Authorization URL | https://discord.com/oauth2/authorize |
| Token URL | https://discord.com/api/oauth2/token |
| Default scopes | bot, identify, guilds |
| Refresh tokens | yes, the refresh daemon renews ahead of expiry |
Tools
39 action tools. The catalog-wide slug is discord.<tool>, which is what search_tools returns and call_tool takes.
discord.send_message
Post a message to a Discord channel or thread right now. Use when the user wants to send, post, message, or notify people in a Discord channel or server. Pass reply_to_message_id to quote a specific message. Sending into a thread works the same way: pass the thread's own id as channel_id.
Class write (writes, no confirmation needed). Scopes send_messages. Calls POST /channels/{{params.channel_id}}/messages.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
channel_id | string | yes | Channel or thread id to post into, e.g. "1147582039481922560". Resolve a channel name with list_guild_channels. |
content | string | yes | Message text, up to 2000 characters. Discord markdown is supported. |
reply_to_message_id | string | no | Id of a message to quote as a reply, e.g. "1148675039221850112". |
tts | boolean | no | Send as a text-to-speech message. Default false. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
channel_id | string | |
content | string | |
id | string | |
timestamp | string (date-time) |
Also retrieved by: "drop a note in the server", "ping people in a text channel", "shout something out to the whole channel", "let the server know what's going on", "quote someone's message in my reply", "fire off a quick line in the chat".
discord.edit_message
Change the text of a message the bot already posted. Use when the user wants to fix, correct, or update a Discord message that was already sent. Only messages the bot itself posted can be edited.
Class write (writes, no confirmation needed). Scopes send_messages. Calls PATCH /channels/{{params.channel_id}}/messages/{{params.message_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
channel_id | string | yes | Channel or thread id containing the message. |
content | string | yes | Replacement text for the whole message. |
message_id | string | yes | Id of the message to edit, e.g. "1148675039221850112". |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
channel_id | string | |
content | string | |
edited_timestamp | string (date-time) | |
id | string |
Also retrieved by: "fix a typo in something the bot posted", "reword what got sent earlier", "clean up the wording in the last post", "change what was typed by mistake".
discord.delete_message
Delete one message from a Discord channel or thread. Use when the user wants to remove, retract, or take down a single message. Permanent; the message cannot be restored. For two or more messages at once, use bulk_delete_messages instead.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). Scopes manage_messages. Calls DELETE /channels/{{params.channel_id}}/messages/{{params.message_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
channel_id | string | yes | Channel or thread id containing the message. |
message_id | string | yes | Id of the message to delete. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
ok | boolean |
Also retrieved by: "take back something that got posted", "erase a post someone regrets sending", "pull down what was just written in the channel", "undo a message sent by mistake", "wipe one bad post out of the chat".
discord.bulk_delete_messages
Delete two to a hundred messages from a channel in one call. Use when the user wants to clear, purge, or wipe a batch of messages at once. Discord silently skips any message older than 14 days. Permanent. For a single message, use delete_message.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). Scopes manage_messages. Calls POST /channels/{{params.channel_id}}/messages/bulk-delete.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
channel_id | string | yes | Channel id the messages belong to. |
message_ids | array of string | yes | 2 to 100 message ids to delete together. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
ok | boolean |
Also retrieved by: "clear out a bunch of spam at once", "wipe a pile of messages in one shot", "purge a batch of posts from the channel", "nuke a stretch of chat history together", "mass delete everything from that raid".
discord.get_channel_messages
Fetch recent messages from a channel or thread, newest first. Use when the user wants to read, catch up on, or summarize what was said in a Discord channel. For one specific message by id, use get_message.
Class read (reads only). Scopes view_channel, read_message_history. Calls GET /channels/{{params.channel_id}}/messages.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
after | string | no | Only messages newer than this message id. |
before | string | no | Only messages older than this message id. |
channel_id | string | yes | Channel or thread id to read from. |
limit | integer | no | Maximum messages to return, up to 100. Default 50. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
messages | array of object | |
messages[].author | object | |
messages[].author.id | string | |
messages[].author.username | string | |
messages[].content | string | |
messages[].id | string | |
messages[].timestamp | string (date-time) |
Also retrieved by: "what did I miss in the general channel", "catch me up on recent chatter in the server", "scroll back through what people just said", "pull the last few things posted in there", "recap what happened in the channel today".
discord.get_message
Get one specific message by its id: author, text, and timestamp. Use when the user asks about a particular Discord message rather than recent history. For a page of recent messages, use get_channel_messages.
Class read (reads only). Scopes view_channel, read_message_history. Calls GET /channels/{{params.channel_id}}/messages/{{params.message_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
channel_id | string | yes | Channel or thread id containing the message. |
message_id | string | yes | Id of the message to fetch. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
author | object | |
author.id | string | |
author.username | string | |
channel_id | string | |
content | string | |
id | string | |
timestamp | string (date-time) |
Also retrieved by: "what exactly did that one post say", "pull up a single message by its id", "find the exact wording of that specific post", "show me that one message again".
discord.pin_message
Pin a message to the top of a channel's pinned list. Use when the user wants to pin, highlight, or keep a message easy to find later. A channel holds at most 50 pins. Reversible with unpin_message.
Class write (writes, no confirmation needed). Scopes manage_messages. Calls PUT /channels/{{params.channel_id}}/pins/{{params.message_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
channel_id | string | yes | Channel id containing the message. |
message_id | string | yes | Id of the message to pin. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
ok | boolean |
Also retrieved by: "stick that message to the top of the channel", "highlight a post so it's easy to find later", "keep this one visible for everyone", "flag a message as important in the channel".
discord.unpin_message
Remove a message from a channel's pinned list. Use when the user wants to unpin a message that no longer needs to stay highlighted. The message itself is untouched; only its pinned status changes.
Class write (writes, no confirmation needed). Scopes manage_messages. Calls DELETE /channels/{{params.channel_id}}/pins/{{params.message_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
channel_id | string | yes | Channel id containing the message. |
message_id | string | yes | Id of the message to unpin. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
ok | boolean |
Also retrieved by: "take that pinned post off the top", "stop highlighting a message that's no longer relevant", "clear a pin from the channel header", "remove something from the pinned list".
discord.list_pinned_messages
List every message currently pinned in a channel. Use when the user wants to see what's pinned, or find a message they remember pinning earlier. For unpinned history, use get_channel_messages.
Class read (reads only). Scopes view_channel. Calls GET /channels/{{params.channel_id}}/pins.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
channel_id | string | yes | Channel id to list pins from. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
messages | array of object | |
messages[].author | object | |
messages[].author.id | string | |
messages[].author.username | string | |
messages[].content | string | |
messages[].id | string | |
messages[].timestamp | string (date-time) |
Also retrieved by: "what's currently pinned in this channel", "show me the highlighted posts", "see everything someone starred for later", "review the pinned list".
discord.add_reaction
React to a message with an emoji, as the bot. Use when the user wants to react, upvote, or acknowledge a message with an emoji instead of a reply. Accepts a unicode emoji or a custom emoji in name:id form.
Class write (writes, no confirmation needed). Scopes add_reactions. Calls PUT /channels/{{params.channel_id}}/messages/{{params.message_id}}/reactions/{{params.emoji}}/@me.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
channel_id | string | yes | Channel id containing the message. |
emoji | string | yes | Unicode emoji, e.g. "๐", or a custom emoji as "name:id". URL escaped automatically. |
message_id | string | yes | Id of the message to react to. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
ok | boolean |
Also retrieved by: "drop an emoji on that message", "react to a post with a thumbs up", "upvote something with an emoji instead of replying", "acknowledge a message without writing anything".
discord.remove_reaction
Remove the bot's own reaction from a message. Use when the user wants to undo or take back a reaction the bot added. Does not remove other members' reactions.
Class write (writes, no confirmation needed). Scopes add_reactions. Calls DELETE /channels/{{params.channel_id}}/messages/{{params.message_id}}/reactions/{{params.emoji}}/@me.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
channel_id | string | yes | Channel id containing the message. |
emoji | string | yes | The emoji to remove, same form as add_reaction. |
message_id | string | yes | Id of the message to remove the reaction from. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
ok | boolean |
Also retrieved by: "take back an emoji the bot dropped", "undo a reaction that was added earlier", "clear an emoji off a message", "pull the bot's reaction back".
discord.list_guild_channels
List every channel in a Discord server: text, voice, and category channels, with ids and names. Use to browse a server's channels or resolve a channel name to its id. For one channel's own details, use get_channel.
Class read (reads only). Scopes view_channel. Calls GET /guilds/{{params.guild_id}}/channels.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
guild_id | string | yes | Server (guild) id to list channels from, e.g. "1102938475610112233". |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
channels | array of object | |
channels[].id | string | |
channels[].name | string | |
channels[].topic | string | |
channels[].type | integer |
Also retrieved by: "what channels exist in this server", "show me every room in the server", "browse everything set up in this server", "see the full channel list for a server".
discord.get_channel
Get one channel's details by id: name, type, topic, and which server it belongs to. Use when the user asks about a specific channel. For every channel in a server, use list_guild_channels.
Class read (reads only). Scopes view_channel. Calls GET /channels/{{params.channel_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
channel_id | string | yes | Channel or thread id, e.g. "1147582039481922560". |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
guild_id | string | |
id | string | |
name | string | |
parent_id | string | |
topic | string | |
type | integer |
Also retrieved by: "what's this particular channel actually for", "tell me about one specific channel", "is this channel a voice or text one", "give me the details on a single channel".
discord.create_channel
Create a new channel in a server. Use when the user wants to make, start, or set up a channel. type 0 is a text channel, 2 is voice, 4 is a category; default is text. Pass parent_id to nest it under a category.
Class write (writes, no confirmation needed). Scopes manage_channels. Calls POST /guilds/{{params.guild_id}}/channels.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
guild_id | string | yes | Server id to create the channel in. |
name | string | yes | Channel name, e.g. "incident-2026-07". Lowercase letters, numbers, and hyphens, up to 100 characters. |
parent_id | string | no | Optional category channel id to nest this channel under. |
topic | string | no | Optional topic shown in the channel header. |
type | integer | no | Channel type: 0 text, 2 voice, 4 category. Default 0. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
name | string | |
type | integer |
Also retrieved by: "spin up a new text channel for this", "set up a voice room for the team", "open a fresh channel under a category", "start a channel for the incident responders", "get a new room going in the server".
discord.update_channel
Rename a channel, change its topic, or mark it NSFW. Use when the user wants to update, rename, or change settings on an existing channel. Does not move it between servers or delete it.
Class write (writes, no confirmation needed). Scopes manage_channels. Calls PATCH /channels/{{params.channel_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
channel_id | string | yes | Channel id to update. |
name | string | no | New channel name. |
nsfw | boolean | no | Mark the channel as age restricted. |
topic | string | no | New topic text. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
name | string | |
topic | string |
Also retrieved by: "rename this channel to something else", "change the topic on a channel", "mark a channel as age restricted", "tweak the settings on an existing channel".
discord.delete_channel
Delete a channel and its entire message history. Use when the user wants to remove, delete, or get rid of a channel for good. Irreversible: unlike archiving a thread, a deleted channel cannot be brought back.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). Scopes manage_channels. Calls DELETE /channels/{{params.channel_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
channel_id | string | yes | Channel id to delete. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
ok | boolean |
Also retrieved by: "get rid of a channel for good", "wipe out a room and everything in it", "remove a channel from the server entirely", "blow away an old channel we don't need".
discord.create_thread
Start a thread off an existing message, for a focused side conversation. Use when the user wants to open, start, or spin up a thread. auto_archive_duration is in minutes (60, 1440, 4320, or 10080); default 1440 (one day).
Class write (writes, no confirmation needed). Scopes create_public_threads. Calls POST /channels/{{params.channel_id}}/messages/{{params.message_id}}/threads.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
auto_archive_duration | integer | no | Minutes of inactivity before auto-archive: 60, 1440, 4320, or 10080. |
channel_id | string | yes | Channel id containing the message to thread from. |
message_id | string | yes | Id of the message the thread is created on. |
name | string | yes | Thread name, up to 100 characters. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
id | string | |
name | string | |
parent_id | string |
Also retrieved by: "start a side conversation off one post", "spin up a thread under a message", "open a focused discussion branching off a post", "kick off a thread so replies don't clutter the channel".
discord.archive_thread
Archive a thread, closing it and hiding it from the active thread list. Use when the user wants to close, wrap up, or archive a thread that's done. History stays intact and searchable, and unarchive_thread reverses it.
Class write (writes, no confirmation needed). Scopes manage_threads. Calls PATCH /channels/{{params.thread_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
thread_id | string | yes | Thread id to archive. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
archived | boolean | |
id | string |
Also retrieved by: "wrap up a thread that's done", "close out a side conversation", "shelve a thread nobody's replying to anymore", "mark a thread as finished".
discord.unarchive_thread
Reopen an archived thread so it shows in the active list again and accepts new messages. Use when the user wants to reopen, revive, or bring back a thread that was archived.
Class write (writes, no confirmation needed). Scopes manage_threads. Calls PATCH /channels/{{params.thread_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
thread_id | string | yes | Thread id to reopen. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
archived | boolean | |
id | string |
Also retrieved by: "bring back a thread that got closed", "reopen a side conversation from before", "revive an old thread", "un-shelve a thread so it's active again".
discord.list_thread_members
List the user ids of everyone currently in a thread. Use when the user asks who is in a thread or how many people joined it. For a whole server's members, use list_guild_members.
Class read (reads only). Scopes view_channel. Calls GET /channels/{{params.thread_id}}/thread-members.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
thread_id | string | yes | Thread id to list members of. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
members | array of object | |
members[].user_id | string |
Also retrieved by: "who joined this thread", "see everyone following a side conversation", "how many people are actually in this thread", "who's part of that branch off the main channel".
discord.get_guild
Get a Discord server's details: name, owner, and description. Use when the user asks about a specific server as a whole, rather than one of its channels or members.
Class read (reads only). Scopes view_channel. Calls GET /guilds/{{params.guild_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
guild_id | string | yes | Server (guild) id to fetch. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
description | string | |
id | string | |
name | string | |
owner_id | string |
Also retrieved by: "tell me about this particular server", "who owns this server", "what's the description on this server", "give me the basics on one server".
discord.list_guild_members
List members of a server with their ids, usernames, and nicknames. Use to browse who is in a server or resolve a display name to a user id. For one member's own details, use get_guild_member.
Class read (reads only). Scopes guilds.members.read. Calls GET /guilds/{{params.guild_id}}/members.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
after | string | no | Only members with a user id after this one, for paging. |
guild_id | string | yes | Server id to list members from. |
limit | integer | no | Maximum results per page, up to 1000. Default 100. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
members | array of object | |
members[].joined_at | string (date-time) | |
members[].nick | string | |
members[].user_id | string | |
members[].username | string |
Also retrieved by: "who is in this server", "show me everyone on this server", "pull up the full member list for a server", "browse everyone who's joined".
discord.get_guild_member
Get one server member's details by user id: username, nickname, roles, and when they joined. Use when the user asks about a specific person in a server. If you only have an id from a mention or a message, this resolves it.
Class read (reads only). Scopes guilds.members.read. Calls GET /guilds/{{params.guild_id}}/members/{{params.user_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
guild_id | string | yes | Server id the member belongs to. |
user_id | string | yes | User id to look up, e.g. "823469175100112233". |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
joined_at | string (date-time) | |
nick | string | |
roles | array of string | |
user_id | string | |
username | string |
Also retrieved by: "what's this person's nickname in the server", "look someone up by their id in a server", "what roles does this person hold here", "when did this member actually join".
discord.update_guild_member
Change a member's nickname, mute or deafen them in voice, or put them in a timeout until a given time. Use when the user wants to rename, mute, or timeout someone. For adding or removing a role, use add_role_to_member or remove_role_from_member instead.
Class write (writes, no confirmation needed). Scopes manage_nicknames, moderate_members. Calls PATCH /guilds/{{params.guild_id}}/members/{{params.user_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
deaf | boolean | no | Server-deafen the member in voice channels. |
guild_id | string | yes | Server id the member belongs to. |
mute | boolean | no | Server-mute the member in voice channels. |
nick | string | no | New nickname. Empty string clears it. |
timeout_until | string | no | RFC 3339 timestamp the timeout lifts at, e.g. "2026-08-01T00:00:00Z". Omit or set in the past to clear a timeout. |
user_id | string | yes | User id to update. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
communication_disabled_until | string (date-time) | |
nick | string | |
user_id | string |
Also retrieved by: "give someone a nickname in the server", "mute a person in voice chat", "put someone in timeout for a while", "silence a member for a set period", "change what a member is called here".
discord.kick_member
Remove a member from a server. Use when the user wants to kick or remove someone from a Discord server. The person can rejoin with a new invite; their message history stays. For a longer-lasting removal, use ban_member instead.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). Scopes kick_members. Calls DELETE /guilds/{{params.guild_id}}/members/{{params.user_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
guild_id | string | yes | Server id to remove the member from. |
user_id | string | yes | User id of the person to kick. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
ok | boolean |
Also retrieved by: "remove someone from the server", "boot a person out of the server", "get rid of a disruptive member", "show someone the door for now".
discord.ban_member
Ban a member from a server, removing them and blocking them from rejoining until unban_member is called. Use when the user wants to ban someone. Optionally deletes their recent messages across the server via delete_message_seconds (up to 604800, seven days).
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). Scopes ban_members. Calls PUT /guilds/{{params.guild_id}}/bans/{{params.user_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
delete_message_seconds | integer | no | Delete this member's messages from the last N seconds, up to 604800 (7 days). Default 0, no deletion. |
guild_id | string | yes | Server id to ban the member from. |
user_id | string | yes | User id of the person to ban. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
ok | boolean |
Also retrieved by: "ban a troublemaker from the server for good", "block someone from ever rejoining", "permanently remove and lock out a member", "clean out someone's recent messages while banning them".
discord.unban_member
Lift a ban so the person can rejoin a server. Use when the user wants to unban, reinstate, or forgive someone who was previously banned. They still need a fresh invite link to actually come back.
Class write (writes, no confirmation needed). Scopes ban_members. Calls DELETE /guilds/{{params.guild_id}}/bans/{{params.user_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
guild_id | string | yes | Server id to lift the ban on. |
user_id | string | yes | User id of the banned person. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
ok | boolean |
Also retrieved by: "lift a ban on someone", "let a banned person back in", "forgive someone who was previously banned", "reverse a ban so they can rejoin".
discord.list_bans
List everyone currently banned from a server, with the reason if one was given. Use when the user asks who is banned or wants to review the ban list before unbanning someone.
Class read (reads only). Scopes ban_members. Calls GET /guilds/{{params.guild_id}}/bans.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
guild_id | string | yes | Server id to list bans from. |
limit | integer | no | Maximum results per page, up to 1000. Default 1000. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
bans | array of object | |
bans[].reason | string | |
bans[].user_id | string | |
bans[].username | string |
Also retrieved by: "who's currently banned from this server", "show me the ban list", "review who's been blocked from the server", "see the reasons behind past bans".
discord.list_guild_roles
List every role in a server with its id, name, and color. Use to browse the roles that exist or resolve a role name to its id before calling add_role_to_member.
Class read (reads only). Scopes view_channel. Calls GET /guilds/{{params.guild_id}}/roles.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
guild_id | string | yes | Server id to list roles from. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
roles | array of object | |
roles[].color | integer | |
roles[].id | string | |
roles[].name | string | |
roles[].permissions | string |
Also retrieved by: "what roles exist in this server", "show me every role set up here", "browse the role list for a server", "what tags can members be given here".
discord.create_guild_role
Create a new role in a server. Use when the user wants to make or set up a role, for example to group members or gate permissions. color is a decimal RGB value; hoist shows the role as a separate group in the member list.
Class write (writes, no confirmation needed). Scopes manage_roles. Calls POST /guilds/{{params.guild_id}}/roles.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
color | integer | no | Decimal RGB color, e.g. 15158332 for red. Default 0 (no color). |
guild_id | string | yes | Server id to create the role in. |
hoist | boolean | no | Display members with this role separately in the sidebar. |
mentionable | boolean | no | Allow anyone to @mention this role. |
name | string | yes | Role name, e.g. "Moderator". |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
color | integer | |
id | string | |
name | string |
Also retrieved by: "set up a moderator role", "make a new tag members can be given", "build a role to gate permissions", "add a fresh role to the server".
discord.update_guild_role
Rename a role or change its color, hoist, or mentionable settings. Use when the user wants to update, rename, or recolor an existing role. Does not change which members hold the role; for that use add_role_to_member or remove_role_from_member.
Class write (writes, no confirmation needed). Scopes manage_roles. Calls PATCH /guilds/{{params.guild_id}}/roles/{{params.role_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
color | integer | no | New decimal RGB color. |
guild_id | string | yes | Server id the role belongs to. |
hoist | boolean | no | Display members with this role separately in the sidebar. |
mentionable | boolean | no | Allow anyone to @mention this role. |
name | string | no | New role name. |
role_id | string | yes | Role id to update. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
color | integer | |
id | string | |
name | string |
Also retrieved by: "recolor an existing role", "rename a role in the server", "change whether a role is mentionable", "tweak the settings on a role".
discord.delete_guild_role
Delete a role from a server entirely. Use when the user wants to remove or get rid of a role. Every member holding it loses it immediately, and any permission or mention tied to the role stops working. Permanent.
Class destructive (held by the mutation gate until the call's own arguments carry "confirm": true). Scopes manage_roles. Calls DELETE /guilds/{{params.guild_id}}/roles/{{params.role_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
guild_id | string | yes | Server id the role belongs to. |
role_id | string | yes | Role id to delete. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
ok | boolean |
Also retrieved by: "get rid of a role entirely", "remove a tag from the server for good", "wipe out a role everyone had".
discord.add_role_to_member
Give a server member a role. Use when the user wants to assign, grant, or add a role to someone. Resolve the role id with list_guild_roles first if only the role name is known.
Class write (writes, no confirmation needed). Scopes manage_roles. Calls PUT /guilds/{{params.guild_id}}/members/{{params.user_id}}/roles/{{params.role_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
guild_id | string | yes | Server id the member belongs to. |
role_id | string | yes | Role id to add. |
user_id | string | yes | User id to grant the role to. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
ok | boolean |
Also retrieved by: "give someone a role", "tag a person with the moderator role", "grant a member a new role", "assign a role to someone in the server".
discord.remove_role_from_member
Take a role away from a server member. Use when the user wants to revoke, remove, or unassign a role from someone. The member and their other roles are untouched.
Class write (writes, no confirmation needed). Scopes manage_roles. Calls DELETE /guilds/{{params.guild_id}}/members/{{params.user_id}}/roles/{{params.role_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
guild_id | string | yes | Server id the member belongs to. |
role_id | string | yes | Role id to remove. |
user_id | string | yes | User id to remove the role from. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
ok | boolean |
Also retrieved by: "take a role away from someone", "strip a tag off a member", "revoke someone's role", "pull a role from a person's profile".
discord.get_current_user
Get the identity of the connected Discord account itself: its id, username, and discriminator. Use when the user asks which account or bot this integration is running as. For someone else, use get_user.
Class read (reads only). Scopes identify. Calls GET /users/@me.
Takes no arguments.
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
discriminator | string | |
id | string | |
username | string |
Also retrieved by: "which account is this bot running as", "what's my own bot identity here", "who am I logged in as on discord", "show me this integration's own profile".
discord.get_user
Look up a Discord user by id, across the whole platform: their username and discriminator, not scoped to one server. Use when the user asks who someone is by their raw id. For a member's roles and nickname inside a specific server, use get_guild_member instead.
Class read (reads only). No scopes beyond the connection's defaults. Calls GET /users/{{params.user_id}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
user_id | string | yes | Discord user id to look up, e.g. "823469175100112233". |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
discriminator | string | |
id | string | |
username | string |
Also retrieved by: "look up someone by their raw discord id", "who is this person across all of discord", "find someone's username from their id", "resolve an id to a real account".
discord.create_channel_invite
Create an invite link for a channel. Use when the user wants to invite, share access, or generate a link for someone to join a server. max_age is seconds until it expires (0 means never); max_uses caps how many times it can be used (0 means unlimited).
Class write (writes, no confirmation needed). Scopes create_instant_invite. Calls POST /channels/{{params.channel_id}}/invites.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
channel_id | string | yes | Channel id to create the invite for. |
max_age | integer | no | Seconds until the invite expires. 0 means never. Default 86400 (1 day). |
max_uses | integer | no | Maximum number of uses. 0 means unlimited. Default 0. |
temporary | boolean | no | Kick invited members automatically when they go offline unless a role was granted. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
channel_id | string | |
code | string | |
max_age | integer | |
max_uses | integer |
Also retrieved by: "make an invite link for this channel", "generate a way for someone to join the server", "set up a link that expires in a day", "give me a join link with limited uses".
discord.list_guild_invites
List every active invite link for a server, with the channel each one leads to and how many times it has been used. Use when the user wants to see, audit, or review a server's invite links.
Class read (reads only). Scopes manage_guild. Calls GET /guilds/{{params.guild_id}}/invites.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
guild_id | string | yes | Server id to list invites for. |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
invites | array of object | |
invites[].channel_id | string | |
invites[].code | string | |
invites[].max_uses | integer | |
invites[].uses | integer |
Also retrieved by: "what invite links are active right now", "audit the invites for this server", "show me every join link out there", "review who's been inviting people lately".
discord.delete_invite
Revoke an invite link so it can no longer be used to join. Use when the user wants to revoke, cancel, or kill an invite link. A new one can be created immediately with create_channel_invite, so this does not lock people out of a server for good.
Class write (writes, no confirmation needed). Scopes manage_guild. Calls DELETE /invites/{{params.invite_code}}.
Arguments:
| Argument | Type | Required | Notes |
|---|---|---|---|
invite_code | string | yes | The invite's code, e.g. "hK3xQ7mZ" (the part after discord.gg/). |
Result fields (the payload is trimmed to these before it reaches the model):
| Field | Type | Notes |
|---|---|---|
channel_id | string | |
code | string |
Also retrieved by: "kill an invite link", "revoke a join link before it's abused", "cancel an invite code", "shut down a link someone shared by mistake".