discord-mcp
discord-mcp is a comprehensive Discord management server with 90+ tools that lets you control virtually every aspect of your Discord servers through natural language via MCP-compatible clients (Claude Desktop, Claude Code, Cursor, VS Code Copilot).
Server Discovery & Navigation
List all connected guilds, get detailed server info, list/find channels by name
Message Management
Read, send, reply to, edit, delete, search, pin, forward, and crosspost messages
Add/remove reactions, bulk delete (2–100 messages), create threads, send rich embeds
Channel Management
Create, edit, delete, clone, move, and reposition text/voice/category channels
Follow announcement channels, sync permissions with parent category
Permission Management
View, set, reset, and copy per-role/per-member channel permission overwrites
Run full permission audits across all channels
Member Management
List, search, get info on members; set nicknames; kick, ban, unban, bulk-ban, timeout, and prune members
Role Management
List, create, edit, delete roles; assign/remove roles; reorder hierarchy; set custom icons/emoji
Forum Management
Create and manage forum channels, posts/threads, and tags; reply to, archive, or lock posts
Webhook Management
Create, edit, delete, and list webhooks; send/edit/delete webhook messages with custom username, avatar, and embeds
Scheduled Events
List, create, edit, and delete events (voice, stage, external); get subscribers; create event invites
Invite Management
List, create, look up, and delete guild/channel invites
Moderation & Admin
Fetch audit logs (with action filtering), manage membership screening forms, retrieve server statistics (member counts, boost level, etc.)
Provides comprehensive management of Discord servers, including tools for messaging, channel and role configuration, member moderation, forum interactions, and webhook management.
Discord MCP Server
A lightweight, multi-guild Discord MCP server with 95+ tools
Manage your entire Discord server from Claude Desktop, Claude Code, Cursor, VS Code Copilot, or any MCP-compatible client. Messages, channels, roles, permissions, moderation, forums, webhooks, all through natural language.
Why this one?
95+ tools: messages, channels, roles, permissions, moderation, forums, webhooks, scheduled events, invites, DMs, embeds, and more
Multi-guild: works across multiple servers, no
GUILD_IDlock-inLightweight: TypeScript + Node.js, ~70kB package, ~73MB Docker image (vs 400MB+ for Java alternatives)
Modular: clean architecture, easy to extend with new tools
Two install methods: npm or Docker, your choice
Related MCP server: MCP Discord
Quick Start
Add this to your MCP client config and replace YOUR_TOKEN_HERE with your bot token:
{
"mcpServers": {
"discord": {
"command": "npx",
"args": ["-y", "@pasympa/discord-mcp"],
"env": {
"DISCORD_TOKEN": "YOUR_TOKEN_HERE"
}
}
}
}No install needed, npx handles everything.
Don't have a bot yet? See Creating Your Discord Bot.
Configuration
Add the config above to your claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Restart Claude Desktop after saving.
claude mcp add discord -e DISCORD_TOKEN=YOUR_TOKEN_HERE -- npx -y @pasympa/discord-mcpAdd the config above to ~/.cursor/mcp.json. See Cursor MCP docs for details.
Add to your .vscode/mcp.json:
{
"inputs": [
{
"type": "promptString",
"id": "discord-token",
"description": "Discord Bot Token",
"password": true
}
],
"servers": {
"discord": {
"command": "npx",
"args": ["-y", "@pasympa/discord-mcp"],
"env": {
"DISCORD_TOKEN": "${input:discord-token}"
}
}
}
}See VS Code MCP docs for details.
{
"mcpServers": {
"discord": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"DISCORD_TOKEN=YOUR_TOKEN_HERE",
"pasympa/discord-mcp:latest"
]
}
}
}git clone https://github.com/PaSympa/discord-mcp
cd discord-mcp
npm install && npm run build{
"mcpServers": {
"discord": {
"command": "node",
"args": ["/absolute/path/to/discord-mcp/dist/index.js"],
"env": {
"DISCORD_TOKEN": "YOUR_TOKEN_HERE"
}
}
}
}Instead of passing the token in the MCP config, create a .env file at the project root:
DISCORD_TOKEN=YOUR_TOKEN_HEREThe server loads .env automatically via dotenv.
Environment variables
Variable | Default | Description |
| none | Required. Bot token. |
|
| Set to |
|
| Set to |
|
| Comma-separated list of toolsets to expose, to keep the tool list small. Unset or |
| all | Comma-separated guild IDs the server may act on. When set, tool calls targeting any other guild are rejected, whether addressed by guild ID, channel ID, thread ID, webhook, or invite code. |
Since 2.1.1 the server no longer requests the GuildMessages intent at all: nothing here subscribes to message events, and every message this server returns is fetched over REST, which connection intents do not gate. That intent used to make discord.js cache every message flowing through every channel, together with its author, which grew unbounded on a long-running server. Cache sweepers now bound what remains. DISCORD_MESSAGE_CONTENT therefore only affects whether the Message Content intent is requested at connect time; it does not change what any tool returns.
These flags only control which gateway intents the server requests when identifying. Requesting a privileged intent that is not enabled in the Developer Portal makes the connection fail at the first tool call (close code 4014); set the flag to false to connect anyway.
Data access is governed by the portal toggles, not by these flags: this server reads everything over the REST API, which Discord gates on the portal setting alone. So with the portal toggles on, setting these flags to false loses nothing. With a portal toggle off, the corresponding data is restricted regardless of the flags: message bodies come back empty (content, embeds, attachments; except the bot's own messages, DMs, and messages that mention the bot) and member listing fails; enable the toggle in the portal to restore it.
Toolsets (DISCORD_MCP_TOOLSETS): discovery, messages, channels, permissions, members, roles, moderation, screening, stats, forums, webhooks, scheduled_events, invites, dm. Example; DISCORD_MCP_TOOLSETS=discovery,messages,members exposes only the discovery, message, and member tools. Note: a toolset ships its whole module, including its destructive tools (messages includes bulk delete; members includes kick/ban); use DISCORD_ALLOWED_GUILDS and the dry-run defaults to bound them. Only the listed toolsets' tools are advertised and callable. Unknown names make the server fail at startup instead of silently exposing everything (an empty value counts as unset and exposes all).
Creating Your Discord Bot
New Application > give it a name
Bot tab > Reset Token > copy the token
Enable Privileged Gateway Intents (this server requests both by default, but new Discord apps have the portal toggles OFF):
Server Members Intent
Message Content Intent
Important: if the bot requests a privileged intent that is not enabled here, Discord closes the connection with code
4014and every tool call fails. Enable both, or stop requesting the ones you don't need via the environment variables above.OAuth2 > URL Generator:
Scopes:
botPermissions:
Send Messages,Read Message History,Manage Channels,Manage Roles,Kick Members,Ban Members,Moderate Members,View Audit Log,Manage Messages,Manage Threads,Add Reactions,Manage Guild,Manage Webhooks,Manage Events,Create Events,Create Instant Invite,Manage Nicknames,Pin Messages,Embed Links,Create Public Threads,Send Messages in Threads
Copy the generated URL and invite the bot to your server
Available Tools (99)
Discovery & Navigation (4 tools)
Tool | Description |
| List all servers the bot is connected to |
| Get detailed guild info (name, members, channels, roles, boosts) |
| List all channels in a guild grouped by category |
| Find a channel by name (partial match) |
Messages (20 tools)
Tool | Description |
| Read messages, paging back through history |
| Send a plain text message |
| Reply to a specific message |
| Edit a message sent by the bot |
| Delete a specific message |
| Add a reaction emoji to a message |
| Remove reactions (all, by emoji, or by user) |
| List users who reacted with a specific emoji |
| Create a thread from a message or standalone |
| Delete multiple messages at once (2-100) |
| Send a rich embed with all options |
| Edit an embed previously sent by the bot |
| Send up to 10 embeds in a single message |
| Pin or unpin a message |
| List a message's attachments with download urls |
| List all pinned messages in a channel |
| Search messages by keyword (last 100) |
| Search across every channel using Discord's search index |
| Publish a message to announcement channel followers |
| Forward a message to another channel |
Channels (8 tools)
Tool | Description |
| Create a text, voice channel or category |
| Delete a channel |
| Edit name, topic, slowmode, NSFW flag |
| Move a channel into/out of a category |
| Clone a channel with its permissions |
| Set display position within a category |
| Follow an announcement channel |
| Sync permissions with parent category |
Channel Permissions (6 tools)
Tool | Description |
| List all permission overwrites on a channel |
| Allow/deny permissions for a role on a channel |
| Allow/deny permissions for a member on a channel |
| Remove all overwrites (reset to inherited) |
| Copy overwrites from one channel to another |
| Full permission audit for all channels |
Members (11 tools)
Tool | Description |
| List guild members with their roles |
| Detailed member info (roles, permissions, join date) |
| Search members by username or nickname |
| Set or clear a member's nickname |
| Kick a member |
| Ban a member (optionally delete recent messages) |
| Unban a user |
| Ban multiple users at once (raid mitigation) |
| List all banned users |
| Timeout a member (0 to remove) |
| Remove inactive members (with dry run) |
Roles (9 tools)
Tool | Description |
| List all roles with permissions and member count |
| Create a new role |
| Edit a role (name, color, permissions, hoist, mentionable) |
| Delete a role |
| Assign a role to a member |
| Remove a role from a member |
| List all members with a specific role |
| Change a role's position in the hierarchy |
| Set a custom icon or unicode emoji on a role |
Forums (10 tools)
Tool | Description |
| List all forum channels in a guild |
| Create a new forum channel |
| Create a post/thread in a forum |
| Get a post's details and messages |
| List threads (active + archived) |
| Reply to a forum post |
| Delete a forum thread |
| Get available tags |
| Set/update tags on a forum |
| Update title, archived, locked, tags |
Webhooks (8 tools)
Tool | Description |
| Create a webhook on a channel |
| Send via webhook (custom username/avatar, embeds) |
| Edit a webhook's name, avatar, or channel |
| Delete a webhook |
| List webhooks for a channel or guild |
| Edit a message sent by a webhook |
| Delete a message sent by a webhook |
| Fetch a specific webhook message |
Scheduled Events (7 tools)
Tool | Description |
| List all scheduled events in a guild |
| Get detailed info about a scheduled event |
| Create a voice, stage, or external event |
| Edit an existing scheduled event |
| Delete a scheduled event |
| Get users who marked "Interested" |
| Create an invite linked to an event |
Direct Messages (7 tools)
Tool | Description |
| Send a direct message to a user by their user ID |
| Send an embed in a DM to a user |
| Read message history from a DM conversation |
| Reply to a specific DM message |
| Edit a previously sent DM (text) |
| Edit a previously sent DM embed |
| Delete a DM message |
Invites (5 tools)
Tool | Description |
| List all active invites in a guild |
| List invites for a specific channel |
| Get details about an invite by its code |
| Create an invite link for a channel |
| Revoke an invite |
Moderation & Screening (3 tools)
Tool | Description |
| Fetch the guild audit log |
| Get the membership screening form |
| Update screening rules for new members |
Stats (1 tool)
Tool | Description |
| Server stats: members, channels, roles, boost level |
Usage Examples
"List all servers the bot is in"
"Read the last 10 messages in #general"
"Send 'Hello everyone!' to the announcements channel"
"Create a forum channel called 'feedback' with tags Bug, Feature, Question"
"Show the full permission audit for the server"
"Create a webhook on #notifications and send a test message"
"Ban user 112233445566778899 and delete their messages from the last 3 days"
"Create an event called 'Game Night' for next Friday at 8pm"
"List all upcoming events in the server"
"Create a permanent invite for #general"
"List all active invites and delete expired ones"
"Send a DM to user 112233445566778899 saying 'Your build passed!'"
"Search for members named 'john'"
"List all banned users in the server"
"Show all pinned messages in #general"
"Forward that message to #announcements"Finding Discord IDs
Enable Developer Mode in Discord:
Settings > Advanced > Developer Mode
Then right-click on a server, channel, or user > Copy ID.
Project Structure
discord-mcp/
├── src/
│ ├── index.ts ← Entry point (MCP server + transport)
│ ├── client.ts ← Discord client + shared helpers
│ ├── constants.ts ← Shared constants (limits, defaults)
│ ├── embeds.ts ← Shared embed schema + builder
│ └── tools/
│ ├── index.ts ← Tool registry (toolset gating, dispatch)
│ ├── define.ts ← defineTool/defineModule + shared zod fields
│ ├── types.ts ← Shared TypeScript interfaces
│ ├── discovery.ts ← Guild/channel discovery
│ ├── messages.ts ← Message CRUD, reactions, threads, embeds
│ ├── channels.ts ← Channel management
│ ├── permissions.ts ← Permission overwrites
│ ├── members.ts ← Member management
│ ├── roles.ts ← Role CRUD and assignment
│ ├── moderation.ts ← Audit log
│ ├── screening.ts ← Membership screening
│ ├── stats.ts ← Server statistics
│ ├── forums.ts ← Forum channels, posts, tags
│ ├── webhooks.ts ← Webhook management
│ ├── scheduledEvents.ts ← Scheduled events
│ ├── invites.ts ← Invite management
│ └── dm.ts ← Direct messages
├── test/ ← node:test suite (schemas, gating, allow-list)
├── scripts/ ← sync-version.js (npm version hook)
├── .github/workflows/ ← CI/CD (build check + auto release)
├── Dockerfile
├── .dockerignore
├── .env.example
├── package.json
├── tsconfig.json
├── CHANGELOG.md
├── CONTRIBUTING.md
├── SECURITY.md
└── README.mdAdding a new tool
Create a new file in
src/tools/(e.g.events.ts)Declare each tool with
defineTool({ name, description, annotations, schema, handle })and exportdefineModule([...])as the defaultImport it and add it to
allToolsetsinsrc/tools/index.ts(the key is itsDISCORD_MCP_TOOLSETSname)
Security
Never commit your Discord token to Git
Use environment variables or a
.envfile (not versioned)Give the bot only the permissions it needs
Restrict the server to specific servers with
DISCORD_ALLOWED_GUILDSIrreversible mass actions (
bulk_ban,prune_members,bulk_delete_messages,delete_channel) default to adry_runpreview; passdry_run:falseto apply
Contributing
Contributions are welcome!
Fork the repository
Create a feature branch (
git checkout -b feature/my-feature)Follow the modular structure, see Adding a new tool
Commit your changes and open a pull request
License
MIT, see LICENSE for details.
Available Tools
99 toolsdiscord_add_reactionAIdempotent
Add a single emoji reaction to a message as the bot. Requires the Add Reactions and Read Message History permissions. Use discord_remove_reactions to undo. Idempotent: re-adding the bot's existing reaction has no effect.
| Name | Required | Description | Default |
|---|---|---|---|
| emoji | Yes | Unicode emoji (e.g. '👍') or a custom emoji in 'name:id' format. | |
| channel_id | Yes | ID (snowflake) of the channel or thread containing the message. | |
| message_id | Yes | ID of the message to react to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true, and the description reinforces this with a concrete explanation of the idempotent behavior. It adds valuable context beyond the annotations by stating the required permissions and that the action is performed as the bot. There is no contradiction with any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each carrying distinct useful information: action, permissions, undo path, and idempotency. The core action is front-loaded, and there is no redundant or filler wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter action with no output schema, the description covers the essential context: what it does, what permissions are needed, how to undo it, and its idempotent nature. The schema already documents parameter formats, so nothing important is missing for an agent to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all parameters with descriptions, including emoji format ('name:id' for custom emojis) and snowflake patterns for IDs. The description adds little parameter-specific meaning beyond 'single emoji reaction', but with 100% schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: adds a single emoji reaction to a message as the bot. The phrase 'as the bot' clarifies the acting identity, and 'single emoji reaction' disambiguates it from broader message actions. This clearly distinguishes it from related siblings like discord_remove_reactions and discord_get_reactions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit permission requirements (Add Reactions and Read Message History), which tells the agent when the tool is usable. It also names discord_remove_reactions as the undo alternative, giving clear routing for the reverse operation. It does not discuss choosing this over sending an emoji in a message, but that is not a strong competing alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_add_roleAIdempotent
Assign an existing role to a member. Requires the Manage Roles permission, and the role must be below the bot's highest role. Idempotent: assigning a role the member already has has no effect. Use discord_remove_role to undo.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional reason recorded in the server audit log. | |
| role_id | Yes | ID (snowflake) of the role to assign. | |
| user_id | Yes | Discord user ID (snowflake) of the member to give the role to. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: the Manage Roles permission requirement, the role hierarchy restriction, and the concrete effect of idempotency (assigning an already-held role has no effect). These details are not present in the raw annotations, which only flag idempotentHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the action, the preconditions, and the idempotency/undo behavior. It is front-loaded with the core purpose and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward role-assignment tool, the description fully covers the necessary execution context: required permission, hierarchy constraint, idempotent behavior, and the inverse sibling. No output schema exists, but the description covers the aspects that matter for invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all four parameters with 100% description coverage, which sets a baseline of 3. The description adds extra meaning beyond the schema by clarifying that the role must be an existing role and must sit below the bot's highest role, directly constraining the valid role_id values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Assign an existing role to a member.' It also distinguishes from the obvious sibling by naming discord_remove_role as the undo operation, so an agent can immediately tell this tool apart from related role and member tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states clear preconditions for use: requires the Manage Roles permission and the role must be below the bot's highest role. It also points to discord_remove_role as the inverse operation. It stops short of explicitly listing when not to use this tool versus other role-related tools, but the undo hint and role constraints provide solid guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_audit_permissionsARead-only
Generate a server-wide permission report: for every channel that has overwrites, lists each role/member and their allowed/denied permissions (entity names resolved). Read-only. Returns { channels: [...] } with channel, channelId, overwrites. Use discord_get_channel_permissions for a single channel.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes | Discord server (guild) ID (snowflake). |
Output Schema
| Name | Required | Description |
|---|---|---|
| channels | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint true, and the description reinforces it with 'Read-only.' It adds meaningful behavioral context: only channels with overwrites are included, names are resolved, and the return shape is { channels: [...] } with channel, channelId, and overwrites. No annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each earning its place: purpose/scope, read-only nature, return shape, and routing to the sibling tool. The key action is front-loaded, and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only audit tool with one schema-documented parameter and an output schema, the description covers the essential behavior, return payload, and alternative usage. An agent has everything needed to invoke and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents guild_id. The description does not need to add parameter details; it simply aligns 'server-wide' with the guild scope. Baseline 3 is appropriate because the schema carries the semantic weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Generate a server-wide permission report') and precisely scopes its behavior to channels with overwrites, listing roles/members with allowed/denied permissions. This makes it clearly distinct from the many permission-related sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative tool for a narrower use case: 'Use discord_get_channel_permissions for a single channel.' It also implies when to choose this tool (server-wide audit) versus per-channel lookup, leaving no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_ban_memberADestructiveIdempotent
Ban a user from the server, blocking re-entry until unbanned. Optionally bulk-deletes their recent messages. Requires the Ban Members permission, and the bot's top role must outrank the target's. Use discord_unban_member to reverse, or discord_kick_member for a non-permanent removal. The reason is recorded in the audit log.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional reason recorded in the server audit log. | |
| user_id | Yes | Discord user ID (snowflake) of the user to ban. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). | |
| delete_message_days | No | Also delete the user's messages from the last N days (0–7). Default 0 (delete nothing). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true and readOnlyHint=false, and the description adds exactly the kind of context the rubric asks for: what gets destroyed (recent messages via bulk-delete), the auth/permission requirement, the role-hierarchy constraint, and the audit-log side effect. Everything disclosed is consistent with the annotations; idempotentHint=true aligns with the 'blocking re-entry' state model. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each earning its place: core purpose and permanence, optional destructive behavior, prerequisites plus sibling routing, and the audit-log side effect. The most decision-relevant information is front-loaded before alternatives and side effects, with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 100% schema coverage, annotations carrying the safety profile, and no output schema, nothing essential is missing. An agent knows what the operation does, what it destroys, what permissions are needed, how to reverse it, and the non-permanent alternative — all required to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (reason, user_id, guild_id, delete_message_days) is already fully documented in the schema. The description loosely ties 'bulk-deletes their recent messages' to delete_message_days and 'audit log' to reason, but it adds no new semantic detail beyond what the schema provides. The baseline 3 for high coverage is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource — 'Ban a user from the server' — and adds the defining effect, 'blocking re-entry until unbanned.' It also distinguishes itself from nearby siblings by name (discord_unban_member, discord_kick_member), so an agent can differentiate the operation without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes to alternatives: 'Use discord_unban_member to reverse, or discord_kick_member for a non-permanent removal.' It also states the hard prerequisites upfront — 'Requires the Ban Members permission, and the bot's top role must outrank the target's' — leaving no ambiguity about when this tool is applicable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_bulk_banADestructive
Ban many users in a single call, intended for raid mitigation. SAFE BY DEFAULT: dry_run is true unless explicitly set to false, so call it first to preview the exact list of user IDs that would be banned, then re-call with dry_run:false to actually ban them. Requires both the Ban Members and Manage Server permissions. Returns counts of banned vs failed users; Discord rejects the whole call with an error if no user could be banned. Use discord_ban_member for a single ban with finer control.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional reason recorded in the server audit log. | |
| dry_run | No | If true (default), only returns the user IDs that would be banned without banning anyone. Set false to actually ban. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). | |
| user_ids | Yes | Array of user IDs (snowflakes) to ban (max 200 per call, a Discord API limit). | |
| delete_message_seconds | No | Also delete each user's messages from the last N seconds (0–604800, i.e. up to 7 days). Default 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the description's safety warning reinforces rather than repeats it. The description adds valuable behavioral details: dry_run defaults to true for safe preview, requires Ban Members and Manage Server permissions, returns counts of banned vs failed users, and fails wholesale with an error if no user can be banned. This goes beyond what the annotations provide, though it doesn't specify the exact error shape or response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, all information-dense with no filler. The critical safety instruction (dry_run default) is front-loaded, followed by permissions, return values, and the sibling comparison. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive bulk operation, and the description covers prerequisites (permissions), safety workflow (dry-run), behavior (counts, wholesale failure), and routing (sibling tool for single bans). The output schema is absent, but the description's mention of returned counts and error behavior compensates enough. The 200-user max and delete_message_seconds bounds are already in the schema. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all five parameters thoroughly. The description adds cross-parameter context: it explains the safe-by-default workflow tying dry_run to the overall call behavior, and mentions the 200-user API limit context. It doesn't add per-parameter details beyond the schema, but it highlights the most important behavioral parameter (dry_run) and the safety implications.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Ban') and resource ('many users in a single call'), with an explicit intended use case ('raid mitigation'). It distinguishes itself from discord_ban_member by naming the sibling and the condition for choosing it (single ban with finer control).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: use for raid mitigation and bulk banning; use discord_ban_member for a single ban with finer control. It also gives a clear workflow: call with dry_run first to preview, then re-call with dry_run:false. This is actionable routing for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_bulk_delete_messagesADestructive
Permanently delete multiple recent messages in one call. IRREVERSIBLE. SAFE BY DEFAULT: dry_run is true unless explicitly set to false, so call it first to preview, then re-call with dry_run:false to actually delete. Discord only allows bulk-deleting messages younger than 14 days; older ones are skipped. Requires the Manage Messages permission. Returns the number deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| count | Yes | Number of recent messages to delete (2–100). | |
| dry_run | No | If true (default), only reports how many would be deleted without deleting. Set false to actually delete. | |
| channel_id | Yes | ID (snowflake) of the channel or thread to delete messages from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint=true annotation by disclosing irreversibility, the dry_run safe-by-default behavior, the 14-day Discord restriction, the required Manage Messages permission, and the return value. This gives an agent a complete behavioral picture before invoking a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact sentences, each carrying unique essential information: purpose, irreversibility, safe dry_run workflow, platform constraint, permission, and return value. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive multi-parameter tool with no output schema, this description is complete: it covers prerequisites, constraints, safety workflow, side effects, and outcome. An agent has everything needed to invoke it correctly and avoid accidental deletion.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description mostly reinforces the dry_run behavior already documented in the schema. It adds a useful preview-then-delete workflow, but does not substantially redefine or extend the parameter meanings beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action, resource, and scope: 'Permanently delete multiple recent messages in one call.' This clearly distinguishes it from single-message deletion tools like discord_delete_message and other message operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear contextual guidance: use for bulk deletion of recent messages, respect the 14-day Discord limit, and run with dry_run first to preview before actual deletion. It does not explicitly name the alternative single-delete tool or state 'do not use for one message,' but the context is strong enough for an agent to choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_clone_channelA
Create a copy of a channel, including its name, topic, and permission overwrites (but not its messages). Requires the Manage Channels permission. Returns the cloned channel's name and ID.
| Name | Required | Description | Default |
|---|---|---|---|
| new_name | No | Optional name for the clone. Defaults to the source channel's name. | |
| channel_id | Yes | ID (snowflake) of the channel to clone. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: the permission requirement, the returned payload (cloned channel's name and ID), and the precise copy scope including the explicit non-copying of messages. This supplements rather than contradicts the annotations — readOnlyHint=false aligns with creating, destructiveHint=false aligns with a non-destructive clone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences deliver action, scope, prerequisite, and return value with zero filler. The action and scope are front-loaded, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the explicit return value statement is a necessity and is provided. The only notable gap is that the description is silent on whether the clone preserves the source channel's type or category placement, which an agent might reasonably assume; this is a minor ambiguity for an otherwise well-covered tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: both channel_id and new_name are already documented in the schema, including the default behavior of new_name. The description's mention of "name" in the copied scope loosely ties to new_name, but this is a marginal addition beyond what the schema already conveys, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Create a copy of a channel" states a specific verb and resource, and the description goes further by enumerating exactly what is included (name, topic, permission overwrites) and excluded (messages). This scope precision clearly differentiates it from siblings like discord_create_channel (new empty channel) and discord_copy_permissions (permissions only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear applicability context: the Manage Channels permission prerequisite and the explicit "but not its messages" boundary, which tells an agent when this tool will not satisfy a request (e.g., if message history must be duplicated). However, it never names alternative tools such as discord_create_channel or discord_copy_permissions, so when-not guidance remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_copy_permissionsADestructiveIdempotent
Replace the target channel's permission overwrites with a copy of the source channel's. The target's existing overwrites are overwritten. Requires the Manage Roles permission. Returns a confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional reason recorded in the server audit log. | |
| source_channel_id | Yes | ID (snowflake) of the channel to copy overwrites from. | |
| target_channel_id | Yes | ID (snowflake) of the channel whose overwrites will be replaced. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description adds valuable specifics beyond them: exactly what gets destroyed ('The target's existing overwrites are overwritten'), the required permission, and the return behavior ('Returns a confirmation'). This is useful context the structured annotations cannot convey, and it does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, each earning its place: the core operation, the destructive consequence, and the permission/return note. The most decision-critical information is front-loaded, with zero filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with full schema coverage and no output schema, the description covers the essential operational context: what is copied, what is overwritten, the permission gate, and the return value. Minor gaps remain — e.g., behavior when source and target are in different guilds or are different channel types — but these are edge cases beyond the core call contract.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all three parameters including the reason audit-log field and both snowflake IDs. The tool description adds no parameter-level information beyond the schema, which is the baseline-3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Replace'), names the resource (target channel's permission overwrites), and specifies the source ('a copy of the source channel's'). It is immediately distinguishable from siblings like discord_lock_channel_permissions or discord_reset_channel_permissions because the direction, source, and target are all explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The operation semantics make the use case clear — make one channel's permissions match another's — and the Manage Roles prerequisite is stated. However, no alternatives are named or excluded; an agent choosing among overlapping siblings such as discord_clone_channel, discord_set_role_permission, or discord_reset_channel_permissions gets no guidance on when this tool is preferred over those.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_create_channelA
Create a text channel, voice channel, or category in a server. Requires the Manage Channels permission. For forum channels use discord_create_forum_channel instead. Returns the new channel's name and ID.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the new channel (max 100 characters). | |
| type | No | Channel type to create. Defaults to 'text'. | |
| topic | No | Optional channel topic/description. Applies to text channels only. | |
| guild_id | Yes | Discord server (guild) ID (snowflake) to create the channel in. | |
| category_id | No | Optional category (snowflake) to nest the new channel under. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this is a write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds valuable context beyond that: the auth requirement (Manage Channels permission) and the return payload ('Returns the new channel's name and ID'), which is especially useful since no output schema exists. It doesn't cover failure modes like duplicate-name conflicts, but the added context is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: purpose, permission prerequisite, sibling routing, and return value. Every sentence earns its place, and the most decision-relevant information (what it creates and where it doesn't apply) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity tool with five params, a full schema, and no output schema, the description covers the essentials: scope, permission, alternative routing, and return format. It slightly under-specifies error conditions and duplicate-name handling, but nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all five parameters including defaults and constraints. The description reinforces the 'type' enum values (text, voice, category) but adds no new parameter-level information, which aligns with the baseline-3 rule for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb + resource ('Create a text channel, voice channel, or category in a server') and clearly enumerates the supported channel types, which separates it from the generic title 'Create channel'. It also explicitly distinguishes itself from discord_create_forum_channel by name, so an agent can disambiguate without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit prerequisite ('Requires the Manage Channels permission'), an explicit exclusion ('For forum channels use discord_create_forum_channel instead'), and names the exact alternative tool. This covers when-to-use, when-not-to-use, and the alternative all in one sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_create_event_inviteA
Create a shareable invite URL that points to a scheduled event, so recipients land on the event when joining. Requires the Create Instant Invite permission. Returns the invite URL.
| Name | Required | Description | Default |
|---|---|---|---|
| max_age | No | Invite lifetime in seconds, 0–604800 (7 days); 0 means it never expires. Default 86400 (24h). | |
| event_id | Yes | ID (snowflake) of the scheduled event to link the invite to. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). | |
| max_uses | No | Maximum number of uses, 0–100; 0 means unlimited. Default 0. | |
| channel_id | No | Channel (snowflake) the invite points to. Defaults to the event's own channel; REQUIRED for EXTERNAL events, which have none. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-read-only, non-destructive, non-idempotent action. The description adds useful context beyond that by disclosing the permission requirement ('Requires the Create Instant Invite permission') and stating the output ('Returns the invite URL'). It does not cover failure or rate-limit behaviors, but the added auth prerequisite is valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary action and outcome are front-loaded, and the permission requirement and return value are stated without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with well-documented parameters and no output schema, the description covers the key missing pieces: the permission needed, the invite's purpose, and the return value. The agent has enough to select and invoke this tool correctly without additional context from sibling descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all five parameters, including defaults, ranges, and special cases such as channel_id being required for external events. The description adds no additional parameter-level detail, which matches the baseline expectation of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create'), a specific resource ('shareable invite URL'), and a distinct target ('points to a scheduled event'). This clearly separates it from the sibling discord_create_invite, whose scope is a regular channel invite. The phrase 'so recipients land on the event when joining' further sharpens the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case by explaining that the invite points to a scheduled event and mentions the required 'Create Instant Invite' permission. However, it does not explicitly contrast this with discord_create_invite or state when a regular invite should be used instead, so usage guidance is inferred rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_create_forum_channelA
Create a new forum channel in a server. A forum holds posts (threads) rather than a linear message feed. Requires the Manage Channels permission. Use discord_create_channel for text/voice channels instead. Returns the new channel's name and ID.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the new forum channel (max 100 characters). | |
| topic | No | Guidelines/topic text shown at the top of the forum. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). | |
| category_id | No | Optional category (snowflake) to nest the forum under. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations convey only readOnly=false, idempotent=false, destructive=false; the description adds beyond this by disclosing the authorization requirement ('Requires the Manage Channels permission') and the return payload ('Returns the new channel's name and ID'), which is valuable since there is no output schema. It does not cover failure behavior or rate limits, but the added context meaningfully exceeds the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, each earning its place: purpose, concept, permission prerequisite, sibling alternative, and return value. The core action is front-loaded and there is zero filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create operation with no output schema, the description provides the full picture: purpose, conceptual model, permission requirement, sibling routing, and return value, while the schema documents every parameter. Only minor details such as duplicate-creation behavior or rate limits are unmentioned, but annotations already signal non-idempotence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so name, topic, guild_id, and category_id are each already documented. The description adds no parameter-level guidance, but the baseline of 3 applies when the schema carries the full burden; no compensation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action and resource — 'Create a new forum channel in a server' — and clarifies the concept: 'A forum holds posts (threads) rather than a linear message feed.' It also names the sibling it is not (discord_create_channel for text/voice channels), so an agent can distinguish the tools without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes selection: 'Use discord_create_channel for text/voice channels instead,' and the forum-vs-linear-feed distinction defines the condition that selects this tool. The 'Requires the Manage Channels permission' prerequisite also tells the agent when the call is authorized. No inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_create_forum_postA
Create a new post (a thread with a starter message) in a forum channel. Requires the Send Messages and Create Public Threads permissions. Use discord_reply_to_forum to add follow-up messages. Returns the new post's name and thread ID.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Title of the post, used as the thread name (max 100 characters). | |
| content | Yes | Body of the post's starter message (max 2000 characters). | |
| applied_tags | No | Optional tag IDs to apply. Get valid IDs from discord_get_forum_tags. | |
| forum_channel_id | Yes | ID (snowflake) of the forum channel to post in. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as a write, non-idempotent, non-destructive operation. The description adds value beyond that by disclosing required permissions, the return payload (post name and thread ID), and the thread-plus-starter-message structure. It does not contradict any annotation, but failure behavior is not addressed, preventing a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each carrying distinct value: purpose, prerequisites, alternative routing, and return value. The core action is front-loaded and there is zero filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since no output schema exists, the description correctly takes responsibility for disclosing the return value (post name and thread ID), and it covers prerequisites and the most relevant sibling. Remaining gaps are minor — failure modes and invalid tag handling are not mentioned — but for a 4-parameter write tool this is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies. The description adds no parameter-level detail beyond what the schema already documents — for example, title-as-thread-name and content-as-starter-message are both already stated in the schema property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Create a new post (a thread with a starter message) in a forum channel.' The parenthetical clarifies that a forum post is a thread plus a starter message, distinguishing this tool from discord_send_message and discord_create_thread without needing to inspect either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the sibling alternative and the condition that selects it: 'Use discord_reply_to_forum to add follow-up messages,' which tells the agent when NOT to use this tool. It also states the prerequisite permissions (Send Messages and Create Public Threads) that gate invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_create_inviteA
Create an invite link for a channel, optionally limiting its lifetime, uses, and membership type. SECURITY: anyone with the returned link can join the server. Requires the Create Instant Invite permission. Returns the invite URL and code.
| Name | Required | Description | Default |
|---|---|---|---|
| unique | No | If true, always mint a fresh invite instead of reusing an equivalent existing one. Default false. | |
| max_age | No | Invite lifetime in seconds, 0–604800 (7 days); 0 means it never expires. Default 86400 (24h). | |
| max_uses | No | Maximum number of uses, 0–100; 0 means unlimited. Default 0. | |
| temporary | No | If true, members who join via this invite are removed when they disconnect (unless they get a role). Default false. | |
| channel_id | Yes | ID (snowflake) of the channel the invite leads to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond the annotations: a security warning that anyone with the returned link can join the server, the required 'Create Instant Invite' permission, and the return payload. This goes well beyond the readOnlyHint/idempotentHint/destructiveHint flags and helps the agent anticipate side effects and failure conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: purpose, security caveat, permission requirement, and return value are all stated efficiently. Important warnings are front-loaded and every sentence adds information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description covers the tool's purpose, key behavior, permission requirement, security implications, and return values. The remaining parameter details are fully documented in the input schema, so nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains each parameter thoroughly. The description's summary of 'lifetime, uses, and membership type' maps loosely to max_age, max_uses, and temporary, but adds no extra detail beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Create an invite link for a channel.' It clearly names the optional customization dimensions (lifetime, uses, membership type) and states what is returned (URL and code). This is enough to distinguish it from sibling tools like discord_create_event_invite.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description communicates the clear context: invites are created for a channel, and the optional parameters control lifetime, uses, and membership type. It does not explicitly mention alternatives or say when not to use this tool, but the channel-focused wording implicitly separates it from event invites and DM tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_create_roleA
Create a new role in a server. Requires the Manage Roles permission; the new role is placed below the bot's highest role. Use discord_add_role to then assign it to members. Returns the new role's name and ID.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the new role (max 100 characters). | |
| color | No | Role color as a hex string, e.g. '#FF5733'. | |
| hoist | No | If true, display members with this role separately in the member list. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). | |
| mentionable | No | If true, anyone can @mention this role. | |
| permissions | No | Server-wide permission flag names to grant, e.g. ['SendMessages','ViewChannel']. Uses Discord PermissionsBitField flag names. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the annotations by disclosing that the new role is placed below the bot's highest role and that the response returns the role's name and ID. Given there is no output schema, the return-value disclosure is especially useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler: the first states the action, the second covers permissions and placement, and the third provides follow-up routing and return information. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Provides the core operational constraints, permission requirement, follow-up step, and expected return value. It does not cover duplicate-role behavior or error cases, but the schema and annotations cover the rest sufficiently for a create operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are already documented. The description adds no parameter-level meaning beyond listing the mandatory ones, which is adequate but not exceptional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Create a new role in a server.' It clearly distinguishes itself from sibling tools like discord_edit_role, discord_delete_role, and discord_add_role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the Manage Roles permission prerequisite and directs the agent to use discord_add_role for assigning the role afterward. It lacks an explicit 'do not use when' statement, but the context is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_create_scheduled_eventA
Create a scheduled event. For 'VOICE'/'STAGE_INSTANCE' events provide channel_id; for 'EXTERNAL' events provide location AND scheduled_end_time. Requires the Manage Events permission. Returns the new event's name and ID.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Event name (max 100 characters). | |
| image | No | Optional cover image URL. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). | |
| location | No | Free-text location (e.g. a URL or place). Required for EXTERNAL events. | |
| channel_id | No | Voice or stage channel ID (snowflake). Required for VOICE/STAGE_INSTANCE events. | |
| description | No | Optional event description (max 1000 characters). | |
| entity_type | Yes | Where the event happens: 'VOICE' or 'STAGE_INSTANCE' (needs channel_id), or 'EXTERNAL' (needs location + scheduled_end_time). | |
| scheduled_end_time | No | Event end as an ISO 8601 datetime. Required for EXTERNAL events. | |
| scheduled_start_time | Yes | Event start as an ISO 8601 datetime, e.g. '2026-06-01T20:00:00Z'. Must be in the future. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description adds that the Manage Events permission is required and that the response contains the new event's name and ID. Annotations already signal mutation (readOnlyHint=false) and non-idempotency, so the description appropriately fills gaps without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler: the action, the key conditional parameter rules, the required permission, and the return value. Everything earns its place and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter tool with no output schema and conditional dependencies, the description covers the critical call-time facts: entity-type-specific requirements, the permission gate, and the return payload. The remaining details (max lengths, datetime formats, future-start requirement) are already fully documented in the input schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds value by synthesizing the conditional parameter relationships: 'VOICE'/'STAGE_INSTANCE' map to channel_id, and 'EXTERNAL' maps to location AND scheduled_end_time. This cross-parameter guidance is more useful than reading each schema property in isolation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource ('Create a scheduled event') and immediately clarifies the event-type branches, so the tool's purpose is unambiguous. It does not explicitly contrast itself with sibling tools like edit/delete, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear conditional usage guidance: VOICE/STAGE_INSTANCE events need channel_id, while EXTERNAL events need location and scheduled_end_time, and it states the Manage Events permission prerequisite. It does not mention when-not-to-use or point to alternatives, but the conditions are concrete and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_create_threadA
Create a thread, either branching from an existing message (pass message_id) or as a standalone thread in a text channel (omit message_id). Standalone creation requires a parent text channel and fails if channel_id is itself a thread. Requires the Create Public Threads permission. Returns the new thread's ID.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the thread to create (max 100 characters). | |
| channel_id | Yes | ID (snowflake) of the parent text channel. For a message-based thread, the channel containing message_id. | |
| message_id | No | Optional. Message to branch the thread from. If omitted, a standalone thread is created in the channel. | |
| auto_archive_duration | No | Minutes of inactivity before auto-archiving: 60, 1440, 4320, or 10080. Default 1440 (24h). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations present (readOnlyHint=false, destructiveHint=false, idempotentHint=false), the description still adds substantial context: the required 'Create Public Threads' permission, the failure condition when channel_id is a thread, and the return value ('Returns the new thread's ID'). These are exactly the kind of behavioral disclosures that go beyond structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero filler: the first states purpose and mode selection, the second covers the constraint, and the third covers permission and return value. Every sentence earns its place, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter create tool with full schema coverage and a safety-relevant annotation set, the description covers everything an agent needs: the two invocation modes, the failure condition, the auth requirement, and the return value. With no output schema, disclosing the returned thread ID was an important gap that the description fills.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all four parameters, including the enum values for auto_archive_duration and the optional semantics of message_id. The description adds only marginal value by clarifying the interplay between channel_id and message_id and the standalone-channel constraint, which warrants the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Create a thread') and immediately distinguishes the two modes of operation: branching from an existing message via message_id versus standalone creation in a text channel. This clearly differentiates it from sibling tools like discord_create_channel and discord_create_forum_post without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context: when to pass message_id versus omit it, and it states an explicit constraint ('fails if channel_id is itself a thread'), which effectively warns against misuse. However, it does not point to any alternative tool (e.g., discord_create_forum_post for forum channels), so the exclusion guidance is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_create_webhookA
Create a webhook on a channel and return its ID and token. SECURITY: the returned token grants anyone the ability to post as this webhook without authentication; treat it as a secret. Requires the Manage Webhooks permission. Use the returned id+token with discord_send_webhook_message.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for the webhook (max 80 characters). | |
| avatar | No | Optional avatar image URL for the webhook. | |
| channel_id | Yes | ID (snowflake) of the channel to attach the webhook to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond what annotations declare (readOnly=false, destructive=false), the description discloses two non-obvious behaviors: the returned token grants unauthenticated posting power and must be treated as a secret, and the Manage Webhooks permission is required. The SECURITY warning is exactly the kind of behavioral context an agent needs to handle the result responsibly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, each earning its place: the core action and return value first, then the security caveat, then permission and downstream routing. No filler, and the most safety-critical information is given immediate prominence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no output schema, the description covers nearly everything an agent needs: purpose, return fields (id and token), the security implications of those fields, required permission, and the follow-up tool. The only minor gap is that the exact response structure/format is not spelled out, but naming 'ID and token' is sufficient for extraction.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — name, avatar, and channel_id each have meaningful descriptions in the schema. The tool description adds no parameter-level detail beyond what the schema already provides, so the baseline 3 applies; it neither compensates nor detracts.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource pair ('Create a webhook on a channel') and states the concrete outcome (returns its ID and token). This cleanly separates it from the webhook sibling family — send, edit, delete, list — without needing to name any of them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context: it names the required permission (Manage Webhooks) and explicitly routes the agent to the downstream consumer (discord_send_webhook_message) with the returned id+token. It does not state when-not-to-use or contrast with alternatives like discord_list_webhooks, but the workflow guidance is strong enough to count as clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_crosspost_messageAIdempotent
Publish (crosspost) a message from an Announcement channel to every server that follows it. Only works in announcement channels on a message that has not already been published. Requires the Send Messages permission (and Manage Messages for messages authored by others). Returns a confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ID (snowflake) of the announcement channel containing the message. | |
| message_id | Yes | ID of the message to publish to followers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds valuable behavioral context beyond the annotations: channel-type restriction, already-published precondition, permission nuances, and a returned confirmation. There is no direct contradiction with the annotations; the 'not already published' condition is a success precondition, not a claim about repeated side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded, purposeful sentences: action, key preconditions, permissions, and return. No filler, repetition, or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a two-parameter tool with no output schema. It covers what the tool does, where it works, when it cannot work, what permissions are needed, and what the caller should expect as a result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both snowflake parameters with 100% coverage. The description reinforces that channel_id must be an announcement channel and message_id is the message to publish, but adds no substantial new parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Publish (crosspost)') and resource ('a message from an Announcement channel to every server that follows it'). This clearly distinguishes the tool from regular sending, forwarding, or following operations among the sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear conditions for use: announcement channels only, message must not already be published, and required permissions. It does not explicitly name an alternative tool for non-announcement-channel messages, so it stops just short of fully explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_delete_channelADestructive
Permanently delete a channel and all of its messages. IRREVERSIBLE. SAFE BY DEFAULT: dry_run is true unless explicitly set to false, so call it first to preview, then re-call with dry_run:false to actually delete. Requires the Manage Channels permission. An optional reason is recorded in the audit log.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional reason recorded in the server audit log. | |
| dry_run | No | If true (default), only reports which channel would be deleted without deleting it. Set false to actually delete. | |
| channel_id | Yes | ID (snowflake) of the channel to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, and the description builds on this by specifying what is destroyed (the channel and all its messages), labeling the operation IRREVERSIBLE, describing the dry_run safeguard, and disclosing the audit-log side effect and permission requirement. It contradicts none of the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no wasted words: the destructive scope and irreversibility are front-loaded, followed immediately by the dry_run safeguard, then permission and audit-log context. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description covers what the tool does, what it destroys, how to invoke it safely, who may use it, and what side effects it causes. The only gap is the return format of the dry-run preview and of the actual deletion, which is minor for a simple mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents channel_id, dry_run, and reason. The description reinforces dry_run's safety role and the audit-log behavior but adds no new per-parameter meaning beyond the schema, keeping this at the high-coverage baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Permanently delete a channel and all of its messages,' a specific verb and resource with explicit scope. The phrase 'all of its messages' disambiguates it from siblings like discord_delete_message and discord_bulk_delete_messages, which operate on messages rather than the channel itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit two-step workflow: 'call it first to preview, then re-call with dry_run:false to actually delete,' and states the prerequisite 'Requires the Manage Channels permission.' It does not explicitly name alternatives or say when not to use it, so it falls just short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_delete_dmADestructive
Permanently delete a DM message previously sent by this bot. IRREVERSIBLE. The bot can only delete its own DM messages, not the recipient's. Returns a confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | Discord user ID (snowflake) of the DM recipient. | |
| message_id | Yes | ID of the target message within the DM conversation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the bar is lower. The description adds value by emphasizing 'IRREVERSIBLE,' the bot-only deletion constraint, and the 'Returns a confirmation' behavior. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, purposeful sentences. The irreversible nature is front-loaded, followed by the critical scope limitation and return behavior. Every sentence earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter destructive operation with no output schema, the description is complete: it identifies the exact target, states the permission boundary, warns about irreversibility, and describes the result. An agent has enough information to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and both parameters already have clear descriptions in the schema. The tool description does not add extra meaning or usage details about user_id or message_id beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Permanently delete') and a well-defined resource ('a DM message previously sent by this bot'). It clearly differentiates from generic delete_message by specifying the DM context and the bot-owned scope, so an agent can distinguish it from siblings like discord_delete_message or discord_bulk_delete_messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this tool is appropriate: deleting DM messages sent by the bot. It also includes an explicit exclusion—'not the recipient's' messages—preventing misuse. However, it does not name sibling alternatives or state when to use a different tool such as discord_delete_message.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_delete_forum_postADestructive
Permanently delete a forum post (thread) and all its messages. IRREVERSIBLE. To merely close it without deleting, use discord_update_forum_post with archived:true. Requires the Manage Threads permission.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | Yes | ID (snowflake) of the forum post (thread) to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description adds meaningful behavioral context: the deletion is permanent and irreversible, it removes all messages in the post, and it requires the Manage Threads permission. This gives the agent important operational knowledge that annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core action comes first, followed by consequence, alternative, and permission. Every sentence adds distinct value and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool, the description is complete: it states the effect, scope, irreversibility, alternative, and required permission. The absence of an output schema is not a critical gap because the agent has enough information to invoke the tool correctly and understand the consequence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents thread_id with type, pattern, and a clear description, so the schema carries the parameter semantics. The tool description adds no additional parameter-specific detail, which is acceptable given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('delete'), a specific resource ('forum post (thread)'), and the full scope of the action ('all its messages'). It also clearly distinguishes itself from the related update tool by naming the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool: when permanently deleting a forum post is intended. It also gives the exact alternative for a non-destructive action: discord_update_forum_post with archived:true. This is clear routing guidance with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_delete_inviteADestructive
Revoke an invite by its code so it can no longer be used. IRREVERSIBLE (the code is freed). Requires the Manage Channels permission (or Manage Server). The reason is recorded in the audit log.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional reason recorded in the server audit log. | |
| invite_code | Yes | The invite code to revoke. A full discord.gg/<code> URL is also accepted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral detail beyond the annotations: the operation is IRREVERSIBLE, the code is freed, it requires Manage Channels (or Manage Server) permission, and the reason is recorded in the audit log. This goes well beyond the destructiveHint and idempotentHint already provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each carrying essential information: the primary action, the irreversibility warning, and the permission/logging context. No filler, no repetition of schema details, and key warnings are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a simple two-parameter destructive tool. It covers purpose, permission requirements, irreversibility, audit logging, and the parameter format is already fully documented in the schema. No output schema exists, but a successful delete response is not essential for an agent to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has full (100%) coverage of both parameters, including the fact that reason is optional and recorded in the audit log. The description adds little parameter-specific meaning beyond referring to 'code' and mentioning the audit log, so the schema carries the load as expected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (revoke), the exact resource (an invite identified by its code), and the direct consequence (it can no longer be used). This clearly distinguishes it from sibling tools like discord_create_invite, discord_get_invite, and discord_list_invites.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: revoking an invite code that should no longer work. It also states the required permission, which helps the agent decide whether it can perform the operation. It does not explicitly name alternatives or exclusion conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_delete_messageADestructive
Permanently delete one specific message. IRREVERSIBLE. The bot can always delete its own messages; deleting another user's message requires the Manage Messages permission. Use discord_bulk_delete_messages to remove many at once. An optional reason is recorded in the audit log.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional reason recorded in the server audit log. | |
| channel_id | Yes | ID (snowflake) of the channel or thread containing the message. | |
| message_id | Yes | ID of the message to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint and readOnlyHint annotations, the description adds concrete behavioral details: the action is IRREVERSIBLE, permission depends on message ownership, and the optional reason is recorded in the audit log. These disclosures help an agent anticipate side effects without relying on structured fields alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
All sentences are short and information-dense, with the core action and irreversibility warning front-loaded. The alternative-tool routing and permission note each earn their place; there is no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-message delete operation, the description covers the action, destructiveness, permission requirements, the relevant alternative, and the audit-log side effect. No output schema exists, and none is needed for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all three parameters already documented with descriptions and patterns. The description only restates the audit-log effect of the reason parameter, already present in the schema, so it adds no new parameter-level meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with 'Permanently delete one specific message', a clear verb+resource+scope statement. It distinguishes itself from bulk deletion and other delete-related siblings by emphasizing 'one specific message'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names discord_bulk_delete_messages as the alternative for removing many messages at once. It also states the permission prerequisite: the bot can always delete its own messages, while deleting another user's message requires Manage Messages permission. This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_delete_roleADestructive
Permanently delete a role from the server; it is automatically removed from every member who held it. IRREVERSIBLE. Requires the Manage Roles permission, and the role must be below the bot's highest role.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional reason recorded in the server audit log. | |
| role_id | Yes | ID (snowflake) of the role to delete. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the bar is lowered; the description adds substantial context beyond that: the cascading removal from all members, explicit irreversibility, the Manage Roles permission requirement, and the hierarchy constraint relative to the bot's highest role. Nothing contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the core action, the cascade consequence, and the prerequisites/irreversibility warning. Front-loaded with the verb and resource; zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with full schema coverage, no nested objects, and no output schema (delete endpoints typically return nothing), the description covers every decision-critical fact: what is destroyed, side effects on members, irreversibility, permission, and hierarchy. An agent can determine whether and how to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents guild_id, role_id, and reason; the baseline 3 applies. The description adds only peripheral param context (the hierarchy constraint on role_id), not format or syntax detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Permanently delete a role from the server.' The cascade note ('automatically removed from every member who held it') disambiguates from sibling discord_remove_role, which unassigns a role from a member without deleting the role itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The prerequisites ('Requires the Manage Roles permission, and the role must be below the bot's highest role') give clear conditions for when the call will succeed, and 'IRREVERSIBLE' warns against casual use. However, it never names alternatives (e.g., discord_edit_role to modify, discord_remove_role to unassign instead), leaving when-not-to-use to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_delete_scheduled_eventADestructive
Permanently delete a scheduled event. IRREVERSIBLE. To cancel an event while keeping a record, use discord_edit_scheduled_event with status:'CANCELED' instead. Requires the Manage Events permission.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | ID (snowflake) of the event to delete. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false. The description adds meaningful context: the operation is irreversible, requires the Manage Events permission, and offers a non-destructive alternative. It doesn't go into deeper edge cases, but it exceeds the minimum burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each with a purpose: statement of action, warning about irreversibility, and explicit routing to an alternative with a required parameter value. Front-loaded with the core behavior and no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool, it covers irreversibility, required permission, and the safer alternative. The output schema is absent, but the description need not explain return values. It could mention edge cases like 'event not found' but that's not necessary for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description doesn't add syntax or format details beyond what the schema provides, but it doesn't need to. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (permanently delete) and the resource (scheduled event). It differentiates itself from sibling discord_edit_scheduled_event by explicitly noting the alternative for cancellation, leaving no ambiguity about what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool and when not to: 'To cancel an event while keeping a record, use discord_edit_scheduled_event with status:'CANCELED' instead.' This directly guides the agent to the correct alternative and condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_delete_webhookADestructive
Permanently delete a webhook by its ID, invalidating its token. IRREVERSIBLE: any integrations using the old token will stop working. Requires the Manage Webhooks permission.
| Name | Required | Description | Default |
|---|---|---|---|
| webhook_id | Yes | ID (snowflake) of the webhook to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false, and the description goes beyond them meaningfully: it names what gets destroyed (the token), the consequence (integrations using the old token stop working), marks the operation IRREVERSIBLE, and surfaces the auth requirement. This directly adds the 'what gets destroyed' and 'auth needs' context the rubric credits. It is strong but not exhaustive — no mention of error behavior for invalid/nonexistent IDs or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, each earning its place: the action, the irreversibility warning with concrete impact, and the permission prerequisite. The action is front-loaded, and there is zero filler or repetition of the input schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool (one parameter, no output schema, annotations present), the description covers the essentials: what it does, what it destroys, irreversibility, and the required permission. The only gaps are error/return behavior (e.g., what happens on a second delete of the same webhook) and rate-limit info, which are minor for a simple destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: webhook_id is already documented as the snowflake ID of the webhook to delete, with a regex pattern. The description's phrase 'by its ID' merely restates the schema. Per the rubric, a baseline of 3 applies when the schema carries the load; the description adds no parameter-level detail beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource with precise scope: 'Permanently delete a webhook by its ID, invalidating its token.' The token-invalidation detail makes clear this targets the webhook resource itself, not a webhook message (discord_delete_webhook_message), so it is implicitly distinguishable. However, it does not explicitly name or contrast any sibling, falling just short of the top bar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when a webhook must be permanently removed) and states a clear prerequisite: 'Requires the Manage Webhooks permission.' But it offers no when-not-to-use guidance or alternatives (e.g., clarify that deleting a webhook message is a different tool). This is more than 'no guidance' but less than explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_delete_webhook_messageADestructive
Permanently delete a message that was sent through a webhook, using the webhook's ID and token. IRREVERSIBLE. Requires the original webhook token.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | ID of the webhook message to delete. | |
| webhook_id | Yes | ID (snowflake) of the webhook that sent the message. | |
| webhook_token | Yes | Secret token of the webhook. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive (destructiveHint: true), and the description reinforces this with 'Permanently delete' and 'IRREVERSIBLE.' It also adds a meaningful prerequisite beyond the schema: the original webhook token must be used. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loads the core destructive action. There is slight redundancy between 'Permanently delete' and 'IRREVERSIBLE,' and the token requirement is repeated from the schema, but the overall structure is efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the destructive annotations and complete parameter schema, the description provides enough context to invoke the tool correctly: the target resource, necessary credentials, and irreversibility. It does not describe response behavior or error cases, but no output schema exists and this is a simple delete operation, so the omission is not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already well documented. The description adds minimal semantic value beyond the schema, mainly clarifying that the token must be the original webhook token. This meets the baseline for fully-covered schema parameters without adding substantial meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action — permanently deleting a message sent through a webhook — and identifies the required auth context (webhook ID and token). The phrase 'through a webhook' clearly distinguishes it from sibling tools like discord_delete_message, which handles non-webhook messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies this tool is for webhook-sent messages and emphasizes that the original webhook token is required. It does not explicitly name alternatives or say when not to use it, but the webhook-specific framing is strong enough to guide selection among the many sibling message tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_edit_channelAIdempotent
Update a channel's name, topic, slowmode, or NSFW flag. Only provided fields change; topic and slowmode apply to text channels only. Requires the Manage Channels permission. Returns a confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New channel name (max 100 characters). | |
| nsfw | No | Mark (true) or unmark (false) the channel as age-restricted (NSFW). | |
| topic | No | New topic/description (text channels only). | |
| slowmode | No | Per-user message cooldown in seconds, 0–21600. 0 disables slowmode. | |
| channel_id | Yes | ID (snowflake) of the channel to edit. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral detail beyond the annotations: partial-update semantics, text-channel-only restrictions for topic and slowmode, permission requirements, and a confirmation response. These are not visible in the annotations or schema and are especially valuable for a mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler. The main purpose and editable fields are front-loaded, followed by the partial-update caveat, permission requirement, and return behavior. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderately complex edit tool with full schema coverage and no output schema, the description covers the editable fields, constraints, permission, partial-update semantics, and return value. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining cross-parameter behavior ('Only provided fields change') and the text-channel-only constraint for topic and slowmode, which the schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Update') and resource ('a channel'), then enumerates exactly which fields are editable: name, topic, slowmode, or NSFW flag. This clearly distinguishes it from sibling tools like move_channel, set_channel_position, and delete_channel.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the usage context clear: use it to update channel settings, only provided fields change, and topic/slowmode are text-channel-only. It also states the Manage Channels permission requirement. It does not explicitly name alternative sibling tools, but the field list effectively implies when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_edit_dmAIdempotent
Edit the text content of a DM message previously sent by this bot. Only the bot's own DM messages can be edited. Use discord_edit_dm_embed for embed messages. Returns a confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | New plain-text content that fully replaces the existing message (max 2000 characters). | |
| user_id | Yes | Discord user ID (snowflake) of the DM recipient. | |
| message_id | Yes | ID of the target message within the DM conversation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, destructiveHint=false, and idempotentHint=true, so the description only needs to add context. It adds meaningful behavioral constraints: only the bot's own DM messages can be edited, and it returns a confirmation. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no filler. The main action is front-loaded, followed by the ownership constraint, an alternative-tool pointer, and a return-value note. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple edit operation with fully documented parameters and annotations covering safety/idempotency, the description covers the essential context: what it edits, who can edit it, when to use a different tool, and what the return is. No important calling context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters, including content constraints and the max 2000-character limit. The description adds little beyond saying 'text content' and 'confirmation,' which is sufficient but not a significant enrichment.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Edit the text content of a DM message'), identifies the resource (DM message previously sent by this bot), and scopes the tool clearly. It also explicitly distinguishes itself from discord_edit_dm_embed for embed messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear when-to-use condition ('DM message previously sent by this bot') and a when-not-to-use condition ('Only the bot's own DM messages can be edited'). It also names the alternative for embed messages: 'Use discord_edit_dm_embed for embed messages.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_edit_dm_embedAIdempotent
Replace the embed on a DM message previously sent by this bot. Only the bot's own messages can be edited. Full replace, not merge: provided fields are applied and omitted fields are dropped. Returns a confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL that makes the title clickable. | |
| color | No | Side-bar color as a hex string, e.g. '#5865F2'. | |
| title | No | Embed title shown in bold at the top. | |
| author | No | Author block shown at the top of the embed. | |
| fields | No | Up to 25 name/value field blocks. Set inline:true on a field to render it side-by-side with adjacent inline fields (up to 3 per row). | |
| footer | No | Footer text shown at the bottom of the embed. | |
| content | No | Optional new plain text shown above the embed. | |
| user_id | Yes | Discord user ID (snowflake) of the DM recipient. | |
| image_url | No | Large image shown below the embed body. | |
| timestamp | No | If true, stamp the embed with the current time. | |
| message_id | Yes | ID of the target message within the DM conversation. | |
| description | No | Main body text of the embed (supports Markdown). | |
| thumbnail_url | No | Small image shown in the top-right corner. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the full-replace behavior ('provided fields are applied and omitted fields are dropped'), which is a critical non-obvious trait. Annotations already indicate idempotentHint=true and destructiveHint=false, so the description's replacement semantics add meaningful context beyond annotations. It also states the return is a confirmation, which is useful. Slight gap: no mention of auth/rate limits or what happens if the message isn't found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero filler. The first sentence states the verb+resource, the second adds the critical ownership constraint, and the third crystallizes the most important behavior (full replace). Everything is front-loaded and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 100% schema coverage, the required params are clear, and the nested object shapes (author, fields) are fully documented. The description explains the full-replace semantic that the schema can't express, and the confirmation return. Minor omissions (error cases, not-found behavior) are acceptable for an edit tool with idempotentHint=true.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all 13 parameters. The description's 'full replace, not merge' is high-level and applies to all parameters collectively, but it doesn't add per-parameter meaning beyond the schema. This is baseline 3 territory since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the specific verb ('Replace'), the resource ('the embed on a DM message previously sent by this bot'), and distinct scope ('DM message', 'previously sent by this bot'). It also differentiates from generic edit tools by specifying DM-only context and bot-owned messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the critical when-not-to-use constraint: only the bot's own messages can be edited. It clearly implies this tool is for DM messages, distinguishing it from discord_edit_embed (which likely targets server messages). However, it doesn't explicitly name an alternative tool like discord_edit_embed or discord_edit_dm for non-embed edits, so it misses the full explicit alternative mapping.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_edit_embedAIdempotent
Replace the embed on a message previously sent by this bot. Only this bot's messages can be edited. This is a full replace, not a merge: provided fields are applied and omitted fields are dropped from the embed. Returns a confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL that makes the title clickable. | |
| color | No | Side-bar color as a hex string, e.g. '#5865F2'. | |
| title | No | Embed title shown in bold at the top. | |
| author | No | Author block shown at the top of the embed. | |
| fields | No | Up to 25 name/value field blocks. Set inline:true on a field to render it side-by-side with adjacent inline fields (up to 3 per row). | |
| footer | No | Footer text shown at the bottom of the embed. | |
| image_url | No | Large image shown below the embed body. | |
| timestamp | No | If true, stamp the embed with the current time. | |
| channel_id | Yes | ID (snowflake) of the channel or thread containing the message. | |
| message_id | Yes | ID of the message to edit. Must be a message authored by this bot (an embed is added if it has none). | |
| description | No | Main body text of the embed (supports Markdown). | |
| thumbnail_url | No | Small image shown in the top-right corner. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the critical behavioral nuance beyond the annotations: this is a full replace, not a merge, so omitted fields are dropped. It also states the bot-only restriction and that a confirmation is returned. The annotations already cover read/write and idempotency, and there is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler: purpose and restriction first, the essential replace-not-merge behavior second, and the return behavior third. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema thoroughly documents all 12 parameters, including nested objects and field limits, and the description covers scope, replacement semantics, and a return confirmation. Since there is no output schema, a slightly richer description of the confirmation payload would make it fully complete, but it is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by clarifying that omitted optional fields are cleared rather than preserved, which materially affects how an agent should construct arguments. It does not add per-parameter details beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Replace the embed on a message previously sent by this bot.' It clearly differentiates this from sending a new embed or editing message text, and the 'Only this bot's messages can be edited' boundary adds precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear precondition: the target message must have been sent by this bot, which tells the agent when not to use the tool. However, it does not explicitly name alternatives such as discord_edit_message or discord_edit_dm_embed, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_edit_messageAIdempotent
Edit the text content of a message previously sent by this bot. Discord forbids editing other users' messages, so this fails for non-bot messages. Use discord_edit_embed for embed messages. Works in text channels and threads. Returns the edited message ID.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | New plain-text content that fully replaces the existing content (max 2000 characters). | |
| channel_id | Yes | ID (snowflake) of the channel or thread containing the message. | |
| message_id | Yes | ID of the message to edit. Must be a message authored by this bot. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only establish that this is a mutating, idempotent, non-destructive operation; the description goes well beyond them by disclosing the failure mode for non-bot messages, the threading scope, and the return value (edited message ID). Stating the return value is especially valuable given there is no output schema. No contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each carrying distinct information: core action, failure condition, alternative routing, and scope/return value. The primary purpose is front-loaded and there is zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with a fully documented schema, the description fills the gaps that structured data cannot: when it fails, which sibling to use instead, where it works, and what it returns. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter already documented (snowflake patterns, bot-authorship requirement, max 2000 characters, full replacement semantics). The description adds only marginal reinforcement about channel/thread context, so it stays at the baseline 3 rather than compensating for any gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: editing the text content of a message previously sent by this bot. It additionally distinguishes itself from its closest sibling by noting 'Use discord_edit_embed for embed messages.' An agent can tell this tool apart without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative tool (discord_edit_embed) and the condition that selects it (embed messages), and warns that the operation fails for non-bot messages. It also scopes where the tool works (text channels and threads). This is explicit when/when-not guidance with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_edit_roleAIdempotent
Update an existing role's name, color, permissions, hoist, or mentionable flag. Only provided fields change; passing permissions REPLACES the role's full permission set. Requires the Manage Roles permission, and the role must be below the bot's highest role.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New role name (max 100 characters). | |
| color | No | New role color as a hex string, e.g. '#FF5733'. | |
| hoist | No | If true, display members with this role separately in the member list. | |
| role_id | Yes | ID (snowflake) of the role to edit. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). | |
| mentionable | No | If true, anyone can @mention this role. | |
| permissions | No | Permission flag names. Providing this REPLACES the role's entire permission set. Uses Discord PermissionsBitField flag names. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses critical behavior: partial updates are the default, but passing 'permissions' replaces the entire permission set. It also reveals authorization and hierarchy constraints. This is exactly the kind of behavioral context an agent needs to avoid unintended permission overwrites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler. The first sentence states the tool's purpose and scope, the second explains the critical partial-update and replacement semantics, and the third covers permissions and hierarchy. Information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 7-parameter mutation tool with no output schema, the description is complete enough for correct selection and invocation. It covers what changes, how partial updates work, the dangerous permissions-replacement behavior, and the required permission/position conditions. No critical gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by clarifying the update contract: unspecified fields remain unchanged and permissions are replaced wholesale rather than merged. This is valuable semantic information not fully captured by the field descriptions alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb ('Update') and resource ('existing role'), and enumerates the exact mutable attributes: name, color, permissions, hoist, mentionable. This clearly differentiates it from sibling tools like discord_create_role, discord_delete_role, discord_set_role_position, and discord_set_role_permission.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context: it edits role settings, only provided fields change, and it states important prerequisites (Manage Roles permission and role position below the bot's highest role). It does not explicitly name alternatives or state when not to use this tool, but the scope is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_edit_scheduled_eventAIdempotent
Update a scheduled event; only provided fields change. Use the status field to start ('ACTIVE'), end ('COMPLETED'), or cancel ('CANCELED') an event; Discord only allows certain status transitions. Requires the Manage Events permission.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New event name (max 100 characters). | |
| image | No | New cover image URL. | |
| status | No | Change event status. Allowed transitions only: SCHEDULED→ACTIVE→COMPLETED, or SCHEDULED→CANCELED (no transition back to SCHEDULED exists). | |
| event_id | Yes | ID (snowflake) of the event to edit. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). | |
| location | No | New free-text location for EXTERNAL events. | |
| channel_id | No | New voice/stage channel ID (snowflake) for VOICE/STAGE_INSTANCE events. | |
| description | No | New event description (max 1000 characters). | |
| scheduled_end_time | No | New end time as an ISO 8601 datetime. | |
| scheduled_start_time | No | New start time as an ISO 8601 datetime. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating, non-destructive, idempotent operation. The description adds valuable behavioral context beyond those hints: partial-field update semantics, status-transition restrictions, and the Manage Events permission requirement. This is meaningfully richer than the structured annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and update semantics, followed by the status-transition guidance and permission requirement. No filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex mutation tool with 10 parameters and no output schema, the description covers the essential behavioral and permission context. Schema descriptions handle individual parameter meanings. It could be slightly more explicit about alternative tools, but it is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description goes beyond the schema by clarifying update semantics ('only provided fields change') and giving practical guidance on using the status field to control the event lifecycle. This adds meaning to the parameters collectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Update') and resource ('a scheduled event'), and adds the key semantic 'only provided fields change'. This clearly distinguishes it from sibling tools like discord_create_scheduled_event and discord_delete_scheduled_event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to use the status field for starting, ending, or canceling an event, and warns that Discord only allows certain transitions. It does not explicitly name alternatives like delete for removal, but the context is strong enough for an agent to infer the right tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_edit_webhookAIdempotent
Update a webhook's name, avatar, or the channel it posts to. Only provided fields change. Requires the Manage Webhooks permission. Returns a confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New display name for the webhook (max 80 characters). | |
| avatar | No | New avatar image URL for the webhook. | |
| channel_id | No | ID (snowflake) of a channel to move the webhook to. | |
| webhook_id | Yes | ID (snowflake) of the webhook to edit. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: the Manage Webhooks permission requirement and the fact that it returns a confirmation. The annotations already signal a non-read-only, idempotent, non-destructive operation, and the description aligns with them—no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: what the tool updates, partial-update semantics, and permission/return details. Information is front-loaded and there is no redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 4-parameter edit tool with full schema coverage and no output schema, the description covers purpose, partial update behavior, permission, and response. It could be more specific about the confirmation's shape, but nothing essential is missing for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage with descriptions for all parameters, so the baseline is 3. The description adds value by clarifying that only provided fields change, which is essential for understanding how to use parameters in combination. It does not restate schema details like max length or patterns.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Update'), a specific resource ('a webhook'), and enumerates the editable fields ('name, avatar, or the channel it posts to'). This clearly distinguishes the tool from siblings like discord_edit_webhook_message (which edits a message sent by a webhook) and discord_delete_webhook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description identifies what the tool does and the partial-update behavior ('Only provided fields change'), so an agent knows it can pass a subset of fields. It does not explicitly name alternatives or say when not to use this tool, but the context is clear enough for this straightforward edit operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_edit_webhook_messageAIdempotent
Edit a message previously sent through a webhook, using the webhook's ID and token. Replaces the provided fields. Requires the original webhook token. Returns a confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| embeds | No | Up to 10 embed objects to attach to the webhook message. | |
| content | No | New plain-text content for the message (max 2000 characters). | |
| message_id | Yes | ID of the webhook message to edit. | |
| webhook_id | Yes | ID (snowflake) of the webhook that sent the message. | |
| webhook_token | Yes | Secret token of the webhook. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds useful behavior beyond annotations: 'Replaces the provided fields' indicates partial replacement rather than full overwrite, and 'Requires the original webhook token' names the authentication prerequisite. Annotations already provide idempotent/read-only/destructive hints, and the description does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the core operation and then the required context. There is no filler or unnecessary repetition of schema details; the token emphasis earns its place as an auth requirement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three required parameters and a rich input schema, the description covers the key operational facts: target resource, replacement behavior, authentication need, and return behavior. It could be more complete with explicit sibling exclusions, but it is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the individual parameter documentation carries the meaning. The description adds context about replacement semantics and token requirement, but does not explain specific parameters beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Describes a specific action—editing a webhook-sent message using the webhook's ID and token—and clarifies it operates on a previously sent message. This distinguishes it from siblings like discord_edit_message and discord_edit_webhook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use context: edit messages that were sent through a webhook, and states the prerequisite that the original webhook token is required. It does not explicitly name alternatives or exclusion cases, but the webhook-specific scoping makes routing unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_fetch_pinned_messagesARead-only
List all pinned messages in a channel. Returns { messages: [...] } with id, author, content, timestamp, pinnedAt. Read-only. Use discord_pin_message to change which messages are pinned.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ID (snowflake) of the channel or thread to list pins from. |
Output Schema
| Name | Required | Description |
|---|---|---|
| messages | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes safety, and the description's 'Read-only' line confirms it without adding new behavioral depth. It adds the return shape and pinned-message scope, but does not address pagination, rate limits, permissions, or failure behavior. This is acceptable but not exceptional given annotations already cover the key safety trait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: the operation, the return shape, and the pointer to the mutation sibling. It is front-loaded with the core purpose and contains no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with a full input schema and output schema, the description covers everything needed: what it lists, what it returns, that it is safe, and which sibling to use for modifications. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter channel_id is already described as a snowflake ID for a channel or thread. The description adds no additional parameter-level meaning, so the schema carries the full weight here, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List all pinned messages in a channel.' It clearly identifies the tool's scope and differentiates it from mutation tools like discord_pin_message by explicitly stating this is read-only and directing to discord_pin_message for changing pins.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool (to list all pinned messages) and gives an alternative for a related but different need: 'Use discord_pin_message to change which messages are pinned.' This is direct and leaves no ambiguity about the read-only intent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_fetch_webhook_messageARead-only
Fetch a single message sent through a webhook (id, content, embed count, timestamp), using the webhook's ID and token. Read-only. Requires the original webhook token.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | ID of the webhook message to fetch. | |
| webhook_id | Yes | ID (snowflake) of the webhook that sent the message. | |
| webhook_token | Yes | Secret token of the webhook. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| embeds | Yes | |
| content | Yes | |
| timestamp | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, and the description reinforces read-only behavior while adding valuable context: the requirement of the original webhook token and a summary of returned data (id, content, embed count, timestamp). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence delivers the operation, resource scope, return summary, read-only nature, and auth requirement with zero filler. Information is front-loaded and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-message fetch with 3 fully documented required parameters, an output schema, and safety annotations, the description covers the critical token prerequisite and operation scope. Nothing essential is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the individual parameter descriptions already handle semantics. The tool description adds only the nuance that the token must be the 'original' webhook token, which is a minor enhancement over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly identifies the verb ('Fetch'), the resource ('a single message sent through a webhook'), and the scope ('using the webhook's ID and token'). The parenthetical return fields and the webhook-specific framing distinguish it from sibling tools like discord_read_messages or discord_get_message_attachments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the key prerequisite 'Requires the original webhook token,' which is the primary condition for using this tool. It implicitly differentiates from non-webhook message tools, but does not explicitly name alternatives or when-not-to-use scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_find_channel_by_nameARead-only
Find channels whose name contains a substring (case-insensitive). Returns matching channels (id, name, type) as a JSON array. Read-only. Useful for resolving a channel_id when you only know the channel's name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Case-insensitive substring to match against channel names. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). |
Output Schema
| Name | Required | Description |
|---|---|---|
| matches | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and openWorldHint=true, and the input schema already documents the case-insensitive substring behavior. The description reiterates these rather than adding new behavioral context such as pagination, result limits, or error behavior. It slightly adds by stating the output shape, but with an output schema present that is already structured knowledge.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the core matching behavior, the return format, and the primary use case. No filler, front-loaded with the most important information, and well-structured for quick agent consumption.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety, the description provides everything an agent needs to decide when to invoke this tool: what it searches, how matching works, and why it is useful. There are no significant gaps for a simple read-only lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; both 'name' and 'guild_id' are fully described in the input schema. The description adds no extra parameter-level meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Find'), a specific resource ('channels'), and a specific filter ('name contains a substring (case-insensitive)'), which clearly distinguishes it from sibling tools like discord_list_channels. It also mentions the return format and read-only nature, making the tool's scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context for use: 'Useful for resolving a channel_id when you only know the channel's name.' This gives an agent a concrete decision signal. It does not explicitly name alternatives or exclusionary conditions, but the intended scenario is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_follow_announcement_channelA
Subscribe a target channel to an announcement (news) channel, so the source's published messages are reposted into the target. The source must be an announcement channel. Requires the Manage Webhooks permission in the target. Returns a confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| source_channel_id | Yes | ID (snowflake) of the announcement channel to follow. | |
| target_channel_id | Yes | ID (snowflake) of the channel that will receive published messages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-read-only, non-idempotent operation, so the bar for additional disclosure is lower. The description adds useful behavioral context: it requires Manage Webhooks in the target, causes published messages to be reposted, and returns a confirmation. It does not detail edge cases like duplicate follows, but that is not a major gap given the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences front-load the core action and effect, then state prerequisites and the return value. No filler or redundant details; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema, this description is sufficient: it explains the operation, the required permission, the source constraint, and the response. An agent can invoke it correctly without needing additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description's prose reinforces that the source must be an announcement channel and the target receives published messages, but it does not add substantial parameter-level meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Subscribe') and identifies the precise resource relationship: a target channel follows an announcement channel. It clearly distinguishes this from sibling tools like discord_crosspost_message by describing the subscription/reposting behavior rather than one-off publishing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the key precondition ('source must be an announcement channel') and the required permission ('Manage Webhooks'). It does not explicitly name alternatives or say when not to use this tool, but the context is clear enough for an agent to understand the appropriate scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_forward_messageA
Forward an existing message to another channel using Discord's native forward, which preserves the original attribution. Works across text channels and threads. Use discord_send_message to compose new content instead. Requires the Send Messages permission in the target channel. Returns a confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ID (snowflake) of the channel or thread containing the source message. | |
| message_id | Yes | ID of the message to forward. | |
| target_channel_id | Yes | ID (snowflake) of the destination channel or thread. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide only basic flags (readOnlyHint=false, destructiveHint=false), so the description carries the burden of explaining behavior. It adds genuine value: the attribution-preservation trait of the native forward, the permission requirement, and the return behavior ('Returns a confirmation'). No contradiction with annotations exists; it could have gone further by noting failure modes, but it covers the key behavioral traits well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences with zero filler: the core action and its defining trait come first, followed by scope, the routing alternative, and the prerequisite. Every sentence earns its place, and the return-value note is justified because there is no output schema to convey that information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no output schema, the description covers all essential decision and invocation information: what it does, where it works, the required permission, the return behavior, and the sibling to choose instead. It is slightly shy of perfect only because it omits edge-case caveats (e.g., restrictions on forwarding certain message types), but nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema fully documents all three parameters (channel/thread context, message ID, destination). Per the baseline rule, the description need not repeat parameter details. The small additions it makes — 'Works across text channels and threads' — merely confirm what the schema already states, so no compensatory credit is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Forward an existing message to another channel') and adds the distinctive mechanism ('Discord's native forward, which preserves the original attribution'), which separates it from ordinary message-sending. It also explicitly names discord_send_message as the sibling it is not, making the purpose unmistakable even among 80+ sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit when-to-use (forwarding an existing message with attribution) and a when-not-to-use with a named alternative ('Use discord_send_message to compose new content instead'). It also states the operational prerequisite ('Requires the Send Messages permission in the target channel'), which is exactly the kind of precondition an agent needs before invoking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_audit_logARead-only
Fetch the server's audit log, the record of administrative actions (bans, kicks, role/channel changes, etc.) with who performed them and when. Requires the View Audit Log permission. Returns { entries: [...] } with id, action, executor, target, reason, createdAt. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many recent entries to fetch (1–100). Default 25. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). | |
| action_type | No | Optional Discord AuditLogEvent numeric ID to filter by (e.g. 22 = MemberBanAdd). Accepts event IDs newer than the bundled enum. Omit for all action types. |
Output Schema
| Name | Required | Description |
|---|---|---|
| entries | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces this with 'Read-only'. It adds useful behavioral context beyond the annotations by disclosing the permission requirement and the exact response shape: { entries: [...] } with named fields. This gives the agent a accurate expectation of what the call does and what it needs in advance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three compact sentences with no filler. It front-loads the core operation, then adds the permission requirement and return shape, each sentence contributing meaningful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with one required parameter, a thorough input schema, and an output schema available, the description covers the essential operational details: what the resource is, the required permission, and the response format. Nothing needed for correct selection or invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter already has an explanatory description: guild_id, limit, and action_type. The tool description does not add much parameter-specific semantics beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Fetch the server's audit log', and explains what the log contains (administrative actions, who performed them, when). This clearly distinguishes it from the many sibling message/channel/member tools, since it is the only audit-log operation in the set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when this tool is relevant and states the required permission ('View Audit Log'), which is an important access prerequisite. It does not explicitly enumerate alternatives or exclusions, but no sibling tool offers a comparable audit-log capability, so that omission is minor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_channel_permissionsARead-only
List every permission overwrite on a channel, per role and per member, with the allowed and denied permission flags for each. Read-only. Use discord_audit_permissions for a server-wide report across all channels.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ID (snowflake) of the channel to inspect. |
Output Schema
| Name | Required | Description |
|---|---|---|
| overwrites | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, and the description adds meaningful behavioral detail beyond that: it discloses the exact structure of results (per role and per member, allowed and denied flags) and the comprehensive 'every permission overwrite' scope. This is useful context that annotations alone do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with no filler. The core behavior is front-loaded first, the read-only property is stated briefly, and the alternative routing is in the second sentence. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only listing tool with an output schema present, this description is complete. It covers scope, result granularity, safety, and the main alternative tool. Nothing that an agent needs to select or invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for channel_id, including its snowflake pattern and purpose. The description only refers to 'a channel' generically, so it adds little beyond the schema. A baseline of 3 is appropriate because the schema already carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb ('List') and resource ('every permission overwrite on a channel'), and clearly explains the granularity: per role and per member, with allowed and denied flags. It differentiates itself from discord_audit_permissions by explicitly naming that sibling, so an agent can distinguish the tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly provides the alternative tool ('discord_audit_permissions') and the condition that should trigger its use ('server-wide report across all channels'). This gives clear routing guidance without needing to infer from tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_event_subscribersARead-only
List the users who marked themselves 'Interested' in a scheduled event. Returns { subscribers: [...], nextCursor }. A page holds up to 100 users; if nextCursor is non-null, pass it back as after to fetch the next page. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor: a user ID (snowflake). Pass the previous response's nextCursor to fetch the next page. | |
| limit | No | Max subscribers per page (1–100). Default 25. | |
| event_id | Yes | ID (snowflake) of the scheduled event. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). |
Output Schema
| Name | Required | Description |
|---|---|---|
| nextCursor | Yes | |
| subscribers | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces this with 'Read-only.' It goes beyond the annotation by disclosing the response shape ({ subscribers: [...], nextCursor }) and the pagination contract, including the 100-user page cap and how to pass nextCursor back as `after`.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no filler: the action is front-loaded, the response shape is stated, the pagination rule is actionable, and the read-only safety signal is included. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only paginated listing tool with a thorough input schema and an output schema, the description covers the essential behavior: what it returns, how paging works, and that it is safe. No critical usage aspect is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the relationship between the output's nextCursor and the `after` parameter, and by clarifying page-size behavior beyond the schema's default and max values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List the users who marked themselves Interested in a scheduled event.' This clearly distinguishes it from sibling event tools like get_scheduled_event and list_scheduled_events, which target event metadata rather than subscriber lists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it is for reading event subscribers, and the pagination instructions explain how to use it across multiple pages. It does not explicitly name alternatives or exclusion conditions, but the operation is specific enough that an agent can infer when to select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_forum_channelsARead-only
List the forum channels in a server (id, name, topic, parent category). Read-only. Use discord_get_forum_tags to see a forum's available tags, or discord_list_forum_threads for its posts.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes | Discord server (guild) ID (snowflake). |
Output Schema
| Name | Required | Description |
|---|---|---|
| channels | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces this with 'Read-only.' It adds behavioral context by stating the tool only returns forum channels and not tags or threads, which helps set expectations about scope. No hidden side effects or auth requirements are omitted for a simple read-only listing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loading the main purpose and output fields, then immediately providing read-only clarity and sibling tool alternatives. Every sentence earns its place with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity read-only listing tool with a fully described parameter and an existing output schema, the description is complete. It explains what is returned, clarifies the read-only nature, and points to related sibling tools for adjacent use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents the single parameter guild_id with a clear description and pattern. The tool description does not need to add much, and it doesn't—this is acceptable given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') with a clear resource ('forum channels') and scope ('in a server'), and enumerates the returned fields (id, name, topic, parent category). It also distinguishes itself from sibling tools like discord_list_channels by narrowing to forum channels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use alternatives: discord_get_forum_tags for a forum's tags and discord_list_forum_threads for its posts. This gives clear routing guidance beyond merely restating the tool's function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_forum_postARead-only
Get a forum post's details (title, archived/locked state, applied tags, message count) plus its recent messages, oldest-to-newest. Read-only. Pass the post's thread_id. Returns a JSON object.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many recent messages to include (1–100). Default 20. | |
| thread_id | Yes | ID (snowflake) of the forum post (thread). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| locked | Yes | |
| archived | Yes | |
| messages | Yes | |
| createdAt | Yes | |
| appliedTags | Yes | |
| messageCount | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and the description reinforces it with 'Read-only' — no contradiction. It adds value beyond the annotations by disclosing the return shape (specific detail fields plus messages), the ordering behavior (oldest-to-newest), and that the result is a JSON object. It does not address edge behaviors like empty threads, but the output schema covers the return contract.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, all load-bearing: purpose with an itemized payload, ordering behavior, read-only safety, required input, and return type. Front-loaded with verb and resource; zero filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter read tool with an output schema, the description covers what it returns, what input is required, and its safety profile. An agent can invoke it correctly with only thread_id, and the limit constraints live in the schema. Nothing material needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% — both thread_id and limit already have descriptions covering the snowflake pattern, constraints, and default, so the baseline is 3. The description adds only marginal reinforcement by telling the agent to pass thread_id and linking 'recent messages' to the limit parameter; it does not carry the semantic burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get'), a precise resource ('a forum post's details'), and itemizes the payload (title, archived/locked state, applied tags, message count, recent messages oldest-to-newest). This distinguishes it from sibling getters like discord_read_messages (general message reads) and discord_list_forum_threads (listing threads rather than fetching one post's details).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the use case clear — pull details plus recent messages for a single forum post — and gives a concrete invocation instruction ('Pass the post's thread_id') along with the 'Read-only' framing so an agent knows this is a safe fetch. It does not explicitly name alternatives or state when-not-to-use conditions, which keeps it just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_forum_tagsARead-only
List the tags available on a forum channel (id, name, emoji, moderated flag). Read-only. Use these IDs with discord_create_forum_post or discord_update_forum_post; manage the tag set with discord_set_forum_tags.
| Name | Required | Description | Default |
|---|---|---|---|
| forum_channel_id | Yes | ID (snowflake) of the forum channel to read tags from. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tags | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, and the description restates the read-only nature rather than adding substantial new behavioral disclosures. It does add useful context about downstream usage and returned fields, but the output schema and annotations carry much of the behavioral burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the primary action and followed by useful routing context. The 'Read-only' sentence is slightly redundant with annotations, but the description remains compact, scannable, and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with an output schema and readOnlyHint, the description is complete: it identifies the result fields, names the dependent sibling tools, and clarifies the tag-management tool. No critical usage information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and forum_channel_id is already fully documented as a snowflake ID of the forum channel. The description only repeats 'forum channel' and adds no parameter-level detail, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List'), identifies the resource ('tags available on a forum channel'), and enumerates the returned fields (id, name, emoji, moderated flag). It is clearly distinguished from sibling tools like discord_set_forum_tags and discord_create_forum_post by naming them in its usage guidance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly frames the tool as read-only and tells the agent to use the resulting IDs with discord_create_forum_post or discord_update_forum_post, while directing tag-set management to discord_set_forum_tags. This provides clear routing among the forum-related siblings with no misleading exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_guild_infoARead-only
Get details about one server: name, description, member/channel/role counts, boost tier, owner, and creation date. Read-only. Use discord_get_server_stats for a finer breakdown (humans vs bots, channel types).
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes | Discord server (guild) ID (snowflake). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| owner | Yes | |
| createdAt | Yes | |
| roleCount | Yes | |
| boostCount | Yes | |
| boostLevel | Yes | |
| description | Yes | |
| memberCount | Yes | |
| channelCount | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only safety profile is covered. The description adds a 'Read-only' statement that repeats the annotation and enumerates returned data, but does not disclose additional behavioral traits like rate limits or failure modes. This is acceptable but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words: the first states the tool's purpose and scope, and the second points to the relevant alternative. The key information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a simple input schema, a complete output schema, and annotations covering side effects. The description covers the operation scope and even routes to the sibling tool for finer detail, making this definition complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single guild_id parameter is already documented with its type, pattern, and purpose. The description does not add parameter-level meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get details about one server' and enumerates the returned fields (name, description, counts, boost tier, owner, creation date). It also distinguishes itself from discord_get_server_stats, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool and explicitly routes to discord_get_server_stats for a finer breakdown. It lacks explicit when-not-to-use conditions, but the alternative is named and the basic-vs-fine distinction is meaningful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_inviteARead-only
Look up a single invite by its code: target server and channel, inviter, and expiry. Works for any public invite, but this endpoint never returns usage counters (uses/max_uses/max_age read 0); use discord_list_invites or discord_list_channel_invites for real counters. Read-only. Returns a JSON object.
| Name | Required | Description | Default |
|---|---|---|---|
| invite_code | Yes | The invite code, e.g. 'abc123'. A full discord.gg/abc123 URL is also accepted and stripped. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| code | Yes | |
| uses | Yes | |
| inviter | Yes | |
| max_age | Yes | |
| guild_id | Yes | |
| max_uses | Yes | |
| temporary | Yes | |
| channel_id | Yes | |
| created_at | Yes | |
| expires_at | Yes | |
| guild_name | Yes | |
| channel_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses a non-obvious limitation: usage counters are never returned and read as 0. It also clarifies that the tool works on any public invite and returns JSON. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: purpose first, then the key limitation with alternatives, then read-only and return type. It is compact, front-loaded, and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only lookup tool with an output schema, the description covers purpose, scope, known behavioral limitation, and alternative tools. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and fully documents the single invite_code parameter, including URL stripping behavior. The description adds no additional parameter semantics beyond 'by its code,' so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Look up a single invite by its code.' It also lists the returned data (target server/channel, inviter, expiry), making the scope unambiguous and distinct from invite-creation/deletion siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells agents when to use this tool ('Works for any public invite') and when not to use it ('never returns usage counters'), then names the alternatives: discord_list_invites or discord_list_channel_invites. This is direct routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_member_infoARead-only
Get full details for one server member: roles, effective permissions, account/join dates, bot flag, and current timeout status. Read-only. Returns a JSON object.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | Discord user ID (snowflake) of the member. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| bot | Yes | |
| roles | Yes | |
| joinedAt | Yes | |
| nickname | Yes | |
| username | Yes | |
| createdAt | Yes | |
| permissions | Yes | |
| timedOutUntil | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, and the description reinforces this with 'Read-only' while adding what the tool does not do: mutate. It also adds return format ('Returns a JSON object') and the specific member attributes covered, which goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the first front-loads the purpose and enumerates the returned fields, the second confirms safety and output type. No wasted words or redundant restatement of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, two-parameter lookup tool with an output schema, the description is complete: it names the inputs (guild_id and user_id are in the schema), the scope, the returned data, and the read-only behavior. No additional context is necessary for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides complete descriptions for both parameters, including snowflake patterns and role in the request. The tool description adds no additional parameter-level meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Get full details for one server member') and enumerates exactly what is returned: roles, effective permissions, account/join dates, bot flag, and timeout status. This clearly distinguishes it from list/search member tools by emphasizing a single member.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when you need comprehensive details for one known member, and 'Read-only' signals it is safe. However, it never explicitly names alternatives like discord_list_members, discord_search_members, or discord_get_role_members, nor does it state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_membership_screeningARead-only
Fetch the server's membership screening form, the rules/questions new members must accept before gaining access. Requires the server to have the Community feature enabled. Read-only. Returns the form as JSON, including its version.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes | Discord server (guild) ID (snowflake). |
Output Schema
| Name | Required | Description |
|---|---|---|
| version | Yes | |
| description | Yes | |
| form_fields | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, and the description adds useful behavioral context: the Community feature requirement, that the result is returned as JSON, and that the response includes the form's version. There is no contradiction with annotations, and no hidden side effects are implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences that front-load the action and resource, then provide the prerequisite and return format. Every sentence adds useful information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only tool with an output schema, the description is complete: it identifies what is fetched, the precondition, and the response format. An agent has enough information to select and invoke the tool correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; the only parameter, guild_id, is already well described as a Discord server ID snowflake with a validation pattern. The description does not need to add parameter-specific meaning, and the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: it fetches the server's membership screening form, and explains what that form is (rules/questions new members must accept). This distinguishes it from the sibling discord_update_membership_screening and from other get-style tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear prerequisite: the server must have the Community feature enabled. It does not explicitly name alternatives or state when not to use the tool, but the read-only fetch wording and the sibling update tool make the intended use reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_message_attachmentsARead-only
List the file attachments of a message. Returns { attachments: [...] } with id, filename, title (the original name when Discord strips non-ASCII from filename), url, proxyUrl, contentType, size in bytes, width, height, alt-text description, voice-message duration and waveform, spoiler flag. Discord signs CDN urls with a 24-hour expiry and does not re-sign on every fetch; re-call this tool if a stored url has expired. Requires the View Channel and Read Message History permissions. Read-only. Use discord_read_messages to find messages with attachments.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ID (snowflake) of the channel or thread containing the message. | |
| message_id | Yes | ID of the message whose attachments to list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| attachments | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds important behavioral context: CDN URLs expire after 24 hours and are not re-signed, so the agent must re-call the tool if a stored URL has expired. This is exactly the kind of non-obvious behavior an agent needs to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then provides necessary behavioral details. The return-field list is a bit long but each item gives useful semantic information, and the URL-expiry and permission notes justify their space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description does not need to enumerate return values, yet it does anyway for clarity. It covers permissions, URL expiry, read-only behavior, and the sibling tool to use for finding messages, making it fully actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents channel_id and message_id. The description does not add much parameter-specific meaning beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('file attachments of a message'), making the tool's function unambiguous. It clearly distinguishes itself from sibling tools like discord_read_messages by focusing on attachment retrieval rather than message content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent to use discord_read_messages to find messages with attachments, providing a clear alternative and routing condition. It also states required permissions (View Channel, Read Message History), giving necessary usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_reactionsARead-only
List the users who reacted to a message with a specific emoji. Returns { reactions: [...] } with id, username, bot flag. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| emoji | Yes | Unicode emoji or custom emoji 'name:id' to list reactors for. | |
| limit | No | Max users to return (1–100). Default 25. | |
| channel_id | Yes | ID (snowflake) of the channel or thread containing the message. | |
| message_id | Yes | ID of the message to inspect. |
Output Schema
| Name | Required | Description |
|---|---|---|
| reactions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description repeats 'Read-only' and mentions the return shape. It does not add deeper behavioral context such as pagination behavior, rate limits, or what happens when no users have reacted, though the annotations and output schema cover the safety and return aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words; the main purpose is front-loaded and the additional read-only note is brief.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with a full input schema and an output schema, the description provides enough context for correct invocation. No important behavioral or invocation detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented. The description adds no additional parameter semantics beyond what the schema provides, matching the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') tied to a clear resource (users who reacted to a message with a specific emoji). It also distinguishes itself from reaction-mutating siblings like discord_add_reaction and discord_remove_reactions by emphasizing a read-only listing operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear context of when to call this tool: to inspect which users reacted to a message with a given emoji. It does not explicitly name alternatives or exclusion conditions, but the read-only framing implicitly rules out mutation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_role_membersARead-only
List members who currently hold a specific role, scanning up to 20,000 members. Returns { members: [...], truncated }; check truncated on very large servers. Read-only. Use discord_list_roles to discover role IDs first.
| Name | Required | Description | Default |
|---|---|---|---|
| role_id | Yes | ID (snowflake) of the role to list holders of. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| members | Yes | |
| truncated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint=true annotation, the description discloses the 20,000-member scan cap, the return shape { members: [...], truncated }, and the truncation caveat for large servers. The 'Read-only.' statement is consistent with the annotation; no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose plus scanning limit, return shape plus caveat, and read-only declaration plus prerequisite. Information is front-loaded and there is zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only list tool with an output schema, everything needed to call it correctly is present: both parameters, the 20k limit, truncation semantics, and the role discovery workflow. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both role_id and guild_id are already fully documented with snowflake patterns. The description adds a modest workflow hint for obtaining role_id (via discord_list_roles) but does not add substantial meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List members who currently hold a specific role') plus an explicit scope boundary (scanning up to 20,000 members). This clearly differentiates it from sibling tools like discord_list_members (all members) and discord_get_member_info (single member).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite workflow: 'Use discord_list_roles to discover role IDs first,' and advises checking `truncated` on very large servers. It lacks an explicit when-not-to-use exclusion against discord_list_members or discord_search_members, but the context is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_scheduled_eventARead-only
Get full details for one scheduled event: name, description, status, type, channel/location, start/end times, creator, and interested-user count. Read-only. Returns a JSON object.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | ID (snowflake) of the scheduled event. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| image | Yes | |
| status | Yes | |
| location | Yes | |
| channel_id | Yes | |
| creator_id | Yes | |
| user_count | Yes | |
| description | Yes | |
| entity_type | Yes | |
| scheduled_end_time | Yes | |
| scheduled_start_time | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the safety profile, so the description's 'Read-only' statement adds no new behavioral information. It does disclose that the result is a JSON object and lists the fields returned, but it does not address error behavior, permissions, or rate limits. This is acceptable for a read-only getter but not richly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the action and resource. Statements like 'Read-only' and 'Returns a JSON object' are somewhat redundant given the annotations and output schema, but the overall size is appropriate and there is no fluff or ambiguity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with a full input schema, an output schema, and a readOnlyHint annotation, the description is mostly complete. It lists the key returned fields and clearly indicates scope, though it does not mention potential failure cases or permission requirements. These omissions are minor for this tool complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (guild_id and event_id) are already fully documented in the schema. The description does not add parameter-specific guidance beyond indicating that it operates on one scheduled event, which does not raise the score above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a specific resource ('one scheduled event'), and enumerates the exact details returned. It is easily distinguished from sibling tools like discord_list_scheduled_events, discord_create_scheduled_event, and discord_get_event_subscribers because it clearly targets a single event's full details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use it: when the agent needs full details for a single scheduled event, identified by guild_id and event_id. It does not explicitly name alternative tools or state when not to use it, so it stops short of a perfect 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_server_statsARead-only
Get a snapshot of server metrics: total members (humans vs cached bots), channel breakdown (text/voice/category), role count, boost tier and count, and creation date. Read-only. Returns a JSON object. Note: bots are counted from the member cache only, so botsInCache is a lower bound and humans (total minus cached bots) an upper bound.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes | Discord server (guild) ID (snowflake). |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| roles | Yes | |
| humans | Yes | |
| channels | Yes | |
| createdAt | Yes | |
| boostCount | Yes | |
| boostLevel | Yes | |
| botsInCache | Yes | |
| totalMembers | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces this with 'Read-only.' It adds valuable behavioral context beyond the annotations by disclosing that bots are counted only from the member cache, making botsInCache a lower bound and humans an upper bound. This caveat is exactly the kind of non-obvious behavior an agent needs to correctly interpret results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the purpose, lists the metric categories, confirms read-only behavior, and then adds the important caching caveat. Every sentence contributes useful information, and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only snapshot tool with an output schema and strong annotations, the description is complete. It covers what is returned, the read-only nature, and the crucial caveat about cached bot counts, leaving no important gap for an agent to call and interpret the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents guild_id with its type, pattern, and description, and schema description coverage is 100%. The tool description does not add any extra meaning about the parameter itself, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a snapshot of server metrics and enumerates the specific data included (members, channels, roles, boosts, creation date). It is distinct in content from siblings like discord_get_guild_info, but it does not explicitly name or contrast any sibling, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose statement implies this is the tool to use when a server metrics snapshot is needed, and the 'Read-only' note signals safe usage. However, there is no explicit guidance about when not to use it or which sibling alternatives might be more appropriate for related but different needs, such as discord_get_guild_info or discord_list_channels.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_kick_memberADestructive
Remove a member from the server. They can rejoin with a new invite (unlike a ban). Requires the Kick Members permission, and the bot's top role must be higher than the target's. Use discord_ban_member to block re-entry. The reason is recorded in the audit log.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional reason recorded in the server audit log. | |
| user_id | Yes | Discord user ID (snowflake) of the member to kick. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as destructive, but the description adds meaningful context beyond that: kicked users may rejoin via invite, permission and role-hierarchy constraints exist, and the reason is recorded in the audit log. This is exactly the kind of behavioral detail an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences with no filler: action first, then the ban distinction, then requirements, then the alternative tool. Every sentence carries useful information and is structured for quick agent parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the outcome, reversibility, permission requirements, role hierarchy, audit-log behavior, and the alternative tool. For a destructive member-management action with 3 well-documented parameters, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so guild_id, user_id, and reason are already fully documented in the input schema. The description only restates that the reason is recorded in the audit log, which the schema already says, so it adds no new parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action, 'Remove a member from the server', and immediately distinguishes itself from a ban by noting the member can rejoin with a new invite. It names the sibling discord_ban_member, so an agent can clearly separate this tool from related member-removal tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative tool, discord_ban_member, for blocking re-entry, which tells the agent when not to pick kick. It also gives concrete prerequisites: the Kick Members permission and the bot's top role being higher than the target's.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_list_bansARead-only
List the users banned from the server, with their ban reasons. Returns { bans: [...], nextCursor }. A page holds up to 1000 bans; if nextCursor is non-null, pass it back as after to fetch the next page. Requires the Ban Members permission. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor: a user ID (snowflake). Pass the previous response's nextCursor to fetch the next page. | |
| limit | No | Max bans per page (1–1000). Default 1000. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). |
Output Schema
| Name | Required | Description |
|---|---|---|
| bans | Yes | |
| nextCursor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds valuable behavioral detail: pagination behavior (1000 per page, nextCursor as `after`), the returned shape, required permission, and an explicit read-only statement. This fully informs the agent of what to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: the main purpose, the pagination contract, and the permission/safety note. No filler; every sentence earns its place and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paginated list tool, the description is complete: it covers purpose, return shape, pagination mechanics, permission requirement, and read-only nature. Even though an output schema exists, the description provides the essential runtime context an agent needs to invoke and navigate the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already documented. The description adds value by explaining the pagination flow between `nextCursor` and `after`, and connecting the 1000-bans page limit to the `limit` parameter, going beyond the schema's individual field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('users banned from the server'), and clarifies it includes ban reasons. This clearly differentiates it from sibling tools like discord_list_members or discord_ban_member.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving banned users and notes the required Ban Members permission, but it does not explicitly state when to prefer this over alternatives or when not to use it. Usage context is reasonable but left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_list_channel_invitesARead-only
List the active invites that point to one specific channel. Unlike discord_list_invites (server-wide), this scopes results to a single channel. Requires the Manage Channels permission. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ID (snowflake) of the channel to list invites for. |
Output Schema
| Name | Required | Description |
|---|---|---|
| invites | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces this with 'Read-only.' It adds useful behavioral context beyond the annotations by stating the required permission and the 'active invites' filtering behavior. No contradictions with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler. The main action is front-loaded, the differentiating comparison follows immediately, and the permission/read-only notes are compact and relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition is complete for a read-only single-parameter tool: the parameter is fully documented, an output schema exists, the closest sibling is differentiated, and permission requirements are stated. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents channel_id with type, format, and description, achieving 100% coverage. The description repeats the single-channel concept but does not add new parameter-level meaning beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('active invites that point to one specific channel'), and explicitly distinguishes itself from discord_list_invites (server-wide). This makes the tool's purpose immediately clear and distinct from its closest sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly contrasts with discord_list_invites and states the scoping condition: single channel vs server-wide. It also notes the required Manage Channels permission, giving the agent clear guidance on when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_list_channelsARead-only
List all channels in a server, grouped by their parent category and ordered by position. Returns a JSON object keyed by category name. Read-only. Use discord_find_channel_by_name to locate a specific channel.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes | Discord server (guild) ID (snowflake). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already supply readOnlyHint=true, and the description reinforces this with 'Read-only.' It adds valuable behavioral context not in the annotations: grouping by category, ordering by position, and the exact output shape (JSON object keyed by category name). This is useful disclosure beyond the structured metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only three sentences, each earning its place: the primary behavior, the return shape/ordering, and routing to the sibling tool. No filler or redundant restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one well-documented parameter, an output schema, and annotations declaring it safe and open-world, the description covers everything an agent needs to invoke it correctly and distinguish it from the closest sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the single parameter fully ('Discord server (guild) ID (snowflake)') with 100% coverage. The description adds no further parameter-level meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), resource ('all channels in a server'), and adds meaningful detail about grouping by parent category and ordering by position. It also differentiates itself from discord_find_channel_by_name, which would be the natural overlapping sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names the alternative tool and the condition for using it: 'Use discord_find_channel_by_name to locate a specific channel.' This gives an agent clear routing guidance beyond just saying what the tool does.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_list_forum_threadsARead-only
List posts in a forum channel. Returns { threads: [...], hasMore, nextBefore }. The first call (no before) includes all active posts plus the first page of archived posts; archived posts are paginated, so if hasMore is true pass nextBefore back as before to fetch older archived posts. Read-only. Use discord_get_forum_post to read one post's messages.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max archived posts per page (1–100). Default 100. | |
| before | No | Pagination cursor: an ISO timestamp. Pass the previous response's nextBefore to fetch older archived posts. When set, active posts are omitted. | |
| forum_channel_id | Yes | ID (snowflake) of the forum channel to list posts from. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hasMore | Yes | |
| threads | Yes | |
| nextBefore | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the readOnlyHint/openWorldHint annotations: it explains the mixed active/archived post response, the pagination cursor semantics, and the read-only nature. It does not cover auth/rate-limit concerns, but for a read-only list tool the disclosed behavior is quite transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no filler. The primary purpose is front-loaded, followed by return shape, pagination behavior, read-only status, and the relevant alternative tool. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, all three parameters are fully documented, and annotations provide the read-only/open-world context, the description contains everything needed to invoke and paginate this tool correctly. The explicit pointer to discord_get_forum_post completes the usage story.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining how parameters interact: absence of before yields active posts plus the first archived page, and passing nextBefore as before fetches older archived posts and omits active posts. This goes beyond the schema's individual parameter docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'List posts in a forum channel', which is a specific verb + resource statement. It clearly differentiates itself from the sibling discord_get_forum_post by noting that reading one post's messages requires that tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly describes when to call this tool and gives an alternative: 'Use discord_get_forum_post to read one post's messages.' It also explains the pagination protocol clearly: the first call has no before, subsequent calls pass nextBefore back as before when hasMore is true.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_list_guildsARead-only
List every Discord server (guild) the bot is a member of (id, name, member count, icon). Takes no arguments. Read-only. Start here to discover the guild_id needed by most other tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| guilds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces this with 'Read-only'. It adds useful behavioral context by clarifying the scope is the bot's guild membership and naming the returned fields, though it does not discuss pagination or rate limits, which are less critical for a read-only listing with an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: the action and result, the zero-arg/read-only nature, and the cross-tool navigation hint. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only list tool with an output schema and supporting annotations, the description covers what the tool returns, why an agent would call it, and how it fits into the larger workflow. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty with additionalProperties=false, so there is little for the description to add. Stating 'Takes no arguments' removes any doubt and earns the baseline credit for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' with a clear resource 'every Discord server (guild) the bot is a member of' and enumerates the returned fields. It also positions itself as the entry point for discovering guild_id, which clearly distinguishes it from sibling tools like discord_list_channels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to start here to find the guild_id needed by most other tools, giving clear contextual guidance. It does not explicitly list when not to use it or name alternatives, but the 'Read-only' note and entry-point framing are strong enough for an agent to choose it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_list_invitesARead-only
List all active invites across a server (code, url, channel, inviter, uses, expiry). Requires the Manage Server permission. Read-only. Use discord_list_channel_invites to scope to one channel.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes | Discord server (guild) ID (snowflake). |
Output Schema
| Name | Required | Description |
|---|---|---|
| invites | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds useful behavioral context: the permission requirement, that only active invites are returned, and that 'all' invites across the server are included. This goes beyond the structured annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the core action and scope, then adds permission, read-only status, and the alternative tool. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a low-complexity single-parameter list tool with an output schema. The description covers the permission requirement, the scope, the returned fields, and the relevant sibling alternative. Nothing critical is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the only parameter, guild_id, is already clearly documented as a Discord server ID snowflake. The description adds no additional parameter-level meaning beyond what the schema provides, so the baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('all active invites across a server'), lists the returned fields, and explicitly distinguishes itself from the sibling tool discord_list_channel_invites. This makes the tool's purpose immediately clear and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description names the alternative discord_list_channel_invites and gives the exact condition for choosing it ('to scope to one channel'). It also states the required permission (Manage Server), giving clear guidance on when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_list_membersARead-only
List members of a server with their roles, ordered by user ID. Returns { members: [...], nextCursor }. A page holds up to 1000 members; if nextCursor is non-null, pass it back as after to fetch the next page. Use discord_search_members to find specific members by name, or discord_get_member_info for one member's full details. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Pagination cursor: a user ID (snowflake). Pass the previous response's nextCursor to fetch the next page. | |
| limit | No | How many members per page (1–1000). Default 50. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). |
Output Schema
| Name | Required | Description |
|---|---|---|
| members | Yes | |
| nextCursor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses pagination behavior (page size up to 1000, nextCursor semantics), ordering by user ID, and the exact return shape. It also explicitly states 'Read-only,' which is consistent with the annotation and adds behavioral clarity. There is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences, each earning its place: the core purpose, the pagination behavior, and the routing to sibling tools. It is front-loaded with the primary action and contains zero filler, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a paginated list tool. It covers what is returned, how pagination works, and which sibling tools to use for alternative needs. Since an output schema exists, it need not detail return fields further, and the annotations already cover the read-only safety profile. Nothing necessary for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains all three parameters. The description's pagination note about nextCursor mirrors the `after` parameter's schema description, and 'page holds up to 1000 members' restates the `limit` maximum. It does not add substantial new parameter-level meaning beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List members of a server with their roles.' It also specifies ordering by user ID, and differentiates itself from siblings by naming discord_search_members and discord_get_member_info as alternatives. Even the title 'List members' aligns perfectly with the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use alternatives: 'Use discord_search_members to find specific members by name, or discord_get_member_info for one member's full details.' It also gives clear pagination guidance: pass nextCursor back as `after` for the next page. This leaves no ambiguity about when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_list_rolesARead-only
List all roles in a server (excluding @everyone), highest-first, with color, position, member count, and permissions. Read-only. Returns { roles: [...] }. Use discord_get_role_members to see who holds a given role.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes | Discord server (guild) ID (snowflake). |
Output Schema
| Name | Required | Description |
|---|---|---|
| roles | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral detail beyond the annotations: roles are sorted highest-first, @everyone is excluded, and the output fields include color, position, member count, and permissions. It also confirms the return shape as { roles: [...] }. While 'Read-only' repeats the readOnlyHint annotation, the additional behavioral specifics justify a strong score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three crisp sentences that front-load the core behavior, then add ordering/exclusion details, return shape, and a sibling pointer. Every sentence earns its place and there is no redundant prose beyond the harmless restatement of read-only.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter, read-only list operation with an output schema and readOnlyHint annotation, the description covers what is needed: scope, ordering, exclusions, returned fields, output structure, and a pointer to the relevant sibling for membership lookup. No material gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter guild_id is already described in the schema as a Discord server ID snowflake. The description adds no parameter-specific semantics, which is acceptable because the schema fully documents the one required input. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('List all roles in a server') and adds rich detail: enumeration excludes @everyone, ordering is highest-first, and returned fields are named (color, position, member count, permissions). This clearly distinguishes it from role-mutation siblings like discord_create_role/discord_edit_role and from discord_get_role_members, so an agent can confidently identify its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes the agent to a sibling alternative, discord_get_role_members, for resolving which members hold a role. It also implies the appropriate use case of enumerating a server's roles rather than mutating or inspecting individual memberships. It does not exhaustively discuss when not to use the tool, but the clear sibling pointer provides useful selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_list_scheduled_eventsARead-only
List all scheduled events in a server (id, name, status, type, time, location, interested count). Read-only. Use discord_get_scheduled_event for one event's full details.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes | Discord server (guild) ID (snowflake). |
Output Schema
| Name | Required | Description |
|---|---|---|
| events | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals safety, and the description reinforces it with 'Read-only'. It adds useful context by defining the scope as 'all scheduled events in a server' and listing the summary fields returned. It does not mention pagination or rate limits, but this simple list operation does not obviously require such caveats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely compact: two sentences carry the action, the resource scope, the returned fields, the read-only nature, and a pointer to the relevant sibling tool. Every clause contributes value, and the main purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only list operation with a fully documented input schema and an existing output schema, the description covers the remaining essential context: scope, summary fields, and how this tool differs from the detailed single-event sibling. No critical information is missing for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: the only parameter, guild_id, is already described with type, pattern, and a semantic definition in the input schema. The description only indirectly references it as 'a server' and adds no additional format or usage meaning beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation ('List'), the resource ('all scheduled events in a server'), and the returned summary fields (id, name, status, type, time, location, interested count). It also distinguishes this from the sibling tool discord_get_scheduled_event by explicitly noting the latter returns one event's full details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates when to use this tool: when all scheduled events in a server are needed. It also gives an explicit alternative and condition: use discord_get_scheduled_event when one event's full details are required. This gives the agent clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_list_webhooksARead-only
List the webhooks in a single channel or across a whole server (id, name, channel, token when visible, creator). Provide exactly one of channel_id or guild_id. Requires the Manage Webhooks permission. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | No | Discord server (guild) ID (snowflake) to list all webhooks for. Mutually exclusive with channel_id. | |
| channel_id | No | ID (snowflake) of a channel to list webhooks for. Mutually exclusive with guild_id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| webhooks | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true; the description adds valuable behavioral context beyond that: the required Manage Webhooks permission and the 'token when visible' caveat, which warns that tokens are conditionally returned. 'Read-only' merely restates the annotation but does not contradict it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the verb and scope front-loaded; the exclusivity rule and permission note each earn their place. The trailing 'Read-only' is redundant with the readOnlyHint annotation, a one-word waste that keeps this from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter list tool with an output schema, annotations, and full schema coverage, nothing material is missing: scope, returned fields, permission prerequisite, and parameter selection rule are all stated. The 'token when visible' nuance is a bonus that makes it genuinely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both params already document the snowflake pattern and mutual exclusivity. The description's 'exactly one of' rule restates what the schema already says, adding no new semantic information, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') with a precise resource ('webhooks') and clearly delimits the scope: a single channel or a whole server. It also summarizes the returned fields (id, name, channel, token when visible, creator), making it easy to distinguish from sibling mutation tools like discord_create_webhook, discord_edit_webhook, and discord_delete_webhook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear invocation context: 'Provide exactly one of channel_id or guild_id' resolves the two supported modes, and 'Requires the Manage Webhooks permission' states an explicit precondition. It does not name specific alternative tools or exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_lock_channel_permissionsAIdempotent
Reset a channel's permission overwrites to exactly match its parent category (Discord's 'sync permissions'). The channel must be inside a category. Requires the Manage Roles permission. Returns a confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ID (snowflake) of the channel to sync with its parent category. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as non-read-only and idempotent; the description adds that existing overwrites are reset to match the parent, that a category is required, and that a confirmation is returned. It could more explicitly warn that channel-specific overrides are discarded, but 'exactly match' conveys the effect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: the core operation, the prerequisite, and the permission/return behavior. Information is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter mutation with no output schema, the description covers what happens, the precondition, the required permission, and the return behavior. Combined with the annotations (idempotent, non-destructive, non-read-only), nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter has 100% schema description coverage, so the schema already documents channel_id as a snowflake of the channel to sync. The description reinforces the category requirement but adds no new parameter-level detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description leads with a specific action and resource: 'Reset a channel's permission overwrites to exactly match its parent category.' The parenthetical '(Discord's sync permissions)' anchors the behavior in Discord terminology, making it clearly distinguishable from generic permission tools even though no sibling is named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear eligibility and permission context: the channel must be inside a category and the caller needs Manage Roles. It does not explicitly name alternatives like discord_reset_channel_permissions or state when not to use this tool, but the context is sufficient for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_move_channelAIdempotent
Move a channel into a category, or remove it from its category when category_id is omitted. Requires the Manage Channels permission. Use discord_set_channel_position to reorder within a category. Returns a confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ID (snowflake) of the channel to move. | |
| category_id | No | Target category (snowflake). Omit to move the channel out of any category. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only, non-destructive, idempotent behavior. The description adds valuable context beyond annotations by requiring the Manage Channels permission and stating that a confirmation is returned. This gives the agent practical expectations without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler: purpose, permission, alternative, and return value are each covered once. The primary action and the omission variant are front-loaded, making the tool easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with no output schema, the description covers everything an agent needs: what the tool does, how to remove from a category, required permission, the sibling to use for reordering, and the confirmation response. No critical guidance is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters clearly. The description restates the omission behavior that is also present in the category_id schema description, but it does not add significant new parameter semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Move') with a clear resource (channel) and states the two distinct behaviors: moving into a category or removing from a category. It also distinguishes itself from the sibling discord_set_channel_position by naming that tool for reordering, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool versus discord_set_channel_position: use this for category moves, use the other for reordering within a category. It also covers the optional category_id case, leaving no inference needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_pin_messageAIdempotent
Pin or unpin a message in a channel, controlled by the pin flag. Requires the Pin Messages permission (a dedicated permission since early 2026, separate from Manage Messages). A channel holds at most 50 pins. Idempotent: pinning an already-pinned message (or unpinning an unpinned one) has no additional effect.
| Name | Required | Description | Default |
|---|---|---|---|
| pin | Yes | true to pin the message, false to unpin it. | |
| channel_id | Yes | ID (snowflake) of the channel or thread containing the message. | |
| message_id | Yes | ID of the message to pin or unpin. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=false, destructiveHint=false, and idempotentHint=true, and the description meaningfully extends these: it details the auth requirement (dedicated Pin Messages permission, distinct from Manage Messages), the operational limit (50 pins max), and precisely what idempotency means here (pinning an already-pinned or unpinning an unpinned message has no effect). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences (~60 words) with zero filler. The core behavior and controlling flag are front-loaded, followed by permission, limit, and idempotency details in decreasing order of importance. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter mutation with full schema coverage and strong annotations, the description covers behavior, mode selection, permission prerequisites, capacity limits, and idempotency semantics. No output schema exists, but pin/unpin operations have trivial success responses, so return-value documentation is not a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 even without parameter info in the description. The description's 'controlled by the pin flag' restates the schema's 'true to pin the message, false to unpin it' rather than adding new meaning. The schema also already documents the snowflake patterns and thread support, so the description adds no value beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource pair ('Pin or unpin a message in a channel') and immediately clarifies the dual-mode behavior via the pin flag. This distinguishes it from siblings like discord_delete_message, discord_send_message, and discord_fetch_pinned_messages without needing to inspect the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context: the Pin Messages permission is a dedicated permission separate from Manage Messages, channels cap at 50 pins, and the operation is idempotent. It does not explicitly name alternatives (e.g., discord_fetch_pinned_messages for reading pins) or state when-not-to-use conditions, but the context is substantial enough to guide correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_prune_membersADestructive
Remove members who have been inactive (no roles, not seen) for a number of days. SAFE BY DEFAULT: dry_run is true unless explicitly set to false, so call it first to preview the count, then re-call with dry_run:false to actually remove them. Removal is irreversible (members must rejoin). Requires the Kick Members permission.
| Name | Required | Description | Default |
|---|---|---|---|
| days | Yes | Inactivity threshold in days (1–30). | |
| roles | No | Optional role IDs (snowflakes) to include; by default only members with no roles are counted. | |
| reason | No | Optional reason recorded in the server audit log. | |
| dry_run | No | If true (default), only returns the count that would be pruned without removing anyone. Set false to actually prune. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true, but the description adds valuable behavioral context beyond that: safe-by-default dry_run behavior, the preview-then-remove workflow, irreversibility of removal, and the required permission. This gives the agent a clear safety model for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each carrying distinct information: the action, the safe dry-run workflow, and the irreversibility/permission caveats. There is no filler or repetition, and the most important safety guidance is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive bulk operation with no output schema, the description supplies everything an agent needs to invoke it safely: preview-first behavior, irreversibility, permission requirements, and the inactivity criteria. With full schema coverage, no critical operational detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters are already fully documented. The description reinforces dry_run semantics and the inactivity criteria, but adds no new syntax or parameter details beyond what the input schema provides, which matches the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and target: 'Remove members who have been inactive (no roles, not seen) for a number of days.' This clearly states what the tool does and distinguishes it from individual member actions like kick or ban by focusing on bulk pruning of inactive members.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit safe workflow: call with dry_run true to preview the count, then re-call with dry_run:false to actually remove. It also states the Kick Members permission prerequisite. It does not explicitly compare against alternative sibling tools, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_read_dmsARead-only
Read the most recent messages from the bot's DM conversation with a user, oldest-to-newest. Returns { messages: [...] } with id, author, content, embed count, timestamp. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many recent messages to fetch (1–100). Default 20. | |
| user_id | Yes | Discord user ID (snowflake) of the DM recipient. |
Output Schema
| Name | Required | Description |
|---|---|---|
| messages | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, and the description reinforces this with 'Read-only.' It adds useful behavioral detail beyond annotations by specifying the return shape ({ messages: [...] }), included fields, and chronological ordering. This is sufficient for a simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the core action and scope, then provides return format and read-only status. Every sentence adds necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and this is a straightforward read-only DM fetch, the description covers the essential context: what is read, the scope, message ordering, and return structure. No critical information for invoking it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters are already well documented in the schema. The description adds minimal parameter meaning beyond restating the DM conversation context, so the schema carries the burden and the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Read the most recent messages from the bot's DM conversation with a user.' It uniquely identifies DM scope and distinguishes this from sibling tools like discord_read_messages, which presumably handles channel messages. It also states ordering (oldest-to-newest), removing ambiguity about message order.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies this is the tool for reading a user DM conversation, which is enough context for an agent to select it over most siblings. It does not explicitly mention alternatives or exclusion criteria, but the DM-specific wording and sibling names make the intended use fairly clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_read_messagesARead-only
Read messages from a text channel or thread, oldest-to-newest. Page backwards by re-calling with before set to the id of the oldest message you received, which walks a channel past the 100-message per-call cap. Requires the View Channel and Read Message History permissions. Returns { messages: [...] } with id, author, content, timestamp, attachment count, pinned flag. Use discord_search_messages to filter by keyword, or discord_fetch_pinned_messages for pinned messages only.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Return only messages newer than this message ID (snowflake). Page forwards by passing the id of the newest message from the previous call. | |
| limit | No | How many messages to fetch per call (1–100). Default 20. | |
| since | No | Return only messages posted after this instant, as an ISO 8601 date or a date-time with an explicit offset (e.g. "2026-08-01" or "2026-08-01T09:00:00Z"). Convenience form of `after`: the call yields the oldest `limit` messages after that instant, so page forwards with `after` set to the newest id received. | |
| around | No | Return messages centered on this message ID (snowflake): Discord splits `limit` either side of it, and an even `limit` puts the extra message on the newer side. Use it to read outward from a known message, such as a discord_search_guild_messages hit. | |
| before | No | Return only messages older than this message ID (snowflake). Page backwards through history by passing the id of the oldest message from the previous call. | |
| channel_id | Yes | ID (snowflake) of the channel or thread to read from. |
Output Schema
| Name | Required | Description |
|---|---|---|
| messages | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true and openWorldHint=true, so the safety profile is already established. The description adds substantial behavioral context beyond that: required permissions (View Channel, Read Message History), the 100-message per-call cap, pagination mechanics, oldest-to-newest ordering, and the exact return shape. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences with no wasted words: purpose and ordering, pagination mechanics, permission requirements, return shape, and sibling routing. Front-loaded with the core purpose and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with 6 parameters, pagination complexity, and permission requirements, the description covers everything an agent needs: scope, ordering, paging strategy, the per-call cap, auth prerequisites, return shape summary, and when to use sibling tools. An output schema exists, so full return-value documentation is not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already has rich descriptions (before/after/around/limit/since all explain their semantics). The description adds value by connecting the limit maximum to the 100-message cap and explaining the paging-walk strategy using before. This exceeds the baseline 3 but doesn't need to do much more given the schema's thoroughness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Read messages from a text channel or thread') along with the ordering behavior ('oldest-to-newest'). It names the sibling alternatives explicitly (discord_search_messages, discord_fetch_pinned_messages), making the tool easy to distinguish without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit routing guidance: 'Use discord_search_messages to filter by keyword, or discord_fetch_pinned_messages for pinned messages only.' Also gives a concrete usage pattern for pagination ('Page backwards by re-calling with before set to the id of the oldest message you received'), including how to work past the 100-message per-call cap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_remove_reactionsADestructiveIdempotent
Remove reactions from a message. With no emoji: removes ALL reactions. With emoji only: removes every reaction of that emoji. With emoji and user_id: removes that one user's reaction. Removing all reactions or another user's reaction requires the Manage Messages permission. Use discord_add_reaction to add.
| Name | Required | Description | Default |
|---|---|---|---|
| emoji | No | Unicode emoji or custom emoji 'name:id'. Omit to remove ALL reactions on the message. | |
| user_id | No | Remove only this user's reaction for the given emoji. Requires emoji to be set. | |
| channel_id | Yes | ID (snowflake) of the channel or thread containing the message. | |
| message_id | Yes | ID of the message to remove reactions from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint and readOnlyHint annotations, the description discloses exactly what gets destroyed in each mode, including the all-reactions case. It also exposes the Manage Messages permission requirement for removing all reactions or another user's reaction, adding meaningful behavioral context the annotations do not carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence carries distinct information: core purpose, the three scope variants, the permission caveat, and the sibling routing sentence. It is front-loaded with the main action and uses compact parallel phrasing with no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive reaction tool with no output schema, the description covers all necessary call decisions: which parameters to include, what each combination removes, and when elevated permission is required. The annotations fill in the remaining idempotency and destructiveness context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all four parameters at 100% coverage, so the baseline is 3. The description adds value by defining the legal combinations of emoji and user_id and their effects, which the parameter descriptions alone only partially convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and object, 'Remove reactions from a message,' and then breaks out the exact scope variants: all reactions, one emoji, or one user's reaction. It also names the related sibling discord_add_reaction, making the tool's purpose easy to distinguish from the add operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The three parameter combinations are explicitly mapped to three removal behaviors, and the permission requirement for the destructive variants is stated. The final sentence tells the agent to use discord_add_reaction when the intent is to add rather than remove, providing a clear routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_remove_roleAIdempotent
Remove a role from a member. Requires the Manage Roles permission, and the role must be below the bot's highest role. Idempotent: removing a role the member doesn't have has no effect. Reverses discord_add_role.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional reason recorded in the server audit log. | |
| role_id | Yes | ID (snowflake) of the role to remove. | |
| user_id | Yes | Discord user ID (snowflake) of the member to remove the role from. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by explaining the exact idempotency behavior ('removing a role the member doesn't have has no effect') and the permission/hierarchy requirements. It also clarifies the relationship to discord_add_role, which is behavioral context not present in the structured data. No contradiction with annotations; idempotentHint and destructiveHint are both consistent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each contributing distinct value: the action, the prerequisites, the idempotency detail, and the sibling relationship. It is front-loaded with the main verb and resource, and there is zero filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the essential context: what it does, permissions, role hierarchy, idempotent behavior, and relation to a sibling. It doesn't mention possible error cases (e.g., member not in guild, role not found), but these are reasonably inferred from standard Discord behavior and the schema's snowflake patterns. Overall, the agent has enough to use it correctly in most scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter (guild_id, user_id, role_id, reason) already documented. The description adds no additional parameter-level meaning, so the baseline of 3 applies. The requirement about the bot's role hierarchy provides some context for role_id but is not a direct parameter semantic.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Remove a role from a member') that unambiguously states the action. It distinguishes itself from siblings by explicitly noting it 'Reverses discord_add_role,' differentiating it from role-editing or role-deletion tools. The name itself is also descriptive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: it reverses discord_add_role, implying the primary use case is undoing a role assignment. It also states prerequisites (Manage Roles permission, role must be below the bot's highest role), which helps the agent decide if the tool can be invoked. It doesn't explicitly list alternatives for when not to use it, but the named sibling relationship gives solid guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_reply_dmA
Reply to a specific message in a DM, attaching a quoted reply reference. Unlike the edit/delete DM tools, this works on any message in the conversation (the bot's or the user's). Use discord_send_dm for a standalone DM with no reference. Returns the new reply's message ID.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Plain-text body of the reply (max 2000 characters). | |
| user_id | Yes | Discord user ID (snowflake) of the DM recipient. | |
| message_id | Yes | ID of the target message within the DM conversation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal a non-read, non-destructive write operation, so the bar is lower. The description adds useful behavioral context beyond annotations: the quoted-reply reference behavior, the fact that the target can be the bot's or the user's message, and the return value (new reply's message ID). It does not discuss failures or rate limits, but the added context is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste: core behavior, sibling differentiation, alternative routing, and return value. The most important scoping constraint is front-loaded in the first sentence, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with rich schema descriptions and annotations, the description is nearly complete: it covers behavior, quoting, message scope, alternatives, and return value. The only gap is not explicitly distinguishing from discord_reply_message (the guild-message counterpart), though the DM scope is inherent in the tool name and description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by clarifying message_id semantics — that the target can be 'any message in the conversation (the bot's or the user's)' — which is not stated in the schema. It also states that content is a plain-text reply body, consistent with the schema's max-2000-character constraint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: 'Reply to a specific message in a DM, attaching a quoted reply reference.' It distinguishes from sibling DM tools (edit/delete/send) by noting it works on any message and that send_dm is for standalone messages with no reference. The purpose is immediately clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use guidance is provided: 'Unlike the edit/delete DM tools, this works on any message in the conversation... Use discord_send_dm for a standalone DM with no reference.' This names alternatives and the condition that selects this tool, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_reply_messageA
Reply to a specific message, attaching a reply reference so clients show it as a threaded reply. Use discord_send_message for a standalone message with no reference. Requires the Send Messages permission. Returns the new reply's message ID.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Plain-text body of the reply (max 2000 characters). | |
| channel_id | Yes | ID (snowflake) of the channel or thread containing the message. | |
| message_id | Yes | ID of the message to reply to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses that a reply reference is attached, that clients render it as a threaded reply, that Send Messages permission is required, and that the response contains the new message ID. No statement contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each carrying distinct information: behavior, alternative, permission, and return value. It is front-loaded with the core action and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter mutation with no output schema, the description covers the essentials: what the tool does, when to use it, what permission is needed, and what it returns. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all three parameters. The description reinforces the relationship between message_id and channel_id by explaining the reply reference, but adds no syntax or parameter-specific detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Reply') and a specific resource ('a specific message'), then explains the reply-reference mechanism. It explicitly differentiates itself from discord_send_message, the closest sibling, by contrasting threaded vs standalone messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit routing rule: use discord_send_message for a standalone message with no reference, and by implication use this tool when a reply reference is desired. It also states the required Send Messages permission, giving the agent enough context to decide when to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_reply_to_forumA
Post a follow-up message inside an existing forum post (thread). Requires the Send Messages in Threads permission (shown as 'Send Messages in Posts' for forums). Use discord_create_forum_post to start a new post instead. Returns the new message ID.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Plain-text body of the reply (max 2000 characters). | |
| thread_id | Yes | ID (snowflake) of the forum post (thread) to reply in. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a write operation (readOnlyHint=false), but the description adds useful context beyond that: the required 'Send Messages in Threads' permission and the fact that the tool 'Returns the new message ID'. This enriches the agent's understanding without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three targeted sentences carry the action, permission requirement, alternative, and return value without redundancy. It opens with the core purpose and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, both required parameters are fully documented in the schema, annotations cover the write nature, and the description provides the missing return information. An agent has everything needed to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and both parameters already have clear descriptions in the schema: content is a max-2000-character plain-text body, and thread_id is the snowflake ID of the forum post. The description adds no extra parameter-level meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Post a follow-up message inside an existing forum post (thread)', identifying both a specific verb and resource. It also distinguishes itself from discord_create_forum_post by explicitly saying that tool is for starting a new post instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use context: 'inside an existing forum post'. It also names the alternative, discord_create_forum_post, and tells the agent to use that instead when starting a new post. The permission requirement further clarifies the conditions under which this tool can be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_reset_channel_permissionsADestructiveIdempotent
Remove ALL permission overwrites on a channel, so only role/server-level permissions apply. Does NOT re-sync with the category; use discord_lock_channel_permissions for that. IRREVERSIBLE: the cleared overwrites cannot be recovered. Requires the Manage Roles permission.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional reason recorded in the server audit log. | |
| channel_id | Yes | ID (snowflake) of the channel whose overwrites will be cleared. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as destructive and non-read-only, but the description adds meaningful behavioral context beyond those hints: the operation is IRREVERSIBLE, the cleared overwrites cannot be recovered, and the Manage Roles permission is required. It also discloses the non-resync behavior, which is not captured in the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each carrying essential information: the action, the critical limitation and alternative, and the irreversibility/permission warning. No filler, and the most important operational detail is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema, the description provides everything an agent needs to invoke it correctly: the exact effect, a safety warning, the required permission, and a sibling alternative for a related but different operation. The annotations already cover read-only/destructive/idempotent traits, and the schema covers parameters, so no meaningful gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both channel_id and reason are already documented in the schema. The description does not add new parameter-level detail, which is acceptable given the schema already fully defines the parameters. This matches the baseline for full-schema-coverage tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Remove ALL permission overwrites on a channel') and clarifies the exact scope of the operation — only overwrites are removed, leaving role/server-level permissions intact. It also distinguishes itself from nearby permission tools by explaining what it does not do (resync with the category), making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when this tool is appropriate (when all overwrites should be removed) and provides a clear exclusion: it does not resync with the category, and names the sibling tool discord_lock_channel_permissions as the alternative for that case. It also gives a prerequisite (Requires the Manage Roles permission), which helps an agent decide whether this is the right tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_search_guild_messagesARead-only
Search for messages across all channels in a guild using Discord's native search API. Returns messages matching the query with channel context. Requires READ_MESSAGE_HISTORY permission. Use discord_search_messages for channel-specific search.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max messages to return (1–25). Default 25. | |
| query | Yes | Search query (case-insensitive). | |
| guild_id | Yes | Discord server (guild) ID (snowflake). | |
| author_id | No | Optional. Only show messages from this user ID. | |
| channel_id | No | Optional. Restrict search to this channel ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| matches | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds valuable context beyond annotations by specifying the permission requirement and explaining that results include channel context, which helps set expectations for what the search returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences with no filler. It front-loads the core purpose and scope, then adds the permission requirement and the sibling-tool distinction, making every sentence valuable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with a complete input schema, an output schema, and annotations already covering the read-only and open-world hints, the description provides sufficient context. It identifies scope, permission needs, result shape, and the relevant alternative tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented in the schema. The description adds only minimal semantic value by confirming matches are based on 'query' and that results carry 'channel context', but it does not need to compensate for schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific operation: search for messages across all channels in a guild using Discord's native search API. It is explicitly distinguished from discord_search_messages by noting the channel-specific alternative, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description defines the tool's scope ('across all channels') and explicitly provides guidance for when not to use it: 'Use discord_search_messages for channel-specific search.' The required READ_MESSAGE_HISTORY permission also gives practical usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_search_membersARead-only
Find server members whose username or nickname starts with a query string (prefix match). Returns { members: [...] } with id, username, nickname, roles. Use discord_list_members to page through everyone. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max members to return (1–100). Default 25. | |
| query | Yes | Prefix to match against usernames and nicknames. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). |
Output Schema
| Name | Required | Description |
|---|---|---|
| members | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark the tool as readOnlyHint=true and openWorldHint=true, and the description reinforces 'Read-only.' It also adds useful behavior beyond annotations: prefix matching semantics and the exact member fields returned, which helps an agent predict the call's effect without risking side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences with no filler. It front-loads the purpose, then provides return shape, sibling alternative, and safety trait. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is read-only, has full schema coverage, an output schema, and a clear sibling alternative, the description is complete enough for an agent to select and invoke it correctly. It names the key behavior, return fields, and the paging alternative without needing extra context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already documented. The description adds no new parameter-level detail; it restates the prefix-match behavior of 'query' and the return shape. This meets the baseline but does not exceed what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Find server members whose username or nickname starts with a query string (prefix match).' This clearly distinguishes the tool from siblings like discord_list_members and discord_get_member_info by emphasizing prefix matching over pagination or exact lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names the alternative for paging through all members: 'Use discord_list_members to page through everyone.' It gives a clear usage context for when to choose this tool versus a sibling, though it does not cover exclusions such as exact-name lookup or message search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_search_messagesARead-only
Keyword search over a channel's recent messages using case-insensitive substring matching. Scans only up to the last 100 messages; it does not search full history. Returns { matches: [...] } with id, author, content, timestamp. Use discord_read_messages to fetch recent messages without filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max number of recent messages to scan (1–100). Default 100. | |
| keyword | Yes | Case-insensitive substring to match within message content. | |
| channel_id | Yes | ID (snowflake) of the channel or thread to search. |
Output Schema
| Name | Required | Description |
|---|---|---|
| matches | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already covering the safety profile, the description adds meaningful behavioral context: the 100-message scan cap, the non-full-history limitation, and the exact return shape { matches: [...] } with field names. This goes beyond the annotations and tells the agent what actually happens at runtime.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences (~65 words) with nothing wasted. Core purpose is front-loaded, followed by the critical limitation, the return shape, and the sibling routing. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity filtered-read tool, the description is nearly complete: it covers purpose, semantics, scope limits, return format, and an alternative tool, while annotations and output schema handle safety and response structure. The only gap is not distinguishing from discord_search_guild_messages (guild-wide vs. channel-local search), though the phrase 'a channel's recent messages' largely implies it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (channel_id, keyword, limit) are already documented in the input schema. The description reinforces the keyword semantics and contextualizes the limit with 'Scans only up to the last 100 messages,' but adds no new parameter syntax or format details. Baseline 3 applies as schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('search'), a precise resource ('a channel's recent messages'), and the matching mechanism ('case-insensitive substring matching'). The channel-scoped phrasing distinguishes it from discord_search_guild_messages, and it explicitly names discord_read_messages as the unfiltered alternative, so an agent can tell them apart immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: use when you need keyword filtering over a channel's recent messages. Names discord_read_messages as the alternative when no filtering is needed and states an explicit exclusion ('does not search full history'). However, it does not mention the guild-wide search sibling (discord_search_guild_messages) for broader search needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_send_dmA
Send a private direct message to a user by their user ID. Use discord_send_message to post in a server channel instead. Requires the bot to share at least one server with the user, and the user must allow DMs from server members (otherwise Discord rejects the send). Returns the new message ID.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Plain-text body of the DM (max 2000 characters). | |
| user_id | Yes | Discord user ID (snowflake) of the DM recipient. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the failure mode (Discord rejects the send if DMs are not allowed), the prerequisite of sharing a server, and the return value (new message ID). Annotations only indicate read-only, idempotency, and destructive hints, so this extra behavioral context is valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no wasted words. The primary action is front-loaded, the sibling alternative is given immediately, and the prerequisites and return value each earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter send action with no output schema, the description covers the essential context: what it does, when to use the alternative, the failure conditions, prerequisites, and what the caller gets back. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters are already well documented in the schema: user_id as a Discord snowflake and content as max-2000-character plain text. The description adds only minimal extra meaning, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Send a private direct message to a user by their user ID.' It clearly distinguishes this tool from the sibling discord_send_message by explicitly noting that discord_send_message is for server channels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent to use discord_send_message instead when posting in a server channel, and it states the preconditions for success: the bot must share a server with the user and the user must allow DMs from server members. This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_send_dm_embedA
Send a rich embed as a private direct message to a user. Use discord_send_dm for plain text, or discord_send_embed to post an embed in a channel. Requires the bot to share a server with the user, and the user must allow DMs from server members. Returns the new message ID.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL that makes the title clickable. | |
| color | No | Side-bar color as a hex string, e.g. '#5865F2'. | |
| title | No | Embed title shown in bold at the top. | |
| author | No | Author block shown at the top of the embed. | |
| fields | No | Up to 25 name/value field blocks. Set inline:true on a field to render it side-by-side with adjacent inline fields (up to 3 per row). | |
| footer | No | Footer text shown at the bottom of the embed. | |
| content | No | Optional plain text shown above the embed. | |
| user_id | Yes | Discord user ID (snowflake) of the DM recipient. | |
| image_url | No | Large image shown below the embed body. | |
| timestamp | No | If true, stamp the embed with the current time. | |
| description | No | Main body text of the embed (supports Markdown). | |
| thumbnail_url | No | Small image shown in the top-right corner. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as a non-read, non-idempotent write, so the bar is lower. The description adds genuine value beyond that: the DM permission prerequisites, the open-world dependency on recipient settings, and the return value ('Returns the new message ID') which is otherwise undisclosed since there is no output schema. The description is consistent with all annotation hints — no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: core purpose, sibling routing, then prerequisites plus return value. Front-loaded and free of filler or restatement of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a complex 12-param tool with nested objects and no output schema. The description covers purpose, alternative routing, prerequisites, and the return value (compensating for the missing output schema). Failure conditions are implied by the stated prerequisite about DM permissions, which is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — all 12 parameters, including nested author and fields objects, have meaning-bearing descriptions in the schema. The description itself adds no parameter-level detail, but with full coverage it doesn't need to, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource — 'Send a rich embed as a private direct message to a user' — and immediately distinguishes itself from siblings by naming discord_send_dm (plain text) and discord_send_embed (channel embed). An agent can tell this apart from the sibling send tools without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides selection criteria: use discord_send_dm for plain text, discord_send_embed for embeds in a channel, and this tool for embeds delivered as DMs. It also discloses prerequisites the agent must verify before calling — the bot must share a server with the recipient and the user must allow DMs from server members — so the agent knows when the call will likely fail.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_send_embedA
Send a single rich embed (title, description, color, fields, author, footer, images, timestamp). Use discord_send_message for plain text, or discord_send_multiple_embeds to send several embeds at once. Requires the Send Messages and Embed Links permissions. Returns the new message ID.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL that makes the title clickable. | |
| color | No | Side-bar color as a hex string, e.g. '#5865F2'. | |
| title | No | Embed title shown in bold at the top. | |
| author | No | Author block shown at the top of the embed. | |
| fields | No | Up to 25 name/value field blocks. Set inline:true on a field to render it side-by-side with adjacent inline fields (up to 3 per row). | |
| footer | No | Footer text shown at the bottom of the embed. | |
| image_url | No | Large image shown below the embed body. | |
| timestamp | No | If true, stamp the embed with the current time. | |
| channel_id | Yes | ID (snowflake) of the target channel or thread. | |
| description | No | Main body text of the embed (supports Markdown). | |
| thumbnail_url | No | Small image shown in the top-right corner. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), lowering the burden on the description. The description adds genuine value by disclosing auth requirements ('Requires the Send Messages and Embed Links permissions') and the return behavior ('Returns the new message ID'), which matters since no output schema exists. It does not mention rate limits or failure modes, but those are minor gaps given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero fluff: core function first, then routing guidance, then permissions and return value. Every sentence earns its place and the most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter creation tool with nested objects and no output schema, the description covers the essentials: what it does, when to use it versus alternatives, required permissions, and the return value (message ID). Minor gaps remain — it does not bound whether the target channel may be a DM (versus discord_send_dm_embed) and does not flag Discord's embed content limits — but the fully-covered schema compensates for most of this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description's component list (title, description, color, fields, author, footer, images, timestamp) mostly echoes parameter names already documented in the schema rather than adding new meaning, and it adds nothing about formats, constraints, or relationships beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Send a single rich embed', and enumerates its components (title, description, color, fields, author, footer, images, timestamp). It also explicitly distinguishes itself from discord_send_message and discord_send_multiple_embeds, so an agent can tell them apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is explicitly routed: 'Use discord_send_message for plain text, or discord_send_multiple_embeds to send several embeds at once.' It also states the required permissions ('Send Messages and Embed Links'), giving concrete preconditions an agent must verify before invoking the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_send_messageA
Send a plain-text message to a channel or thread. For rich content (title, color, fields, images) use discord_send_embed; to attach a reply reference to an existing message use discord_reply_message. Requires the bot to have the Send Messages permission. Returns the new message ID.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Plain-text body of the message (max 2000 characters). | |
| channel_id | Yes | ID (snowflake) of the target channel or thread. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-read-only, non-idempotent write operation, but the description adds important behavioral context: the bot must have Send Messages permission, and the tool returns the new message ID. This is especially valuable because there is no output schema. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, each earning its place: purpose, alternatives, and prerequisite/return value. The core purpose and scope are front-loaded, and there is no redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema, the description is complete: it covers what the tool does, when to use alternatives, required permission, and the return value. An agent has enough context to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description mostly restates what the schema already says ('plain-text', 'channel or thread') and adds limited new parameter meaning beyond the structured definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Send') and resource ('plain-text message to a channel or thread'). It explicitly differentiates from discord_send_embed and discord_reply_message, so an agent can distinguish this tool from its closest siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names concrete alternatives and the conditions that select them: rich content should use discord_send_embed, and reply-reference use should use discord_reply_message. It also states a required prerequisite (Send Messages permission), which helps an agent know when this tool is applicable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_send_multiple_embedsA
Send up to 10 embeds in a single message, with optional text above them. Use discord_send_embed for a single embed. Requires the Send Messages and Embed Links permissions. Returns the new message ID.
| Name | Required | Description | Default |
|---|---|---|---|
| embeds | Yes | Array of embed objects to send (max 10). | |
| content | No | Optional plain text shown above the embeds. | |
| channel_id | Yes | ID (snowflake) of the target channel or thread. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are thin (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), so the description carries the behavioral burden. It discloses permission requirements and the return value ('Returns the new message ID'), which are genuinely additive beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: core action, sibling routing, then permissions plus return value. No redundant restatement of the schema and the key scope fact (up to 10) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 100% schema coverage, the tool is fairly complex (embeds carry many fields) and there is no output schema, so the description's disclosure of the return value is important and present. A minor gap is the absence of failure or rate-limit behavior, but the operational essentials are covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents channel_id, embeds, and content in detail. The description adds only marginal confirmation — the 10-embed cap (also in maxItems) and the optional-text placement (already stated in the content field description) — so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource — 'Send up to 10 embeds in a single message' — including the cardinality limit and the optional text companion. It further differentiates from the closest sibling by directing single-embed use to discord_send_embed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the alternative tool and the condition selecting it: 'Use discord_send_embed for a single embed.' It also states the required permissions (Send Messages and Embed Links), giving the agent actionable prerequisites before invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_send_webhook_messageA
Send a message through a webhook using its ID and token (no bot permissions needed; the token authorizes the send). Supports per-message username/avatar overrides and up to 10 embeds. At least one of content or embeds is required. Returns the new message ID.
| Name | Required | Description | Default |
|---|---|---|---|
| embeds | No | Up to 10 embed objects to attach to the webhook message. | |
| content | No | Plain-text body of the message (max 2000 characters). Optional if embeds are provided. | |
| username | No | Override the webhook's default display name for this message. | |
| avatar_url | No | Override the webhook's default avatar for this message. | |
| webhook_id | Yes | ID (snowflake) of the webhook to send through. | |
| webhook_token | Yes | Secret token of the webhook (from discord_create_webhook or discord_list_webhooks). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond the annotations: the token authorizes the send, no bot permissions are needed, content or embeds are required, and the message ID is returned. This meaningfully explains the operation's side effects and return value without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: core action first, then feature highlights, then a critical validation rule, then the return value. Every sentence adds value and there is no redundant or vague wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich 100%-covered input schema and no output schema, the description provides the missing pieces: auth requirements, payload constraints, and return value. An agent has enough information to invoke this tool correctly and understand what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds the important cross-parameter constraint that at least one of content or embeds is required, which is not enforced by the schema's required fields. It also summarizes the username/avatar overrides and 10-embed limit, though those are already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states the specific action: send a message through a webhook using its ID and token, with no bot permissions needed. This clearly differentiates it from bot-token message tools like discord_send_message and from webhook management tools like discord_edit_webhook. The resource and mechanism are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: when you have a webhook ID and token and do not need bot permissions. It does not explicitly name alternative tools or state when not to use it, but the auth distinction makes the intended usage fairly evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_set_channel_positionAIdempotent
Set a channel's display order within its category. Use discord_move_channel to change which category it belongs to. Requires the Manage Channels permission. Returns a confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| position | Yes | Zero-based position within the category (0 = top). | |
| channel_id | Yes | ID (snowflake) of the channel to reposition. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating, non-destructive, idempotent operation. The description adds useful behavioral context beyond those annotations: the permission requirement, that a confirmation is returned, and the constraint that this only changes ordering within a category.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler. The main purpose is stated first, the differentiating sibling is mentioned second, and the permission and return value complete the picture efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with fully documented schema and clear annotations, the description is complete: it explains what it does, how it differs from the related tool, what permission is needed, and what response to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already fully documented in the input schema. The description reinforces that position applies within a category but does not add significant new parameter-level meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Set'), a specific resource ('a channel's display order'), and the scope ('within its category'). It clearly distinguishes this from the sibling tool discord_move_channel, which changes category membership rather than ordering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the alternative tool (discord_move_channel), states exactly when it should be used instead, and lists the required permission (Manage Channels). This leaves no ambiguity about when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_set_forum_tagsADestructiveIdempotent
Replace the full set of available tags on a forum channel with the provided list. This overwrites existing tags, so include every tag you want to keep. Requires the Manage Channels permission. Returns a confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | Yes | Complete list of tags to set (replaces all existing tags). | |
| forum_channel_id | Yes | ID (snowflake) of the forum channel to set tags on. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint, readOnlyHint false), the description explains exactly what is destroyed: all existing tags are overwritten. It also discloses the required permission and that a confirmation is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: main action, overwrite warning, permission/return value. It is front-loaded and contains no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter mutation with full schema coverage and annotations, the description is complete: it covers the destructive effect, required permission, and return behavior. No output schema exists, but 'Returns a confirmation' fills that gap adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters. The description's 'include every tag you want to keep' reinforces the tags parameter but does not add meaning beyond the schema's 'replaces all existing tags' wording.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Replace the full set of available tags on a forum channel with the provided list.' This clearly distinguishes it from the read-only sibling discord_get_forum_tags and from post-level tag operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the overwrite behavior and warns to include every tag to keep, which tells an agent when this replacement tool is appropriate. It also gives a prerequisite (Manage Channels permission). It does not explicitly name alternative tools for read-only tag retrieval, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_set_member_permissionAIdempotent
Add or update a per-channel permission overwrite for a single member, allowing and/or denying specific permissions. Merges with the member's existing overwrite. Requires the Manage Roles permission. Use discord_set_role_permission to target a whole role instead.
| Name | Required | Description | Default |
|---|---|---|---|
| deny | No | Permission flag names to deny (array, or JSON-encoded array string). | |
| allow | No | Permission flag names to allow, e.g. ['ViewChannel'] (or the same array JSON-encoded as a string). Uses Discord PermissionsBitField flag names. | |
| reason | No | Optional reason recorded in the server audit log. | |
| user_id | Yes | ID (snowflake) of the member to grant/deny permissions for. | |
| channel_id | Yes | ID (snowflake) of the channel to set the overwrite on. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true), the description adds meaningful behavioral context: it merges with the member's existing overwrite rather than replacing it, and it requires the Manage Roles permission. This gives the agent a solid understanding of the write behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no filler: the core action, key behavioral detail, permission requirement, and sibling alternative are all included. The most important scoping information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a permission-overwrite tool with rich schema coverage and no output schema, the description covers the essential invocation context: what it does, the merge semantics, the permission prerequisite, and when to use the sibling tool. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents channel_id, user_id, allow, deny, and reason thoroughly. The description reinforces that allow/deny accept specific permission flags and that the operation merges, but it does not need to add much parameter detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Add or update'), a precise resource ('per-channel permission overwrite for a single member'), and the effect ('allowing and/or denying specific permissions'). It also distinguishes itself from the role-targeted sibling tool, making it easy to select correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the required 'Manage Roles' permission, which is essential preconditions information. It also gives a clear routing instruction: use discord_set_role_permission when targeting a whole role instead. This is direct, actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_set_nicknameAIdempotent
Set or clear a member's server nickname. Pass null (or the string 'null') to clear it. Requires the Manage Nicknames permission (or Change Nickname for the bot itself). The reason is recorded in the audit log.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional reason recorded in the server audit log. | |
| user_id | Yes | Discord user ID (snowflake) of the member. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). | |
| nickname | Yes | New nickname (max 32 characters), or null to clear it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description reveals the null/string-'null' clearing behavior, the audit-log side effect of the reason, and the permission requirements. These are exactly the kind of behavioral details an agent needs that are not visible in the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences contain the action, the edge behavior, the permission requirement, and the audit-log effect with no filler. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation tool, the description covers what the action does, how to clear, who may call it, and a key side effect. The schema supplies the parameter formats, so no critical information needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explicitly stating that null or the string 'null' clears the nickname, an edge case not clear from the schema alone, and confirms the audit-log role of the reason parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Set or clear a member's server nickname,' which precisely states the action and target. It also clarifies the clear behavior and distinguishes the tool from permission/role-related siblings such as discord_set_member_permission.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operating context: it is the tool to use for nickname changes, and it states the permission prerequisites ('Manage Nicknames' or 'Change Nickname for the bot itself'). It does not explicitly name alternatives or when-not-to-use conditions, so it stops one step short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_set_role_iconAIdempotent
Set or clear a role's icon, either a custom image or a unicode emoji. Requires the server to be Boost Level 2+ (the ROLE_ICONS feature) and the Manage Roles permission. Pass null to either field to remove that icon. Returns a confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| icon | No | Image URL for the role icon, or null to remove it. | |
| role_id | Yes | ID (snowflake) of the role to set the icon on. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). | |
| unicode_emoji | No | Unicode emoji to use as the role icon, or null to remove it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behavioral details: the feature-level requirement (Boost Level 2+), the permission requirement (Manage Roles), the semantics of passing null to clear an icon, and that a confirmation is returned. This goes well beyond what readOnlyHint, idempotentHint, or destructiveHint convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no filler: the action comes first, then prerequisites, then null behavior and expected return. Each sentence contributes necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a relatively simple 4-parameter tool with no output schema, the description covers the action, prerequisites, clearing behavior, and return value. Nothing critical is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds context about using either an image or emoji and passing null to clear, but this largely mirrors what the schema already states. It doesn't substantially extend parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Set or clear a role's icon') with a specific resource, and distinguishes the two input forms: custom image or unicode emoji. It is immediately distinguishable from sibling role-related tools like discord_set_role_permission or discord_edit_role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context for when the tool is applicable by stating required server Boost Level 2+ and Manage Roles permission. It doesn't explicitly name alternatives or say when not to use it, but the prerequisites and specific purpose give clear enough guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_set_role_permissionAIdempotent
Add or update a per-channel permission overwrite for a role, allowing and/or denying specific permissions. Merges with the role's existing overwrite (does not reset it). Denying View Channel to @everyone also locks the bot out unless it holds an allow overwrite of its own; grant that with discord_set_member_permission before the deny. Requires the Manage Roles permission. Use discord_set_member_permission to target a single member instead.
| Name | Required | Description | Default |
|---|---|---|---|
| deny | No | Permission flag names to deny, e.g. ['SendMessages'] (or the same array JSON-encoded as a string). | |
| allow | No | Permission flag names to allow, e.g. ['SendMessages','ViewChannel'] (or the same array JSON-encoded as a string). Uses Discord PermissionsBitField flag names. | |
| reason | No | Optional reason recorded in the server audit log. | |
| role_id | Yes | ID (snowflake) of the role to grant/deny permissions for. | |
| channel_id | Yes | ID (snowflake) of the channel to set the overwrite on. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses that the operation merges with the existing overwrite rather than resetting it, requires the Manage Roles permission, and that denying View Channel to @everyone locks out the bot unless a separate allow overwrite is granted first. This meaningfully informs the agent of side effects and prerequisites, and does not contradict the idempotentHint or destructiveHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences long and every sentence earns its place: purpose, merge semantics, a critical bot-lockout warning with mitigation, the required permission, and the relevant sibling alternative. It is front-loaded with the core action and wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool without an output schema, the description is remarkably complete: it explains what the tool does, how it behaves on existing overwrites, the required permission, a dangerous edge case, and how to route to the member-targeting sibling. No critical operational guidance appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% parameter coverage, including descriptions for allow, deny, reason, role_id, and channel_id. The description adds no new parameter-level detail beyond referencing 'allowing and/or denying specific permissions,' so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Add or update a per-channel permission overwrite for a role.' It clearly distinguishes this from member targeting by directing to discord_set_member_permission, and the 'Merges with the role's existing overwrite' note adds crucial scoping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context including the required 'Manage Roles' permission and an explicit alternative: 'Use discord_set_member_permission to target a single member instead.' It also warns about a high-risk case (denying View Channel to @everyone) and how to avoid it, though it does not enumerate all related permission-management siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_set_role_positionAIdempotent
Move a role up or down in the server's role hierarchy, which determines permission precedence and member-list ordering. Higher position = higher in the list. Requires the Manage Roles permission, and the target position must be below the bot's highest role.
| Name | Required | Description | Default |
|---|---|---|---|
| role_id | Yes | ID (snowflake) of the role to reposition. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). | |
| position | Yes | New hierarchy position (1 = lowest, just above @everyone, which sits at 0). Higher numbers rank higher. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, which already indicate a non-read-only, non-destructive, idempotent operation, the description discloses the permission requirement, the role-hierarchy constraint, and the behavioral consequence of moving the role. This gives the agent a clear model of what will happen and what conditions must hold before invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the core action and effect, and includes only high-value operational details. There is no filler, repetition of the tool name, or redundant schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three required parameters, full schema coverage, and no output schema, the description covers the key call-side knowledge: what the operation does, how position works, what permission is needed, and the critical hierarchy constraint. Nothing essential for correctly selecting and invoking the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all three parameters with 100% coverage, including the position semantics. The description adds operational meaning to the position parameter by explaining that higher means higher in the list and by adding the constraint that the target position must be below the bot's highest role — information not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Move') and resource ('role') and clearly explains the effect on the server's role hierarchy, including permission precedence and member-list ordering. It is immediately distinguishable from siblings like discord_set_role_permission and discord_edit_role because it focuses solely on repositioning a role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context: when repositioning a role in the hierarchy, it affects permission precedence and ordering. It also states important prerequisites — Manage Roles permission and the constraint that the target position must be below the bot's highest role — though it does not explicitly name alternative tools or say when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_timeout_memberAIdempotent
Mute a member for a set duration (Discord 'timeout'): they cannot send messages, react, or speak until it expires. Pass duration_minutes = 0 to remove an active timeout early. Max 28 days (40320 minutes). Requires the Moderate Members permission.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional reason recorded in the server audit log. | |
| user_id | Yes | Discord user ID (snowflake) of the member to time out. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). | |
| duration_minutes | Yes | Timeout length in minutes (0–40320, i.e. up to 28 days). Use 0 to clear an existing timeout. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as non-readOnly, idempotent, and non-destructive. The description adds valuable behavioral detail beyond those hints: exactly what the timeout prevents, that duration_minutes = 0 clears an active timeout early, the 28-day maximum, and the permission requirement. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all load-bearing: the main effect, the zero-duration edge case, and the permission prerequisite. The most important information is front-loaded, and there is no filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 4-parameter mutation tool with no output schema, this description is complete enough for correct invocation: it explains the timeout effect, early removal, maximum duration, and required permission. The parameter details are fully covered by the schema, and no critical behavioral gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents duration bounds (0–40320), the 'Use 0 to clear' behavior, and the format of guild_id and user_id. The description repeats the 0-clear rule and max duration but does not add meaningful parameter-level semantics beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Mute a member for a set duration (Discord timeout)' and lists the concrete behavioral effects (cannot send messages, react, or speak). This clearly distinguishes it from permanent moderation siblings like kick_member and ban_member, and the title 'Timeout member' reinforces the same idea.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: temporary muting with a configurable duration, plus the special case of passing 0 to remove an active timeout. It also states the required 'Moderate Members' permission. It does not explicitly compare to alternatives like ban_member or kick_member, but the timeout semantics make the intended use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_unban_memberAIdempotent
Lift a ban so the user may rejoin via a new invite. Requires the Ban Members permission. Reverses discord_ban_member. The reason is recorded in the audit log.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional reason recorded in the server audit log. | |
| user_id | Yes | Discord user ID (snowflake) of the banned user to unban. | |
| guild_id | Yes | Discord server (guild) ID (snowflake). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with idempotentHint and destructiveHint annotations present, the description adds meaningful behavior: it names the required Ban Members permission, discloses that the reason is recorded in the audit log, and clarifies the practical consequence of the ban being lifted. This goes beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each carrying distinct information: the effect, the permission requirement, and the relationship to the inverse tool. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-required-parameter mutation with strong annotations and no output schema, the description covers the essential invocation context: what it does, what permission is needed, and what side effect to expect. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents guild_id, user_id, and reason fully. The description does not add parameter-level detail beyond what the schema states; the audit-log note about reason duplicates the schema's own description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete action and resource: 'Lift a ban so the user may rejoin via a new invite.' It also explicitly states the inverse relationship to discord_ban_member, which clearly distinguishes it from that sibling and other member-moderation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the direct alternative it reverses (discord_ban_member) and states the required permission, giving an agent clear conditions for when this tool applies. The purpose of undoing a ban is unambiguous, and no competing sibling is relevant for that action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_update_forum_postAIdempotent
Update a forum post's title, archived/locked state, or applied tags. Only provided fields change; passing applied_tags replaces the post's tags. Set archived:true to close a post without deleting it. Requires the Manage Threads permission.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | New title/thread name (max 100 characters). | |
| locked | No | true to lock the post so only moderators can reply. | |
| archived | No | true to archive (close) the post, false to reopen it. | |
| thread_id | Yes | ID (snowflake) of the forum post (thread) to update. | |
| applied_tags | No | Tag IDs to apply; replaces the post's current tags. Get valid IDs from discord_get_forum_tags. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly=false, destructive=false, idempotent=true), the description adds the partial-update behavior, the replacement semantics of applied_tags, the non-deleting archive behavior, and a permission requirement. It does not cover error cases or rate limits, but it is solid for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no filler, with the core action front-loaded and the most critical behavioral caveats following in order. Every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter tool with no output schema, the description covers the action, partial-update semantics, replacement behavior, non-deletion, and permission. It could be more complete by naming the alternative set_forum_tags tool or stating expected error outcomes, but the provided information is sufficient for a competent agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds object-level semantics not captured in the schema: only provided fields change and setting archived true closes without deleting. This partial-update nuance is genuinely useful for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action (update), a specific resource (forum post), and the affected fields (title, archived/locked state, applied tags). It is distinguishable from create/get/delete forum siblings, but it does not explicitly differentiate from the overlapping sibling discord_set_forum_tags.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives useful context: only provided fields change, applied_tags replaces existing tags, archived:true closes without deletion, and Manage Threads permission is required. However, it never states when to prefer this tool over alternatives such as discord_set_forum_tags or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_update_membership_screeningAIdempotent
Update the server's membership screening form: set the welcome description and the rules new members must agree to. Only provided fields change. Requires the Community feature and the Manage Server permission. Returns the updated form.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes | Discord server (guild) ID (snowflake). | |
| description | No | Welcome message shown at the top of the screening form. | |
| form_fields | No | Rules/agreement blocks new members must accept. Replaces the existing fields when provided. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, destructiveHint=false, and idempotentHint=true. The description adds useful behavioral context beyond those annotations: 'Only provided fields change' clarifies partial-update semantics, prerequisites are disclosed, and 'Returns the updated form' tells the agent what to expect despite the absence of an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the action and target are front-loaded, followed by the partial-update caveat, prerequisites, and return value. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an update tool with three parameters, one required, and no output schema, the description is complete. It covers what updates, what changes, what prerequisites are needed, and what is returned. The only remaining nuance, that form_fields replaces existing rules, is already present in the input schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter. The description summarizes the meaning of description and form_fields, but does not add syntax, formatting, or replacement semantics beyond what the schema already provides. The baseline of 3 applies here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Update the server's membership screening form' and explicitly identifies the two things it sets: 'welcome description' and 'rules new members must agree to.' This clearly distinguishes it from the sibling discord_get_membership_screening, which reads the same resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (to modify the membership screening form) and provides important prerequisites: the Community feature and Manage Server permission. However, it does not explicitly mention alternatives such as discord_get_membership_screening for reading the current form, nor does it state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
99 tool updates
v2.2.0- Changed
discord_add_reaction1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_add_role1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_audit_permissions1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_ban_member1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_bulk_ban2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / user_ids / descriptionPrevious value: -"Array of user IDs (snowflakes) to ban (max 200 per call — Discord API limit)."New value: +"Array of user IDs (snowflakes) to ban (max 200 per call, a Discord API limit)."
- Changed
discord_bulk_delete_messages1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_clone_channel1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_copy_permissions1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_create_channel1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_create_event_invite1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_create_forum_channel1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_create_forum_post1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_create_invite1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_create_role1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_create_scheduled_event1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_create_thread1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_create_webhook1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_crosspost_message1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_delete_channel1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_delete_dm1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_delete_forum_post1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_delete_invite1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_delete_message1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_delete_role1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_delete_scheduled_event1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_delete_webhook1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_delete_webhook_message1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_edit_channel1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_edit_dm1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_edit_dm_embed3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / author / additionalPropertiesAdded value: +false - added
Input schema / properties / fields / items / additionalPropertiesAdded value: +false
- Changed
discord_edit_embed3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / author / additionalPropertiesAdded value: +false - added
Input schema / properties / fields / items / additionalPropertiesAdded value: +false
- Changed
discord_edit_message1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_edit_role1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_edit_scheduled_event1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_edit_webhook1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_edit_webhook_message4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / embeds / items / additionalPropertiesAdded value: +false - added
Input schema / properties / embeds / items / properties / author / additionalPropertiesAdded value: +false - added
Input schema / properties / embeds / items / properties / fields / items / additionalPropertiesAdded value: +false
- Changed
discord_fetch_pinned_messages1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_fetch_webhook_message1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_find_channel_by_name1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_follow_announcement_channel1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_forward_message1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_get_audit_log2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / action_type / anyOfPrevious value: -[ - { - "enum": [ - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 30, - 31, - 32, - 40, - 41, - 42, - 50, - 51, - 52, - 60, - 61, - 62, - 72, - 73, - 74, - 75, - 80, - 81, - 82, - 83, - 84, - 85, - 90, - 91, - 92, - 100, - 101, - 102, - 110, - 111, - 112, - 121, - 130, - 131, - 132, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 150, - 151, - 163, - 164, - 165, - 166, - 167, - 190, - 191 - ], - "type": "number" - }, - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } -]New value: +[ + { + "enum": [ + 1, + 10, + 11, + 12, + 13, + 14, + 15, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 30, + 31, + 32, + 40, + 41, + 42, + 50, + 51, + 52, + 60, + 61, + 62, + 72, + 73, + 74, + 75, + 80, + 81, + 82, + 83, + 84, + 85, + 90, + 91, + 92, + 100, + 101, + 102, + 110, + 111, + 112, + 121, + 130, + 131, + 132, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 150, + 151, + 163, + 164, + 165, + 166, + 167, + 190, + 191, + 192, + 193 + ], + "type": "number" + }, + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + } +]
- Changed
discord_get_channel_permissions1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_get_event_subscribers1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_get_forum_channels1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_get_forum_post1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_get_forum_tags1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_get_guild_info1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_get_invite1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_get_member_info1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_get_membership_screening1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Added
discord_get_message_attachments - Changed
discord_get_reactions1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_get_role_members1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_get_scheduled_event1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_get_server_stats1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_kick_member1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_list_bans1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_list_channel_invites1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_list_channels1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_list_forum_threads1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_list_guilds1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_list_invites1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_list_members1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_list_roles1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_list_scheduled_events1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_list_webhooks1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_lock_channel_permissions1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_move_channel1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_pin_message1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_prune_members1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_read_dms1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_read_messages6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / afterAdded value: +{ + "description": "Return only messages newer than this message ID (snowflake). Page forwards by passing the id of the newest message from the previous call.", + "pattern": "^\\d{17,20}$", + "type": "string" +} - added
Input schema / properties / aroundAdded value: +{ + "description": "Return messages centered on this message ID (snowflake): Discord splits `limit` either side of it, and an even `limit` puts the extra message on the newer side. Use it to read outward from a known message, such as a discord_search_guild_messages hit.", + "pattern": "^\\d{17,20}$", + "type": "string" +} - added
Input schema / properties / beforeAdded value: +{ + "description": "Return only messages older than this message ID (snowflake). Page backwards through history by passing the id of the oldest message from the previous call.", + "pattern": "^\\d{17,20}$", + "type": "string" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"How many recent messages to fetch (1–100). Default 20."New value: +"How many messages to fetch per call (1–100). Default 20." - added
Input schema / properties / sinceAdded value: +{ + "anyOf": [ + { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + } + ], + "description": "Return only messages posted after this instant, as an ISO 8601 date or a date-time with an explicit offset (e.g. \"2026-08-01\" or \"2026-08-01T09:00:00Z\"). Convenience form of `after`: the call yields the oldest `limit` messages after that instant, so page forwards with `after` set to the newest id received." +}
- Changed
discord_remove_reactions1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_remove_role1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_reply_dm1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_reply_message1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_reply_to_forum1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_reset_channel_permissions1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Added
discord_search_guild_messages - Changed
discord_search_members1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_search_messages1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_send_dm1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_send_dm_embed3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / author / additionalPropertiesAdded value: +false - added
Input schema / properties / fields / items / additionalPropertiesAdded value: +false
- Changed
discord_send_embed3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / author / additionalPropertiesAdded value: +false - added
Input schema / properties / fields / items / additionalPropertiesAdded value: +false
- Changed
discord_send_message1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_send_multiple_embeds4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / embeds / items / additionalPropertiesAdded value: +false - added
Input schema / properties / embeds / items / properties / author / additionalPropertiesAdded value: +false - added
Input schema / properties / embeds / items / properties / fields / items / additionalPropertiesAdded value: +false
- Changed
discord_send_webhook_message4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / embeds / items / additionalPropertiesAdded value: +false - added
Input schema / properties / embeds / items / properties / author / additionalPropertiesAdded value: +false - added
Input schema / properties / embeds / items / properties / fields / items / additionalPropertiesAdded value: +false
- Changed
discord_set_channel_position1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_set_forum_tags2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / tags / items / additionalPropertiesAdded value: +false
- Changed
discord_set_member_permission1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_set_nickname1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_set_role_icon1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_set_role_permission1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_set_role_position1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_timeout_member1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_unban_member1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_update_forum_post1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
discord_update_membership_screening2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / form_fields / items / additionalPropertiesAdded value: +false
96 tool updates
v2.0.0- Changed
discord_add_reaction2 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / message_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_add_role3 fields changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / role_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / user_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_audit_permissions3 fields changed- changed
Input schema / properties / guild_id / descriptionPrevious value: -"Discord server (guild) ID (snowflake) to audit."New value: +"Discord server (guild) ID (snowflake)." - added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "channels": { + "items": { + "additionalProperties": false, + "properties": { + "channel": { + "type": "string" + }, + "channelId": { + "type": "string" + }, + "overwrites": { + "items": { + "additionalProperties": false, + "properties": { + "allow": { + "items": { + "type": "string" + }, + "type": "array" + }, + "deny": { + "items": { + "type": "string" + }, + "type": "array" + }, + "entity": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "entity", + "type", + "allow", + "deny" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "channel", + "channelId", + "overwrites" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "channels" + ], + "type": "object" +}
- Changed
discord_ban_member6 fields changed- added
Input schema / properties / delete_message_days / defaultAdded value: +0 - added
Input schema / properties / delete_message_days / maximumAdded value: +7 - added
Input schema / properties / delete_message_days / minimumAdded value: +0 - changed
Input schema / properties / delete_message_days / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / user_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_bulk_ban10 fields changed- added
Input schema / properties / delete_message_seconds / defaultAdded value: +0 - added
Input schema / properties / delete_message_seconds / maximumAdded value: +604800 - added
Input schema / properties / delete_message_seconds / minimumAdded value: +0 - changed
Input schema / properties / delete_message_seconds / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / dry_run / defaultAdded value: +true - added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - changed
Input schema / properties / user_ids / descriptionPrevious value: -"Array of user IDs (snowflakes) to ban."New value: +"Array of user IDs (snowflakes) to ban (max 200 per call — Discord API limit)." - added
Input schema / properties / user_ids / items / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / user_ids / maxItemsAdded value: +200 - added
Input schema / properties / user_ids / minItemsAdded value: +1
- Changed
discord_bulk_delete_messages5 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / count / maximumAdded value: +100 - added
Input schema / properties / count / minimumAdded value: +2 - changed
Input schema / properties / count / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / dry_runAdded value: +{ + "default": true, + "description": "If true (default), only reports how many would be deleted without deleting. Set false to actually delete.", + "type": "boolean" +}
- Changed
discord_clone_channel1 field changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_copy_permissions2 fields changed- added
Input schema / properties / source_channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / target_channel_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_create_channel2 fields changed- added
Input schema / properties / category_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_create_event_invite14 fields changed- changed
Input schema / properties / channel_id / descriptionPrevious value: -"Channel (snowflake) the invite points to. Defaults to the server's first text channel if omitted."New value: +"Channel (snowflake) the invite points to. Defaults to the event's own channel; REQUIRED for EXTERNAL events, which have none." - added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / event_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / max_age / defaultAdded value: +86400 - changed
Input schema / properties / max_age / descriptionPrevious value: -"Invite lifetime in seconds; 0 means it never expires. Default 86400 (24h)."New value: +"Invite lifetime in seconds, 0–604800 (7 days); 0 means it never expires. Default 86400 (24h)." - added
Input schema / properties / max_age / maximumAdded value: +604800 - added
Input schema / properties / max_age / minimumAdded value: +0 - changed
Input schema / properties / max_age / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / max_uses / defaultAdded value: +0 - changed
Input schema / properties / max_uses / descriptionPrevious value: -"Maximum number of uses; 0 means unlimited. Default 0."New value: +"Maximum number of uses, 0–100; 0 means unlimited. Default 0." - added
Input schema / properties / max_uses / maximumAdded value: +100 - added
Input schema / properties / max_uses / minimumAdded value: +0 - changed
Input schema / properties / max_uses / typePrevious value: -"number"New value: +"integer"
- Changed
discord_create_forum_channel2 fields changed- added
Input schema / properties / category_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_create_forum_post1 field changed- added
Input schema / properties / forum_channel_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_create_invite11 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / max_age / defaultAdded value: +86400 - changed
Input schema / properties / max_age / descriptionPrevious value: -"Invite lifetime in seconds; 0 means it never expires. Default 86400 (24h)."New value: +"Invite lifetime in seconds, 0–604800 (7 days); 0 means it never expires. Default 86400 (24h)." - added
Input schema / properties / max_age / maximumAdded value: +604800 - added
Input schema / properties / max_age / minimumAdded value: +0 - changed
Input schema / properties / max_age / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / max_uses / defaultAdded value: +0 - changed
Input schema / properties / max_uses / descriptionPrevious value: -"Maximum number of uses; 0 means unlimited. Default 0."New value: +"Maximum number of uses, 0–100; 0 means unlimited. Default 0." - added
Input schema / properties / max_uses / maximumAdded value: +100 - added
Input schema / properties / max_uses / minimumAdded value: +0 - changed
Input schema / properties / max_uses / typePrevious value: -"number"New value: +"integer"
- Changed
discord_create_role5 fields changed- added
Input schema / properties / color / patternAdded value: +"^#[0-9A-Fa-f]{6}$" - added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / permissions / anyOfAdded value: +[ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } +] - removed
Input schema / properties / permissions / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / permissions / typeRemoved value: -"array"
- Changed
discord_create_scheduled_event8 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / image / formatAdded value: +"uri" - added
Input schema / properties / image / patternAdded value: +"^https?://" - added
Input schema / properties / scheduled_end_time / formatAdded value: +"date-time" - added
Input schema / properties / scheduled_end_time / patternAdded value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - added
Input schema / properties / scheduled_start_time / formatAdded value: +"date-time" - added
Input schema / properties / scheduled_start_time / patternAdded value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
- Changed
discord_create_thread4 fields changed- added
Input schema / properties / auto_archive_duration / defaultAdded value: +1440 - added
Input schema / properties / auto_archive_duration / enumAdded value: +[ + 60, + 1440, + 4320, + 10080 +] - added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / message_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_create_webhook3 fields changed- added
Input schema / properties / avatar / formatAdded value: +"uri" - added
Input schema / properties / avatar / patternAdded value: +"^https?://" - added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_crosspost_message2 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / message_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_delete_channel2 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / dry_runAdded value: +{ + "default": true, + "description": "If true (default), only reports which channel would be deleted without deleting it. Set false to actually delete.", + "type": "boolean" +}
- Changed
discord_delete_dm2 fields changed- added
Input schema / properties / message_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / user_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_delete_forum_post1 field changed- added
Input schema / properties / thread_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_delete_message2 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / message_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_delete_role2 fields changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / role_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_delete_scheduled_event2 fields changed- added
Input schema / properties / event_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_delete_webhook1 field changed- added
Input schema / properties / webhook_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_delete_webhook_message2 fields changed- added
Input schema / properties / message_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / webhook_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_edit_channel4 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / slowmode / maximumAdded value: +21600 - added
Input schema / properties / slowmode / minimumAdded value: +0 - changed
Input schema / properties / slowmode / typePrevious value: -"number"New value: +"integer"
- Changed
discord_edit_dm2 fields changed- added
Input schema / properties / message_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / user_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_edit_dm_embed13 fields changed- added
Input schema / properties / author / properties / icon_url / formatAdded value: +"uri" - added
Input schema / properties / author / properties / icon_url / patternAdded value: +"^https?://" - added
Input schema / properties / author / properties / url / formatAdded value: +"uri" - added
Input schema / properties / author / properties / url / patternAdded value: +"^https?://" - added
Input schema / properties / color / patternAdded value: +"^#[0-9A-Fa-f]{6}$" - added
Input schema / properties / image_url / formatAdded value: +"uri" - added
Input schema / properties / image_url / patternAdded value: +"^https?://" - added
Input schema / properties / message_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / thumbnail_url / formatAdded value: +"uri" - added
Input schema / properties / thumbnail_url / patternAdded value: +"^https?://" - added
Input schema / properties / url / formatAdded value: +"uri" - added
Input schema / properties / url / patternAdded value: +"^https?://" - added
Input schema / properties / user_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_edit_embed14 fields changed- added
Input schema / properties / author / properties / icon_url / formatAdded value: +"uri" - added
Input schema / properties / author / properties / icon_url / patternAdded value: +"^https?://" - added
Input schema / properties / author / properties / url / formatAdded value: +"uri" - added
Input schema / properties / author / properties / url / patternAdded value: +"^https?://" - added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / color / patternAdded value: +"^#[0-9A-Fa-f]{6}$" - added
Input schema / properties / image_url / formatAdded value: +"uri" - added
Input schema / properties / image_url / patternAdded value: +"^https?://" - changed
Input schema / properties / message_id / descriptionPrevious value: -"ID of the message to edit. Must be a bot message that already contains an embed."New value: +"ID of the message to edit. Must be a message authored by this bot (an embed is added if it has none)." - added
Input schema / properties / message_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / thumbnail_url / formatAdded value: +"uri" - added
Input schema / properties / thumbnail_url / patternAdded value: +"^https?://" - added
Input schema / properties / url / formatAdded value: +"uri" - added
Input schema / properties / url / patternAdded value: +"^https?://"
- Changed
discord_edit_message2 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / message_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_edit_role6 fields changed- added
Input schema / properties / color / patternAdded value: +"^#[0-9A-Fa-f]{6}$" - added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / permissions / anyOfAdded value: +[ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } +] - removed
Input schema / properties / permissions / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / permissions / typeRemoved value: -"array" - added
Input schema / properties / role_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_edit_scheduled_event11 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / event_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / image / formatAdded value: +"uri" - added
Input schema / properties / image / patternAdded value: +"^https?://" - added
Input schema / properties / scheduled_end_time / formatAdded value: +"date-time" - added
Input schema / properties / scheduled_end_time / patternAdded value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - added
Input schema / properties / scheduled_start_time / formatAdded value: +"date-time" - added
Input schema / properties / scheduled_start_time / patternAdded value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - changed
Input schema / properties / status / descriptionPrevious value: -"Change event status. Allowed transitions only: SCHEDULED→ACTIVE→COMPLETED, or SCHEDULED→CANCELED."New value: +"Change event status. Allowed transitions only: SCHEDULED→ACTIVE→COMPLETED, or SCHEDULED→CANCELED (no transition back to SCHEDULED exists)." - changed
Input schema / properties / status / enumPrevious value: -[ - "SCHEDULED", - "ACTIVE", - "COMPLETED", - "CANCELED" -]New value: +[ + "ACTIVE", + "COMPLETED", + "CANCELED" +]
- Changed
discord_edit_webhook4 fields changed- added
Input schema / properties / avatar / formatAdded value: +"uri" - added
Input schema / properties / avatar / patternAdded value: +"^https?://" - added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / webhook_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_edit_webhook_message13 fields changed- added
Input schema / properties / embeds / items / properties / authorAdded value: +{ + "description": "Author block shown at the top of the embed.", + "properties": { + "icon_url": { + "description": "Small icon shown next to the author name.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + }, + "name": { + "description": "Author display name.", + "type": "string" + }, + "url": { + "description": "URL the author name links to.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" +} - added
Input schema / properties / embeds / items / properties / color / patternAdded value: +"^#[0-9A-Fa-f]{6}$" - changed
Input schema / properties / embeds / items / properties / fields / descriptionPrevious value: -"Up to 25 name/value field blocks."New value: +"Up to 25 name/value field blocks. Set inline:true on a field to render it side-by-side with adjacent inline fields (up to 3 per row)." - changed
Input schema / properties / embeds / items / properties / fields / items / properties / inline / descriptionPrevious value: -"If true, render side-by-side with adjacent inline fields."New value: +"If true, render this field side-by-side with adjacent inline fields." - added
Input schema / properties / embeds / items / properties / image_url / formatAdded value: +"uri" - added
Input schema / properties / embeds / items / properties / image_url / patternAdded value: +"^https?://" - added
Input schema / properties / embeds / items / properties / thumbnail_url / formatAdded value: +"uri" - added
Input schema / properties / embeds / items / properties / thumbnail_url / patternAdded value: +"^https?://" - added
Input schema / properties / embeds / items / properties / url / formatAdded value: +"uri" - added
Input schema / properties / embeds / items / properties / url / patternAdded value: +"^https?://" - added
Input schema / properties / embeds / maxItemsAdded value: +10 - added
Input schema / properties / message_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / webhook_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_fetch_pinned_messages2 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "messages": { + "items": { + "additionalProperties": false, + "properties": { + "author": { + "type": "string" + }, + "content": { + "type": "string" + }, + "id": { + "type": "string" + }, + "pinnedAt": { + "type": "string" + }, + "timestamp": { + "type": "string" + } + }, + "required": [ + "id", + "author", + "content", + "timestamp", + "pinnedAt" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "messages" + ], + "type": "object" +}
- Changed
discord_fetch_webhook_message3 fields changed- added
Input schema / properties / message_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / webhook_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "content": { + "type": "string" + }, + "embeds": { + "type": "number" + }, + "id": { + "type": "string" + }, + "timestamp": { + "type": "string" + } + }, + "required": [ + "id", + "content", + "embeds", + "timestamp" + ], + "type": "object" +}
- Changed
discord_find_channel_by_name2 fields changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "matches": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "type" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "matches" + ], + "type": "object" +}
- Changed
discord_follow_announcement_channel2 fields changed- added
Input schema / properties / source_channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / target_channel_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_forward_message3 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / message_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / target_channel_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_get_audit_log9 fields changed- added
Input schema / properties / action_type / anyOfAdded value: +[ + { + "enum": [ + 1, + 10, + 11, + 12, + 13, + 14, + 15, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 30, + 31, + 32, + 40, + 41, + 42, + 50, + 51, + 52, + 60, + 61, + 62, + 72, + 73, + 74, + 75, + 80, + 81, + 82, + 83, + 84, + 85, + 90, + 91, + 92, + 100, + 101, + 102, + 110, + 111, + 112, + 121, + 130, + 131, + 132, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 150, + 151, + 163, + 164, + 165, + 166, + 167, + 190, + 191 + ], + "type": "number" + }, + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + } +] - changed
Input schema / properties / action_type / descriptionPrevious value: -"Optional Discord AuditLogEvent numeric ID to filter by (e.g. 22 = MemberBanAdd). Omit for all action types."New value: +"Optional Discord AuditLogEvent numeric ID to filter by (e.g. 22 = MemberBanAdd). Accepts event IDs newer than the bundled enum. Omit for all action types." - removed
Input schema / properties / action_type / typeRemoved value: -"number" - added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / limit / defaultAdded value: +25 - added
Input schema / properties / limit / maximumAdded value: +100 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "entries": { + "items": { + "additionalProperties": false, + "properties": { + "action": { + "type": "number" + }, + "createdAt": { + "type": "string" + }, + "executor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "action", + "executor", + "target", + "reason", + "createdAt" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "entries" + ], + "type": "object" +}
- Changed
discord_get_channel_permissions2 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "overwrites": { + "items": { + "additionalProperties": false, + "properties": { + "allow": { + "items": { + "type": "string" + }, + "type": "array" + }, + "deny": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "id", + "type", + "allow", + "deny" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "overwrites" + ], + "type": "object" +}
- Changed
discord_get_event_subscribers8 fields changed- added
Input schema / properties / after / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / event_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / limit / defaultAdded value: +25 - added
Input schema / properties / limit / maximumAdded value: +100 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "nextCursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "subscribers": { + "items": { + "additionalProperties": false, + "properties": { + "avatar": { + "type": "string" + }, + "user_id": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "required": [ + "user_id", + "username", + "avatar" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "subscribers", + "nextCursor" + ], + "type": "object" +}
- Changed
discord_get_forum_channels2 fields changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "channels": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "parentId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "topic": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "name", + "topic", + "parentId" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "channels" + ], + "type": "object" +}
- Changed
discord_get_forum_post6 fields changed- added
Input schema / properties / limit / defaultAdded value: +20 - added
Input schema / properties / limit / maximumAdded value: +100 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / thread_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "appliedTags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "archived": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "createdAt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "locked": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "messageCount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "messages": { + "items": { + "additionalProperties": false, + "properties": { + "author": { + "type": "string" + }, + "content": { + "type": "string" + }, + "id": { + "type": "string" + }, + "timestamp": { + "type": "string" + } + }, + "required": [ + "id", + "author", + "content", + "timestamp" + ], + "type": "object" + }, + "type": "array" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "archived", + "locked", + "messageCount", + "appliedTags", + "createdAt", + "messages" + ], + "type": "object" +}
- Changed
discord_get_forum_tags2 fields changed- added
Input schema / properties / forum_channel_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "tags": { + "items": { + "additionalProperties": false, + "properties": { + "emoji": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "moderated": { + "type": "boolean" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "emoji", + "moderated" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "tags" + ], + "type": "object" +}
- Changed
discord_get_guild_info2 fields changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "boostCount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "boostLevel": { + "type": "number" + }, + "channelCount": { + "type": "number" + }, + "createdAt": { + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "memberCount": { + "type": "number" + }, + "name": { + "type": "string" + }, + "owner": { + "type": "string" + }, + "roleCount": { + "type": "number" + } + }, + "required": [ + "id", + "name", + "description", + "memberCount", + "channelCount", + "roleCount", + "boostLevel", + "boostCount", + "createdAt", + "owner" + ], + "type": "object" +}
- Changed
discord_get_invite1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "channel_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "channel_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "code": { + "type": "string" + }, + "created_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "expires_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "guild_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "guild_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "inviter": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "required": [ + "id", + "username" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "max_age": { + "type": "number" + }, + "max_uses": { + "type": "number" + }, + "temporary": { + "type": "boolean" + }, + "url": { + "type": "string" + }, + "uses": { + "type": "number" + } + }, + "required": [ + "code", + "url", + "guild_id", + "guild_name", + "channel_id", + "channel_name", + "inviter", + "uses", + "max_uses", + "max_age", + "temporary", + "created_at", + "expires_at" + ], + "type": "object" +}
- Changed
discord_get_member_info3 fields changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / user_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "bot": { + "type": "boolean" + }, + "createdAt": { + "type": "string" + }, + "id": { + "type": "string" + }, + "joinedAt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "nickname": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "permissions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "roles": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "timedOutUntil": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "username": { + "type": "string" + } + }, + "required": [ + "id", + "username", + "nickname", + "roles", + "permissions", + "joinedAt", + "createdAt", + "bot", + "timedOutUntil" + ], + "type": "object" +}
- Changed
discord_get_membership_screening2 fields changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "form_fields": { + "items": { + "additionalProperties": false, + "properties": { + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "field_type": { + "type": "string" + }, + "label": { + "type": "string" + }, + "required": { + "type": "boolean" + }, + "values": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "field_type", + "label", + "values", + "required", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "version": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "version", + "form_fields", + "description" + ], + "type": "object" +}
- Changed
discord_get_reactions7 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / limit / defaultAdded value: +25 - added
Input schema / properties / limit / maximumAdded value: +100 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / message_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "reactions": { + "items": { + "additionalProperties": false, + "properties": { + "bot": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "required": [ + "id", + "username", + "bot" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "reactions" + ], + "type": "object" +}
- Changed
discord_get_role_members3 fields changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / role_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "members": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "nickname": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "username": { + "type": "string" + } + }, + "required": [ + "id", + "username", + "nickname" + ], + "type": "object" + }, + "type": "array" + }, + "note": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "required": [ + "members", + "truncated" + ], + "type": "object" +}
- Changed
discord_get_scheduled_event3 fields changed- added
Input schema / properties / event_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "channel_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "creator_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "entity_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "id": { + "type": "string" + }, + "image": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "location": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "type": "string" + }, + "scheduled_end_time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "scheduled_start_time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "user_count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "name", + "description", + "status", + "entity_type", + "channel_id", + "location", + "scheduled_start_time", + "scheduled_end_time", + "creator_id", + "user_count", + "image" + ], + "type": "object" +}
- Changed
discord_get_server_stats2 fields changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "boostCount": { + "type": "number" + }, + "boostLevel": { + "type": "number" + }, + "botsInCache": { + "type": "number" + }, + "channels": { + "additionalProperties": false, + "properties": { + "categories": { + "type": "number" + }, + "text": { + "type": "number" + }, + "total": { + "type": "number" + }, + "voice": { + "type": "number" + } + }, + "required": [ + "total", + "text", + "voice", + "categories" + ], + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "humans": { + "type": "number" + }, + "name": { + "type": "string" + }, + "roles": { + "type": "number" + }, + "totalMembers": { + "type": "number" + } + }, + "required": [ + "name", + "totalMembers", + "humans", + "botsInCache", + "channels", + "roles", + "boostLevel", + "boostCount", + "createdAt" + ], + "type": "object" +}
- Changed
discord_kick_member2 fields changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / user_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_list_bans7 fields changed- added
Input schema / properties / after / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / limit / defaultAdded value: +1000 - added
Input schema / properties / limit / maximumAdded value: +1000 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "bans": { + "items": { + "additionalProperties": false, + "properties": { + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "user_id": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "required": [ + "user_id", + "username", + "reason" + ], + "type": "object" + }, + "type": "array" + }, + "nextCursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "bans", + "nextCursor" + ], + "type": "object" +}
- Changed
discord_list_channel_invites2 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "invites": { + "items": { + "additionalProperties": false, + "properties": { + "channel_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "channel_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "code": { + "type": "string" + }, + "created_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "expires_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "guild_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "guild_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "inviter": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "required": [ + "id", + "username" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "max_age": { + "type": "number" + }, + "max_uses": { + "type": "number" + }, + "temporary": { + "type": "boolean" + }, + "url": { + "type": "string" + }, + "uses": { + "type": "number" + } + }, + "required": [ + "code", + "url", + "guild_id", + "guild_name", + "channel_id", + "channel_name", + "inviter", + "uses", + "max_uses", + "max_age", + "temporary", + "created_at", + "expires_at" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "invites" + ], + "type": "object" +}
- Changed
discord_list_channels2 fields changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "type" + ], + "type": "object" + }, + "type": "array" + }, + "properties": {}, + "type": "object" +}
- Changed
discord_list_forum_threads8 fields changed- added
Input schema / properties / before / formatAdded value: +"date-time" - added
Input schema / properties / before / patternAdded value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - added
Input schema / properties / forum_channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / limit / defaultAdded value: +100 - added
Input schema / properties / limit / maximumAdded value: +100 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "hasMore": { + "type": "boolean" + }, + "nextBefore": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "threads": { + "items": { + "additionalProperties": false, + "properties": { + "appliedTags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "archived": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "createdAt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "locked": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "messageCount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "archived", + "locked", + "messageCount", + "appliedTags", + "createdAt" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "threads", + "hasMore", + "nextBefore" + ], + "type": "object" +}
- Changed
discord_list_guilds1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "guilds": { + "items": { + "additionalProperties": false, + "properties": { + "icon": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "memberCount": { + "type": "number" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "memberCount", + "icon" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "guilds" + ], + "type": "object" +}
- Changed
discord_list_invites2 fields changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "invites": { + "items": { + "additionalProperties": false, + "properties": { + "channel_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "channel_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "code": { + "type": "string" + }, + "created_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "expires_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "guild_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "guild_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "inviter": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "required": [ + "id", + "username" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "max_age": { + "type": "number" + }, + "max_uses": { + "type": "number" + }, + "temporary": { + "type": "boolean" + }, + "url": { + "type": "string" + }, + "uses": { + "type": "number" + } + }, + "required": [ + "code", + "url", + "guild_id", + "guild_name", + "channel_id", + "channel_name", + "inviter", + "uses", + "max_uses", + "max_age", + "temporary", + "created_at", + "expires_at" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "invites" + ], + "type": "object" +}
- Changed
discord_list_members7 fields changed- added
Input schema / properties / after / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / limit / defaultAdded value: +50 - added
Input schema / properties / limit / maximumAdded value: +1000 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "members": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "joinedAt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "nickname": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roles": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "username": { + "type": "string" + } + }, + "required": [ + "id", + "username", + "nickname", + "roles", + "joinedAt" + ], + "type": "object" + }, + "type": "array" + }, + "nextCursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "members", + "nextCursor" + ], + "type": "object" +}
- Changed
discord_list_roles2 fields changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "roles": { + "items": { + "additionalProperties": false, + "properties": { + "color": { + "type": "string" + }, + "hoist": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "memberCount": { + "type": "number" + }, + "mentionable": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "permissions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "position": { + "type": "number" + } + }, + "required": [ + "id", + "name", + "color", + "position", + "memberCount", + "permissions", + "hoist", + "mentionable" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "roles" + ], + "type": "object" +}
- Changed
discord_list_scheduled_events2 fields changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "events": { + "items": { + "additionalProperties": false, + "properties": { + "channel_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "creator_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "entity_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "id": { + "type": "string" + }, + "image": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "location": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "type": "string" + }, + "scheduled_end_time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "scheduled_start_time": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "user_count": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "name", + "description", + "status", + "entity_type", + "channel_id", + "location", + "scheduled_start_time", + "scheduled_end_time", + "creator_id", + "user_count", + "image" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "events" + ], + "type": "object" +}
- Changed
discord_list_webhooks3 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "webhooks": { + "items": { + "additionalProperties": false, + "properties": { + "channel_id": { + "type": "string" + }, + "creator": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "token": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "id", + "name", + "channel_id", + "token", + "creator" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "webhooks" + ], + "type": "object" +}
- Changed
discord_lock_channel_permissions1 field changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_move_channel2 fields changed- added
Input schema / properties / category_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_pin_message2 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / message_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_prune_members6 fields changed- added
Input schema / properties / days / maximumAdded value: +30 - added
Input schema / properties / days / minimumAdded value: +1 - changed
Input schema / properties / days / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / dry_run / defaultAdded value: +true - added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / roles / items / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_read_dms6 fields changed- added
Input schema / properties / limit / defaultAdded value: +20 - added
Input schema / properties / limit / maximumAdded value: +100 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / user_id / patternAdded value: +"^\\d{17,20}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "messages": { + "items": { + "additionalProperties": false, + "properties": { + "author": { + "type": "string" + }, + "content": { + "type": "string" + }, + "embeds": { + "type": "number" + }, + "id": { + "type": "string" + }, + "timestamp": { + "type": "string" + } + }, + "required": [ + "id", + "author", + "content", + "embeds", + "timestamp" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "messages" + ], + "type": "object" +}
- Changed
discord_read_messages6 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / limit / defaultAdded value: +20 - added
Input schema / properties / limit / maximumAdded value: +100 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "messages": { + "items": { + "additionalProperties": false, + "properties": { + "attachments": { + "type": "number" + }, + "author": { + "type": "string" + }, + "content": { + "type": "string" + }, + "id": { + "type": "string" + }, + "pinned": { + "type": "boolean" + }, + "timestamp": { + "type": "string" + } + }, + "required": [ + "id", + "author", + "content", + "timestamp", + "attachments", + "pinned" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "messages" + ], + "type": "object" +}
- Changed
discord_remove_reactions3 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / message_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / user_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_remove_role3 fields changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / role_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / user_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_reply_dm2 fields changed- added
Input schema / properties / message_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / user_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_reply_message2 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / message_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_reply_to_forum1 field changed- added
Input schema / properties / thread_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_reset_channel_permissions1 field changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_search_members6 fields changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / limit / defaultAdded value: +25 - added
Input schema / properties / limit / maximumAdded value: +100 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "members": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "nickname": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roles": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "username": { + "type": "string" + } + }, + "required": [ + "id", + "username", + "nickname", + "roles" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "members" + ], + "type": "object" +}
- Changed
discord_search_messages6 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / limit / defaultAdded value: +100 - added
Input schema / properties / limit / maximumAdded value: +100 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "matches": { + "items": { + "additionalProperties": false, + "properties": { + "author": { + "type": "string" + }, + "content": { + "type": "string" + }, + "id": { + "type": "string" + }, + "timestamp": { + "type": "string" + } + }, + "required": [ + "id", + "author", + "content", + "timestamp" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "matches" + ], + "type": "object" +}
- Changed
discord_send_dm1 field changed- added
Input schema / properties / user_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_send_dm_embed12 fields changed- added
Input schema / properties / author / properties / icon_url / formatAdded value: +"uri" - added
Input schema / properties / author / properties / icon_url / patternAdded value: +"^https?://" - added
Input schema / properties / author / properties / url / formatAdded value: +"uri" - added
Input schema / properties / author / properties / url / patternAdded value: +"^https?://" - added
Input schema / properties / color / patternAdded value: +"^#[0-9A-Fa-f]{6}$" - added
Input schema / properties / image_url / formatAdded value: +"uri" - added
Input schema / properties / image_url / patternAdded value: +"^https?://" - added
Input schema / properties / thumbnail_url / formatAdded value: +"uri" - added
Input schema / properties / thumbnail_url / patternAdded value: +"^https?://" - added
Input schema / properties / url / formatAdded value: +"uri" - added
Input schema / properties / url / patternAdded value: +"^https?://" - added
Input schema / properties / user_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_send_embed12 fields changed- added
Input schema / properties / author / properties / icon_url / formatAdded value: +"uri" - added
Input schema / properties / author / properties / icon_url / patternAdded value: +"^https?://" - added
Input schema / properties / author / properties / url / formatAdded value: +"uri" - added
Input schema / properties / author / properties / url / patternAdded value: +"^https?://" - added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / color / patternAdded value: +"^#[0-9A-Fa-f]{6}$" - added
Input schema / properties / image_url / formatAdded value: +"uri" - added
Input schema / properties / image_url / patternAdded value: +"^https?://" - added
Input schema / properties / thumbnail_url / formatAdded value: +"uri" - added
Input schema / properties / thumbnail_url / patternAdded value: +"^https?://" - added
Input schema / properties / url / formatAdded value: +"uri" - added
Input schema / properties / url / patternAdded value: +"^https?://"
- Changed
discord_send_message1 field changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_send_multiple_embeds13 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / embeds / items / properties / author / properties / icon_url / formatAdded value: +"uri" - added
Input schema / properties / embeds / items / properties / author / properties / icon_url / patternAdded value: +"^https?://" - added
Input schema / properties / embeds / items / properties / author / properties / url / formatAdded value: +"uri" - added
Input schema / properties / embeds / items / properties / author / properties / url / patternAdded value: +"^https?://" - added
Input schema / properties / embeds / items / properties / color / patternAdded value: +"^#[0-9A-Fa-f]{6}$" - added
Input schema / properties / embeds / items / properties / image_url / formatAdded value: +"uri" - added
Input schema / properties / embeds / items / properties / image_url / patternAdded value: +"^https?://" - added
Input schema / properties / embeds / items / properties / thumbnail_url / formatAdded value: +"uri" - added
Input schema / properties / embeds / items / properties / thumbnail_url / patternAdded value: +"^https?://" - added
Input schema / properties / embeds / items / properties / url / formatAdded value: +"uri" - added
Input schema / properties / embeds / items / properties / url / patternAdded value: +"^https?://" - added
Input schema / properties / embeds / maxItemsAdded value: +10
- Changed
discord_send_webhook_message14 fields changed- added
Input schema / properties / avatar_url / formatAdded value: +"uri" - added
Input schema / properties / avatar_url / patternAdded value: +"^https?://" - added
Input schema / properties / embeds / items / properties / authorAdded value: +{ + "description": "Author block shown at the top of the embed.", + "properties": { + "icon_url": { + "description": "Small icon shown next to the author name.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + }, + "name": { + "description": "Author display name.", + "type": "string" + }, + "url": { + "description": "URL the author name links to.", + "format": "uri", + "pattern": "^https?://", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" +} - added
Input schema / properties / embeds / items / properties / color / patternAdded value: +"^#[0-9A-Fa-f]{6}$" - changed
Input schema / properties / embeds / items / properties / fields / descriptionPrevious value: -"Up to 25 name/value field blocks."New value: +"Up to 25 name/value field blocks. Set inline:true on a field to render it side-by-side with adjacent inline fields (up to 3 per row)." - changed
Input schema / properties / embeds / items / properties / fields / items / properties / inline / descriptionPrevious value: -"If true, render side-by-side with adjacent inline fields."New value: +"If true, render this field side-by-side with adjacent inline fields." - added
Input schema / properties / embeds / items / properties / image_url / formatAdded value: +"uri" - added
Input schema / properties / embeds / items / properties / image_url / patternAdded value: +"^https?://" - added
Input schema / properties / embeds / items / properties / thumbnail_url / formatAdded value: +"uri" - added
Input schema / properties / embeds / items / properties / thumbnail_url / patternAdded value: +"^https?://" - added
Input schema / properties / embeds / items / properties / url / formatAdded value: +"uri" - added
Input schema / properties / embeds / items / properties / url / patternAdded value: +"^https?://" - added
Input schema / properties / embeds / maxItemsAdded value: +10 - added
Input schema / properties / webhook_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_set_channel_position4 fields changed- added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / position / maximumAdded value: +9007199254740991 - added
Input schema / properties / position / minimumAdded value: +0 - changed
Input schema / properties / position / typePrevious value: -"number"New value: +"integer"
- Changed
discord_set_forum_tags1 field changed- added
Input schema / properties / forum_channel_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_set_member_permission10 fields changed- added
Input schema / properties / allow / anyOfAdded value: +[ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } +] - changed
Input schema / properties / allow / descriptionPrevious value: -"Permission flag names to allow, e.g. ['ViewChannel']. Uses Discord PermissionsBitField flag names."New value: +"Permission flag names to allow, e.g. ['ViewChannel'] (or the same array JSON-encoded as a string). Uses Discord PermissionsBitField flag names." - removed
Input schema / properties / allow / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / allow / typeRemoved value: -"array" - added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / deny / anyOfAdded value: +[ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } +] - changed
Input schema / properties / deny / descriptionPrevious value: -"Permission flag names to deny."New value: +"Permission flag names to deny (array, or JSON-encoded array string)." - removed
Input schema / properties / deny / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / deny / typeRemoved value: -"array" - added
Input schema / properties / user_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_set_nickname4 fields changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / nickname / anyOfAdded value: +[ + { + "maxLength": 32, + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / nickname / typeRemoved value: -"string" - added
Input schema / properties / user_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_set_role_icon6 fields changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / icon / anyOfAdded value: +[ + { + "anyOf": [ + { + "format": "uri", + "pattern": "^https?://", + "type": "string" + }, + { + "const": "null", + "type": "string" + } + ] + }, + { + "type": "null" + } +] - removed
Input schema / properties / icon / typeRemoved value: -"string" - added
Input schema / properties / role_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / unicode_emoji / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / unicode_emoji / typeRemoved value: -"string"
- Changed
discord_set_role_permission10 fields changed- added
Input schema / properties / allow / anyOfAdded value: +[ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } +] - changed
Input schema / properties / allow / descriptionPrevious value: -"Permission flag names to allow, e.g. ['SendMessages','ViewChannel']. Uses Discord PermissionsBitField flag names."New value: +"Permission flag names to allow, e.g. ['SendMessages','ViewChannel'] (or the same array JSON-encoded as a string). Uses Discord PermissionsBitField flag names." - removed
Input schema / properties / allow / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / allow / typeRemoved value: -"array" - added
Input schema / properties / channel_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / deny / anyOfAdded value: +[ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } +] - changed
Input schema / properties / deny / descriptionPrevious value: -"Permission flag names to deny, e.g. ['SendMessages']."New value: +"Permission flag names to deny, e.g. ['SendMessages'] (or the same array JSON-encoded as a string)." - removed
Input schema / properties / deny / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / deny / typeRemoved value: -"array" - added
Input schema / properties / role_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_set_role_position6 fields changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - changed
Input schema / properties / position / descriptionPrevious value: -"New hierarchy position (0 = lowest, just above @everyone). Higher numbers rank higher."New value: +"New hierarchy position (1 = lowest, just above @everyone, which sits at 0). Higher numbers rank higher." - added
Input schema / properties / position / maximumAdded value: +9007199254740991 - added
Input schema / properties / position / minimumAdded value: +1 - changed
Input schema / properties / position / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / role_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_timeout_member6 fields changed- changed
Input schema / properties / duration_minutes / descriptionPrevious value: -"Timeout length in minutes (1–40320, i.e. up to 28 days). Use 0 to clear an existing timeout."New value: +"Timeout length in minutes (0–40320, i.e. up to 28 days). Use 0 to clear an existing timeout." - added
Input schema / properties / duration_minutes / maximumAdded value: +40320 - added
Input schema / properties / duration_minutes / minimumAdded value: +0 - changed
Input schema / properties / duration_minutes / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / user_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_unban_member2 fields changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$" - added
Input schema / properties / user_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_update_forum_post1 field changed- added
Input schema / properties / thread_id / patternAdded value: +"^\\d{17,20}$"
- Changed
discord_update_membership_screening1 field changed- added
Input schema / properties / guild_id / patternAdded value: +"^\\d{17,20}$"
5 tool updates
v1.7.0- Changed
discord_bulk_ban1 field changed- added
Input schema / properties / dry_runAdded value: +{ + "description": "If true (default), only returns the user IDs that would be banned without banning anyone. Set false to actually ban.", + "type": "boolean" +}
- Changed
discord_get_event_subscribers2 fields changed- added
Input schema / properties / afterAdded value: +{ + "description": "Pagination cursor: a user ID (snowflake). Pass the previous response's nextCursor to fetch the next page.", + "type": "string" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"Max subscribers to return (1–100). Default 25."New value: +"Max subscribers per page (1–100). Default 25."
- Changed
discord_list_bans2 fields changed- added
Input schema / properties / afterAdded value: +{ + "description": "Pagination cursor: a user ID (snowflake). Pass the previous response's nextCursor to fetch the next page.", + "type": "string" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"Optional max number of bans to fetch. Omit to fetch all."New value: +"Max bans per page (1–1000). Default 1000."
- Changed
discord_list_forum_threads2 fields changed- added
Input schema / properties / beforeAdded value: +{ + "description": "Pagination cursor: an ISO timestamp. Pass the previous response's nextBefore to fetch older archived posts. When set, active posts are omitted.", + "type": "string" +} - added
Input schema / properties / limitAdded value: +{ + "description": "Max archived posts per page (1–100). Default 100.", + "type": "number" +}
- Changed
discord_list_members2 fields changed- added
Input schema / properties / afterAdded value: +{ + "description": "Pagination cursor: a user ID (snowflake). Pass the previous response's nextCursor to fetch the next page.", + "type": "string" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"How many members to return (1–1000). Default 50."New value: +"How many members per page (1–1000). Default 50."
5 tool updates
v1.6.2- Changed
discord_edit_dm_embed1 field changed- changed
Input schema / properties / fields / descriptionPrevious value: -"Up to 25 name/value field blocks. Set inline:true to render up to 3 side-by-side."New value: +"Up to 25 name/value field blocks. Set inline:true on a field to render it side-by-side with adjacent inline fields (up to 3 per row)."
- Changed
discord_edit_embed1 field changed- changed
Input schema / properties / fields / descriptionPrevious value: -"Up to 25 name/value field blocks rendered as a grid."New value: +"Up to 25 name/value field blocks. Set inline:true on a field to render it side-by-side with adjacent inline fields (up to 3 per row)."
- Changed
discord_send_dm_embed1 field changed- changed
Input schema / properties / fields / descriptionPrevious value: -"Up to 25 name/value field blocks. Set inline:true to render up to 3 side-by-side."New value: +"Up to 25 name/value field blocks. Set inline:true on a field to render it side-by-side with adjacent inline fields (up to 3 per row)."
- Changed
discord_send_embed1 field changed- changed
Input schema / properties / fields / descriptionPrevious value: -"Up to 25 name/value field blocks rendered as a grid."New value: +"Up to 25 name/value field blocks. Set inline:true on a field to render it side-by-side with adjacent inline fields (up to 3 per row)."
- Changed
discord_send_multiple_embeds1 field changed- changed
Input schema / properties / embeds / items / properties / fields / descriptionPrevious value: -"Up to 25 name/value field blocks rendered as a grid."New value: +"Up to 25 name/value field blocks. Set inline:true on a field to render it side-by-side with adjacent inline fields (up to 3 per row)."
96 tool updates
v1.6.0- Changed
discord_add_reaction3 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel or thread containing the message." - changed
Input schema / properties / emoji / descriptionPrevious value: -"Unicode emoji (e.g. '👍') or custom emoji in format 'name:id'."New value: +"Unicode emoji (e.g. '👍') or a custom emoji in 'name:id' format." - added
Input schema / properties / message_id / descriptionAdded value: +"ID of the message to react to."
- Changed
discord_add_role4 fields changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - added
Input schema / properties / reason / descriptionAdded value: +"Optional reason recorded in the server audit log." - added
Input schema / properties / role_id / descriptionAdded value: +"ID (snowflake) of the role to assign." - added
Input schema / properties / user_id / descriptionAdded value: +"Discord user ID (snowflake) of the member to give the role to."
- Changed
discord_audit_permissions1 field changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake) to audit."
- Changed
discord_ban_member4 fields changed- changed
Input schema / properties / delete_message_days / descriptionPrevious value: -"Delete messages from last N days (0–7)."New value: +"Also delete the user's messages from the last N days (0–7). Default 0 (delete nothing)." - added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - added
Input schema / properties / reason / descriptionAdded value: +"Optional reason recorded in the server audit log." - added
Input schema / properties / user_id / descriptionAdded value: +"Discord user ID (snowflake) of the user to ban."
- Changed
discord_bulk_ban4 fields changed- changed
Input schema / properties / delete_message_seconds / descriptionPrevious value: -"Delete messages from last N seconds (0–604800)."New value: +"Also delete each user's messages from the last N seconds (0–604800, i.e. up to 7 days). Default 0." - added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - added
Input schema / properties / reason / descriptionAdded value: +"Optional reason recorded in the server audit log." - changed
Input schema / properties / user_ids / descriptionPrevious value: -"Array of user IDs to ban."New value: +"Array of user IDs (snowflakes) to ban."
- Changed
discord_bulk_delete_messages1 field changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel or thread to delete messages from."
- Changed
discord_clone_channel2 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel to clone." - added
Input schema / properties / new_name / descriptionAdded value: +"Optional name for the clone. Defaults to the source channel's name."
- Changed
discord_copy_permissions3 fields changed- added
Input schema / properties / reason / descriptionAdded value: +"Optional reason recorded in the server audit log." - added
Input schema / properties / source_channel_id / descriptionAdded value: +"ID (snowflake) of the channel to copy overwrites from." - added
Input schema / properties / target_channel_id / descriptionAdded value: +"ID (snowflake) of the channel whose overwrites will be replaced."
- Changed
discord_create_channel5 fields changed- added
Input schema / properties / category_id / descriptionAdded value: +"Optional category (snowflake) to nest the new channel under." - added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake) to create the channel in." - added
Input schema / properties / name / descriptionAdded value: +"Name of the new channel (max 100 characters)." - added
Input schema / properties / topic / descriptionAdded value: +"Optional channel topic/description. Applies to text channels only." - changed
Input schema / properties / type / descriptionPrevious value: -"Defaults to 'text'."New value: +"Channel type to create. Defaults to 'text'."
- Changed
discord_create_event_invite5 fields changed- changed
Input schema / properties / channel_id / descriptionPrevious value: -"Channel for the invite. Uses the first text channel if omitted."New value: +"Channel (snowflake) the invite points to. Defaults to the server's first text channel if omitted." - added
Input schema / properties / event_id / descriptionAdded value: +"ID (snowflake) of the scheduled event to link the invite to." - added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - changed
Input schema / properties / max_age / descriptionPrevious value: -"Invite duration in seconds (0 = never). Default 86400."New value: +"Invite lifetime in seconds; 0 means it never expires. Default 86400 (24h)." - changed
Input schema / properties / max_uses / descriptionPrevious value: -"Max uses (0 = unlimited). Default 0."New value: +"Maximum number of uses; 0 means unlimited. Default 0."
- Changed
discord_create_forum_channel4 fields changed- changed
Input schema / properties / category_id / descriptionPrevious value: -"Parent category ID (optional)."New value: +"Optional category (snowflake) to nest the forum under." - added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - added
Input schema / properties / name / descriptionAdded value: +"Name of the new forum channel (max 100 characters)." - changed
Input schema / properties / topic / descriptionPrevious value: -"The forum channel guidelines/topic."New value: +"Guidelines/topic text shown at the top of the forum."
- Changed
discord_create_forum_post4 fields changed- changed
Input schema / properties / applied_tags / descriptionPrevious value: -"Array of tag IDs to apply to the post."New value: +"Optional tag IDs to apply. Get valid IDs from discord_get_forum_tags." - changed
Input schema / properties / content / descriptionPrevious value: -"The initial message content of the post."New value: +"Body of the post's starter message (max 2000 characters)." - added
Input schema / properties / forum_channel_id / descriptionAdded value: +"ID (snowflake) of the forum channel to post in." - changed
Input schema / properties / title / descriptionPrevious value: -"The post title (thread name)."New value: +"Title of the post, used as the thread name (max 100 characters)."
- Changed
discord_create_invite5 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel the invite leads to." - changed
Input schema / properties / max_age / descriptionPrevious value: -"Invite duration in seconds (0 = never expires). Default 86400 (24h)."New value: +"Invite lifetime in seconds; 0 means it never expires. Default 86400 (24h)." - changed
Input schema / properties / max_uses / descriptionPrevious value: -"Max number of uses (0 = unlimited). Default 0."New value: +"Maximum number of uses; 0 means unlimited. Default 0." - changed
Input schema / properties / temporary / descriptionPrevious value: -"If true, members joined via this invite are kicked when they disconnect. Default false."New value: +"If true, members who join via this invite are removed when they disconnect (unless they get a role). Default false." - changed
Input schema / properties / unique / descriptionPrevious value: -"If true, create a new unique invite even if one exists. Default false."New value: +"If true, always mint a fresh invite instead of reusing an equivalent existing one. Default false."
- Changed
discord_create_role6 fields changed- changed
Input schema / properties / color / descriptionPrevious value: -"Hex color e.g. #FF5733"New value: +"Role color as a hex string, e.g. '#FF5733'." - added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - added
Input schema / properties / hoist / descriptionAdded value: +"If true, display members with this role separately in the member list." - added
Input schema / properties / mentionable / descriptionAdded value: +"If true, anyone can @mention this role." - added
Input schema / properties / name / descriptionAdded value: +"Name of the new role (max 100 characters)." - changed
Input schema / properties / permissions / descriptionPrevious value: -"e.g. ['SendMessages','ViewChannel']"New value: +"Server-wide permission flag names to grant, e.g. ['SendMessages','ViewChannel']. Uses Discord PermissionsBitField flag names."
- Changed
discord_create_scheduled_event10 fields changed- changed
Input schema / properties / channel_id / descriptionPrevious value: -"Voice or stage channel ID. Required for VOICE/STAGE_INSTANCE."New value: +"Voice or stage channel ID (snowflake). Required for VOICE/STAGE_INSTANCE events." - added
Input schema / properties / description / descriptionAdded value: +"Optional event description (max 1000 characters)." - changed
Input schema / properties / entity_type / descriptionPrevious value: -"'VOICE', 'STAGE_INSTANCE', or 'EXTERNAL'."New value: +"Where the event happens: 'VOICE' or 'STAGE_INSTANCE' (needs channel_id), or 'EXTERNAL' (needs location + scheduled_end_time)." - added
Input schema / properties / entity_type / enumAdded value: +[ + "VOICE", + "STAGE_INSTANCE", + "EXTERNAL" +] - added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - changed
Input schema / properties / image / descriptionPrevious value: -"Cover image URL."New value: +"Optional cover image URL." - changed
Input schema / properties / location / descriptionPrevious value: -"Location string. Required for EXTERNAL events."New value: +"Free-text location (e.g. a URL or place). Required for EXTERNAL events." - added
Input schema / properties / name / descriptionAdded value: +"Event name (max 100 characters)." - changed
Input schema / properties / scheduled_end_time / descriptionPrevious value: -"ISO 8601 datetime. Required for EXTERNAL events."New value: +"Event end as an ISO 8601 datetime. Required for EXTERNAL events." - changed
Input schema / properties / scheduled_start_time / descriptionPrevious value: -"ISO 8601 datetime (e.g. '2025-06-01T20:00:00Z')."New value: +"Event start as an ISO 8601 datetime, e.g. '2026-06-01T20:00:00Z'. Must be in the future."
- Changed
discord_create_thread4 fields changed- changed
Input schema / properties / auto_archive_duration / descriptionPrevious value: -"Auto-archive after N minutes of inactivity (60, 1440, 4320, 10080). Default 1440 (24h)."New value: +"Minutes of inactivity before auto-archiving: 60, 1440, 4320, or 10080. Default 1440 (24h)." - added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the parent text channel. For a message-based thread, the channel containing message_id." - changed
Input schema / properties / message_id / descriptionPrevious value: -"Optional: message to start the thread from. If omitted, creates a standalone thread."New value: +"Optional. Message to branch the thread from. If omitted, a standalone thread is created in the channel." - changed
Input schema / properties / name / descriptionPrevious value: -"Thread name."New value: +"Name of the thread to create (max 100 characters)."
- Changed
discord_create_webhook3 fields changed- changed
Input schema / properties / avatar / descriptionPrevious value: -"Optional avatar URL for the webhook."New value: +"Optional avatar image URL for the webhook." - added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel to attach the webhook to." - changed
Input schema / properties / name / descriptionPrevious value: -"Name for the webhook."New value: +"Display name for the webhook (max 80 characters)."
- Changed
discord_crosspost_message2 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the announcement channel containing the message." - added
Input schema / properties / message_id / descriptionAdded value: +"ID of the message to publish to followers."
- Changed
discord_delete_channel2 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel to delete." - added
Input schema / properties / reason / descriptionAdded value: +"Optional reason recorded in the server audit log."
- Changed
discord_delete_dm2 fields changed- changed
Input schema / properties / message_id / descriptionPrevious value: -"The message ID (must be a bot message)."New value: +"ID of the target message within the DM conversation." - changed
Input schema / properties / user_id / descriptionPrevious value: -"The Discord user ID."New value: +"Discord user ID (snowflake) of the DM recipient."
- Changed
discord_delete_forum_post1 field changed- added
Input schema / properties / thread_id / descriptionAdded value: +"ID (snowflake) of the forum post (thread) to delete."
- Changed
discord_delete_invite2 fields changed- changed
Input schema / properties / invite_code / descriptionPrevious value: -"The invite code to revoke."New value: +"The invite code to revoke. A full discord.gg/<code> URL is also accepted." - added
Input schema / properties / reason / descriptionAdded value: +"Optional reason recorded in the server audit log."
- Changed
discord_delete_message3 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel or thread containing the message." - added
Input schema / properties / message_id / descriptionAdded value: +"ID of the message to delete." - added
Input schema / properties / reason / descriptionAdded value: +"Optional reason recorded in the server audit log."
- Changed
discord_delete_role3 fields changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - added
Input schema / properties / reason / descriptionAdded value: +"Optional reason recorded in the server audit log." - added
Input schema / properties / role_id / descriptionAdded value: +"ID (snowflake) of the role to delete."
- Changed
discord_delete_scheduled_event2 fields changed- added
Input schema / properties / event_id / descriptionAdded value: +"ID (snowflake) of the event to delete." - added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)."
- Changed
discord_delete_webhook1 field changed- added
Input schema / properties / webhook_id / descriptionAdded value: +"ID (snowflake) of the webhook to delete."
- Changed
discord_delete_webhook_message3 fields changed- added
Input schema / properties / message_id / descriptionAdded value: +"ID of the webhook message to delete." - added
Input schema / properties / webhook_id / descriptionAdded value: +"ID (snowflake) of the webhook that sent the message." - added
Input schema / properties / webhook_token / descriptionAdded value: +"Secret token of the webhook."
- Changed
discord_edit_channel5 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel to edit." - added
Input schema / properties / name / descriptionAdded value: +"New channel name (max 100 characters)." - changed
Input schema / properties / nsfw / descriptionPrevious value: -"Mark channel as NSFW."New value: +"Mark (true) or unmark (false) the channel as age-restricted (NSFW)." - changed
Input schema / properties / slowmode / descriptionPrevious value: -"Slowmode in seconds (0 to disable)."New value: +"Per-user message cooldown in seconds, 0–21600. 0 disables slowmode." - added
Input schema / properties / topic / descriptionAdded value: +"New topic/description (text channels only)."
- Changed
discord_edit_dm3 fields changed- changed
Input schema / properties / content / descriptionPrevious value: -"New text content for the message."New value: +"New plain-text content that fully replaces the existing message (max 2000 characters)." - changed
Input schema / properties / message_id / descriptionPrevious value: -"The message ID (must be a bot message)."New value: +"ID of the target message within the DM conversation." - changed
Input schema / properties / user_id / descriptionPrevious value: -"The Discord user ID."New value: +"Discord user ID (snowflake) of the DM recipient."
- Changed
discord_edit_dm_embed16 fields changed- added
Input schema / properties / author / properties / icon_url / descriptionAdded value: +"Small icon shown next to the author name." - added
Input schema / properties / author / properties / name / descriptionAdded value: +"Author display name." - added
Input schema / properties / author / properties / url / descriptionAdded value: +"URL the author name links to." - changed
Input schema / properties / color / descriptionPrevious value: -"Hex color e.g. #5865F2"New value: +"Side-bar color as a hex string, e.g. '#5865F2'." - changed
Input schema / properties / content / descriptionPrevious value: -"Optional new text content above the embed."New value: +"Optional new plain text shown above the embed." - added
Input schema / properties / description / descriptionAdded value: +"Main body text of the embed (supports Markdown)." - changed
Input schema / properties / fields / descriptionPrevious value: -"Name/value blocks shown inside the embed (max 25). Set inline:true to render up to 3 side-by-side."New value: +"Up to 25 name/value field blocks. Set inline:true to render up to 3 side-by-side." - added
Input schema / properties / fields / items / properties / inline / descriptionAdded value: +"If true, render this field side-by-side with adjacent inline fields." - added
Input schema / properties / fields / items / properties / name / descriptionAdded value: +"Field heading." - added
Input schema / properties / fields / items / properties / value / descriptionAdded value: +"Field body text." - added
Input schema / properties / footer / descriptionAdded value: +"Footer text shown at the bottom of the embed." - added
Input schema / properties / image_url / descriptionAdded value: +"Large image shown below the embed body." - changed
Input schema / properties / message_id / descriptionPrevious value: -"The message ID (must be a bot message)."New value: +"ID of the target message within the DM conversation." - changed
Input schema / properties / timestamp / descriptionPrevious value: -"If true, adds the current timestamp to the embed."New value: +"If true, stamp the embed with the current time." - added
Input schema / properties / title / descriptionAdded value: +"Embed title shown in bold at the top." - changed
Input schema / properties / user_id / descriptionPrevious value: -"The Discord user ID."New value: +"Discord user ID (snowflake) of the DM recipient."
- Changed
discord_edit_embed17 fields changed- added
Input schema / properties / author / descriptionAdded value: +"Author block shown at the top of the embed." - added
Input schema / properties / author / properties / icon_url / descriptionAdded value: +"Small icon shown next to the author name." - added
Input schema / properties / author / properties / name / descriptionAdded value: +"Author display name." - added
Input schema / properties / author / properties / url / descriptionAdded value: +"URL the author name links to." - added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel or thread containing the message." - changed
Input schema / properties / color / descriptionPrevious value: -"Hex color e.g. #5865F2"New value: +"Side-bar color as a hex string, e.g. '#5865F2'." - added
Input schema / properties / description / descriptionAdded value: +"Main body text of the embed (supports Markdown)." - added
Input schema / properties / fields / descriptionAdded value: +"Up to 25 name/value field blocks rendered as a grid." - added
Input schema / properties / fields / items / properties / inline / descriptionAdded value: +"If true, render this field side-by-side with adjacent inline fields." - added
Input schema / properties / fields / items / properties / name / descriptionAdded value: +"Field heading." - added
Input schema / properties / fields / items / properties / value / descriptionAdded value: +"Field body text." - added
Input schema / properties / footer / descriptionAdded value: +"Footer text shown at the bottom of the embed." - added
Input schema / properties / image_url / descriptionAdded value: +"Large image shown below the embed body." - changed
Input schema / properties / message_id / descriptionPrevious value: -"The message ID to edit (must be a bot message with an embed)."New value: +"ID of the message to edit. Must be a bot message that already contains an embed." - added
Input schema / properties / thumbnail_url / descriptionAdded value: +"Small image shown in the top-right corner." - changed
Input schema / properties / timestamp / descriptionPrevious value: -"If true, adds the current timestamp to the embed."New value: +"If true, stamp the embed with the current time." - added
Input schema / properties / title / descriptionAdded value: +"Embed title shown in bold at the top."
- Changed
discord_edit_message3 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel or thread containing the message." - changed
Input schema / properties / content / descriptionPrevious value: -"New text content for the message."New value: +"New plain-text content that fully replaces the existing content (max 2000 characters)." - changed
Input schema / properties / message_id / descriptionPrevious value: -"The message ID to edit (must be a bot message)."New value: +"ID of the message to edit. Must be a message authored by this bot."
- Changed
discord_edit_role7 fields changed- added
Input schema / properties / color / descriptionAdded value: +"New role color as a hex string, e.g. '#FF5733'." - added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - added
Input schema / properties / hoist / descriptionAdded value: +"If true, display members with this role separately in the member list." - added
Input schema / properties / mentionable / descriptionAdded value: +"If true, anyone can @mention this role." - added
Input schema / properties / name / descriptionAdded value: +"New role name (max 100 characters)." - added
Input schema / properties / permissions / descriptionAdded value: +"Permission flag names. Providing this REPLACES the role's entire permission set. Uses Discord PermissionsBitField flag names." - added
Input schema / properties / role_id / descriptionAdded value: +"ID (snowflake) of the role to edit."
- Changed
discord_edit_scheduled_event11 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"New voice/stage channel ID (snowflake) for VOICE/STAGE_INSTANCE events." - added
Input schema / properties / description / descriptionAdded value: +"New event description (max 1000 characters)." - added
Input schema / properties / event_id / descriptionAdded value: +"ID (snowflake) of the event to edit." - added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - changed
Input schema / properties / image / descriptionPrevious value: -"Cover image URL."New value: +"New cover image URL." - added
Input schema / properties / location / descriptionAdded value: +"New free-text location for EXTERNAL events." - added
Input schema / properties / name / descriptionAdded value: +"New event name (max 100 characters)." - changed
Input schema / properties / scheduled_end_time / descriptionPrevious value: -"ISO 8601 datetime."New value: +"New end time as an ISO 8601 datetime." - changed
Input schema / properties / scheduled_start_time / descriptionPrevious value: -"ISO 8601 datetime."New value: +"New start time as an ISO 8601 datetime." - changed
Input schema / properties / status / descriptionPrevious value: -"'SCHEDULED', 'ACTIVE', 'COMPLETED', or 'CANCELED'."New value: +"Change event status. Allowed transitions only: SCHEDULED→ACTIVE→COMPLETED, or SCHEDULED→CANCELED." - added
Input schema / properties / status / enumAdded value: +[ + "SCHEDULED", + "ACTIVE", + "COMPLETED", + "CANCELED" +]
- Changed
discord_edit_webhook4 fields changed- changed
Input schema / properties / avatar / descriptionPrevious value: -"New avatar URL for the webhook."New value: +"New avatar image URL for the webhook." - changed
Input schema / properties / channel_id / descriptionPrevious value: -"Move the webhook to a different channel."New value: +"ID (snowflake) of a channel to move the webhook to." - changed
Input schema / properties / name / descriptionPrevious value: -"New name for the webhook."New value: +"New display name for the webhook (max 80 characters)." - added
Input schema / properties / webhook_id / descriptionAdded value: +"ID (snowflake) of the webhook to edit."
- Changed
discord_edit_webhook_message17 fields changed- added
Input schema / properties / content / descriptionAdded value: +"New plain-text content for the message (max 2000 characters)." - changed
Input schema / properties / embeds / descriptionPrevious value: -"Optional array of embed objects."New value: +"Up to 10 embed objects to attach to the webhook message." - changed
Input schema / properties / embeds / items / properties / color / descriptionPrevious value: -"Hex color e.g. #5865F2"New value: +"Side-bar color as a hex string, e.g. '#5865F2'." - added
Input schema / properties / embeds / items / properties / description / descriptionAdded value: +"Main body text of the embed (supports Markdown)." - added
Input schema / properties / embeds / items / properties / fields / descriptionAdded value: +"Up to 25 name/value field blocks." - added
Input schema / properties / embeds / items / properties / fields / items / properties / inline / descriptionAdded value: +"If true, render side-by-side with adjacent inline fields." - added
Input schema / properties / embeds / items / properties / fields / items / properties / name / descriptionAdded value: +"Field heading." - added
Input schema / properties / embeds / items / properties / fields / items / properties / value / descriptionAdded value: +"Field body text." - added
Input schema / properties / embeds / items / properties / footer / descriptionAdded value: +"Footer text shown at the bottom of the embed." - added
Input schema / properties / embeds / items / properties / image_url / descriptionAdded value: +"Large image shown below the embed body." - added
Input schema / properties / embeds / items / properties / thumbnail_url / descriptionAdded value: +"Small image shown in the top-right corner." - added
Input schema / properties / embeds / items / properties / timestamp / descriptionAdded value: +"If true, stamp the embed with the current time." - added
Input schema / properties / embeds / items / properties / title / descriptionAdded value: +"Embed title shown in bold at the top." - added
Input schema / properties / embeds / items / properties / url / descriptionAdded value: +"URL that makes the title clickable." - added
Input schema / properties / message_id / descriptionAdded value: +"ID of the webhook message to edit." - added
Input schema / properties / webhook_id / descriptionAdded value: +"ID (snowflake) of the webhook that sent the message." - added
Input schema / properties / webhook_token / descriptionAdded value: +"Secret token of the webhook."
- Changed
discord_fetch_pinned_messages1 field changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel or thread to list pins from."
- Changed
discord_fetch_webhook_message3 fields changed- added
Input schema / properties / message_id / descriptionAdded value: +"ID of the webhook message to fetch." - added
Input schema / properties / webhook_id / descriptionAdded value: +"ID (snowflake) of the webhook that sent the message." - added
Input schema / properties / webhook_token / descriptionAdded value: +"Secret token of the webhook."
- Changed
discord_find_channel_by_name2 fields changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - added
Input schema / properties / name / descriptionAdded value: +"Case-insensitive substring to match against channel names."
- Changed
discord_follow_announcement_channel2 fields changed- changed
Input schema / properties / source_channel_id / descriptionPrevious value: -"The announcement channel to follow."New value: +"ID (snowflake) of the announcement channel to follow." - changed
Input schema / properties / target_channel_id / descriptionPrevious value: -"The channel that will receive published messages."New value: +"ID (snowflake) of the channel that will receive published messages."
- Changed
discord_forward_message3 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel or thread containing the source message." - added
Input schema / properties / message_id / descriptionAdded value: +"ID of the message to forward." - added
Input schema / properties / target_channel_id / descriptionAdded value: +"ID (snowflake) of the destination channel or thread."
- Changed
discord_get_audit_log3 fields changed- changed
Input schema / properties / action_type / descriptionPrevious value: -"Optional: filter by Discord action type ID."New value: +"Optional Discord AuditLogEvent numeric ID to filter by (e.g. 22 = MemberBanAdd). Omit for all action types." - added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - changed
Input schema / properties / limit / descriptionPrevious value: -"1–100, default 25."New value: +"How many recent entries to fetch (1–100). Default 25."
- Changed
discord_get_channel_permissions1 field changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel to inspect."
- Changed
discord_get_event_subscribers3 fields changed- added
Input schema / properties / event_id / descriptionAdded value: +"ID (snowflake) of the scheduled event." - added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - changed
Input schema / properties / limit / descriptionPrevious value: -"1–100, default 25."New value: +"Max subscribers to return (1–100). Default 25."
- Changed
discord_get_forum_channels1 field changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)."
- Changed
discord_get_forum_post2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Number of messages to fetch (1–100, default 20)."New value: +"How many recent messages to include (1–100). Default 20." - added
Input schema / properties / thread_id / descriptionAdded value: +"ID (snowflake) of the forum post (thread)."
- Changed
discord_get_forum_tags1 field changed- added
Input schema / properties / forum_channel_id / descriptionAdded value: +"ID (snowflake) of the forum channel to read tags from."
- Changed
discord_get_guild_info1 field changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)."
- Changed
discord_get_invite1 field changed- changed
Input schema / properties / invite_code / descriptionPrevious value: -"The invite code (e.g. 'abc123' from discord.gg/abc123)."New value: +"The invite code, e.g. 'abc123'. A full discord.gg/abc123 URL is also accepted and stripped."
- Changed
discord_get_member_info2 fields changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - added
Input schema / properties / user_id / descriptionAdded value: +"Discord user ID (snowflake) of the member."
- Changed
discord_get_membership_screening1 field changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)."
- Changed
discord_get_reactions4 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel or thread containing the message." - changed
Input schema / properties / emoji / descriptionPrevious value: -"Unicode emoji or custom emoji 'name:id'."New value: +"Unicode emoji or custom emoji 'name:id' to list reactors for." - changed
Input schema / properties / limit / descriptionPrevious value: -"1–100, default 25."New value: +"Max users to return (1–100). Default 25." - added
Input schema / properties / message_id / descriptionAdded value: +"ID of the message to inspect."
- Changed
discord_get_role_members2 fields changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - added
Input schema / properties / role_id / descriptionAdded value: +"ID (snowflake) of the role to list holders of."
- Changed
discord_get_scheduled_event2 fields changed- added
Input schema / properties / event_id / descriptionAdded value: +"ID (snowflake) of the scheduled event." - added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)."
- Changed
discord_get_server_stats1 field changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)."
- Changed
discord_kick_member3 fields changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - added
Input schema / properties / reason / descriptionAdded value: +"Optional reason recorded in the server audit log." - added
Input schema / properties / user_id / descriptionAdded value: +"Discord user ID (snowflake) of the member to kick."
- Changed
discord_list_bans2 fields changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - changed
Input schema / properties / limit / descriptionPrevious value: -"Max bans to fetch."New value: +"Optional max number of bans to fetch. Omit to fetch all."
- Changed
discord_list_channel_invites1 field changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel to list invites for."
- Changed
discord_list_channels1 field changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)."
- Changed
discord_list_forum_threads1 field changed- added
Input schema / properties / forum_channel_id / descriptionAdded value: +"ID (snowflake) of the forum channel to list posts from."
- Changed
discord_list_invites1 field changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)."
- Changed
discord_list_members2 fields changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - changed
Input schema / properties / limit / descriptionPrevious value: -"1–1000, default 50."New value: +"How many members to return (1–1000). Default 50."
- Changed
discord_list_roles1 field changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)."
- Changed
discord_list_scheduled_events1 field changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)."
- Changed
discord_list_webhooks2 fields changed- changed
Input schema / properties / channel_id / descriptionPrevious value: -"List webhooks for a specific channel."New value: +"ID (snowflake) of a channel to list webhooks for. Mutually exclusive with guild_id." - changed
Input schema / properties / guild_id / descriptionPrevious value: -"List all webhooks in a guild."New value: +"Discord server (guild) ID (snowflake) to list all webhooks for. Mutually exclusive with channel_id."
- Changed
discord_lock_channel_permissions1 field changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel to sync with its parent category."
- Changed
discord_move_channel2 fields changed- added
Input schema / properties / category_id / descriptionAdded value: +"Target category (snowflake). Omit to move the channel out of any category." - added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel to move."
- Changed
discord_pin_message3 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel or thread containing the message." - added
Input schema / properties / message_id / descriptionAdded value: +"ID of the message to pin or unpin." - changed
Input schema / properties / pin / descriptionPrevious value: -"true to pin, false to unpin."New value: +"true to pin the message, false to unpin it."
- Changed
discord_prune_members5 fields changed- changed
Input schema / properties / days / descriptionPrevious value: -"Number of days of inactivity (1–30)."New value: +"Inactivity threshold in days (1–30)." - changed
Input schema / properties / dry_run / descriptionPrevious value: -"If true (default), only returns count without pruning."New value: +"If true (default), only returns the count that would be pruned without removing anyone. Set false to actually prune." - added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - added
Input schema / properties / reason / descriptionAdded value: +"Optional reason recorded in the server audit log." - changed
Input schema / properties / roles / descriptionPrevious value: -"Role IDs to include in the prune."New value: +"Optional role IDs (snowflakes) to include; by default only members with no roles are counted."
- Changed
discord_read_dms2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"1–100, default 20."New value: +"How many recent messages to fetch (1–100). Default 20." - changed
Input schema / properties / user_id / descriptionPrevious value: -"The Discord user ID."New value: +"Discord user ID (snowflake) of the DM recipient."
- Changed
discord_read_messages2 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel or thread to read from." - changed
Input schema / properties / limit / descriptionPrevious value: -"1–100, default 20."New value: +"How many recent messages to fetch (1–100). Default 20."
- Changed
discord_remove_reactions4 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel or thread containing the message." - changed
Input schema / properties / emoji / descriptionPrevious value: -"Unicode emoji or custom emoji 'name:id'. Omit to remove all reactions."New value: +"Unicode emoji or custom emoji 'name:id'. Omit to remove ALL reactions on the message." - added
Input schema / properties / message_id / descriptionAdded value: +"ID of the message to remove reactions from." - changed
Input schema / properties / user_id / descriptionPrevious value: -"Remove only this user's reaction for the given emoji."New value: +"Remove only this user's reaction for the given emoji. Requires emoji to be set."
- Changed
discord_remove_role4 fields changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - added
Input schema / properties / reason / descriptionAdded value: +"Optional reason recorded in the server audit log." - added
Input schema / properties / role_id / descriptionAdded value: +"ID (snowflake) of the role to remove." - added
Input schema / properties / user_id / descriptionAdded value: +"Discord user ID (snowflake) of the member to remove the role from."
- Changed
discord_reply_dm3 fields changed- changed
Input schema / properties / content / descriptionPrevious value: -"The reply content."New value: +"Plain-text body of the reply (max 2000 characters)." - changed
Input schema / properties / message_id / descriptionPrevious value: -"The message ID (must be a bot message)."New value: +"ID of the target message within the DM conversation." - changed
Input schema / properties / user_id / descriptionPrevious value: -"The Discord user ID."New value: +"Discord user ID (snowflake) of the DM recipient."
- Changed
discord_reply_message3 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel or thread containing the message." - added
Input schema / properties / content / descriptionAdded value: +"Plain-text body of the reply (max 2000 characters)." - changed
Input schema / properties / message_id / descriptionPrevious value: -"The message ID to reply to."New value: +"ID of the message to reply to."
- Changed
discord_reply_to_forum2 fields changed- added
Input schema / properties / content / descriptionAdded value: +"Plain-text body of the reply (max 2000 characters)." - added
Input schema / properties / thread_id / descriptionAdded value: +"ID (snowflake) of the forum post (thread) to reply in."
- Changed
discord_reset_channel_permissions2 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel whose overwrites will be cleared." - added
Input schema / properties / reason / descriptionAdded value: +"Optional reason recorded in the server audit log."
- Changed
discord_search_members3 fields changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - changed
Input schema / properties / limit / descriptionPrevious value: -"1–100, default 25."New value: +"Max members to return (1–100). Default 25." - changed
Input schema / properties / query / descriptionPrevious value: -"Search query (matches username and nickname)."New value: +"Prefix to match against usernames and nicknames."
- Changed
discord_search_messages3 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel or thread to search." - added
Input schema / properties / keyword / descriptionAdded value: +"Case-insensitive substring to match within message content." - changed
Input schema / properties / limit / descriptionPrevious value: -"Max messages to scan (default 100)."New value: +"Max number of recent messages to scan (1–100). Default 100."
- Changed
discord_send_dm2 fields changed- changed
Input schema / properties / content / descriptionPrevious value: -"The message content to send."New value: +"Plain-text body of the DM (max 2000 characters)." - changed
Input schema / properties / user_id / descriptionPrevious value: -"The Discord user ID."New value: +"Discord user ID (snowflake) of the DM recipient."
- Changed
discord_send_dm_embed15 fields changed- added
Input schema / properties / author / properties / icon_url / descriptionAdded value: +"Small icon shown next to the author name." - added
Input schema / properties / author / properties / name / descriptionAdded value: +"Author display name." - added
Input schema / properties / author / properties / url / descriptionAdded value: +"URL the author name links to." - changed
Input schema / properties / color / descriptionPrevious value: -"Hex color e.g. #5865F2"New value: +"Side-bar color as a hex string, e.g. '#5865F2'." - changed
Input schema / properties / content / descriptionPrevious value: -"Optional text content above the embed."New value: +"Optional plain text shown above the embed." - added
Input schema / properties / description / descriptionAdded value: +"Main body text of the embed (supports Markdown)." - changed
Input schema / properties / fields / descriptionPrevious value: -"Name/value blocks shown inside the embed (max 25). Set inline:true to render up to 3 side-by-side."New value: +"Up to 25 name/value field blocks. Set inline:true to render up to 3 side-by-side." - added
Input schema / properties / fields / items / properties / inline / descriptionAdded value: +"If true, render this field side-by-side with adjacent inline fields." - added
Input schema / properties / fields / items / properties / name / descriptionAdded value: +"Field heading." - added
Input schema / properties / fields / items / properties / value / descriptionAdded value: +"Field body text." - added
Input schema / properties / footer / descriptionAdded value: +"Footer text shown at the bottom of the embed." - added
Input schema / properties / image_url / descriptionAdded value: +"Large image shown below the embed body." - changed
Input schema / properties / timestamp / descriptionPrevious value: -"If true, adds the current timestamp to the embed."New value: +"If true, stamp the embed with the current time." - added
Input schema / properties / title / descriptionAdded value: +"Embed title shown in bold at the top." - changed
Input schema / properties / user_id / descriptionPrevious value: -"The Discord user ID."New value: +"Discord user ID (snowflake) of the DM recipient."
- Changed
discord_send_embed14 fields changed- added
Input schema / properties / author / properties / icon_url / descriptionAdded value: +"Small icon shown next to the author name." - added
Input schema / properties / author / properties / name / descriptionAdded value: +"Author display name." - added
Input schema / properties / author / properties / url / descriptionAdded value: +"URL the author name links to." - added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the target channel or thread." - changed
Input schema / properties / color / descriptionPrevious value: -"Hex color e.g. #5865F2"New value: +"Side-bar color as a hex string, e.g. '#5865F2'." - added
Input schema / properties / description / descriptionAdded value: +"Main body text of the embed (supports Markdown)." - added
Input schema / properties / fields / descriptionAdded value: +"Up to 25 name/value field blocks rendered as a grid." - added
Input schema / properties / fields / items / properties / inline / descriptionAdded value: +"If true, render this field side-by-side with adjacent inline fields." - added
Input schema / properties / fields / items / properties / name / descriptionAdded value: +"Field heading." - added
Input schema / properties / fields / items / properties / value / descriptionAdded value: +"Field body text." - added
Input schema / properties / footer / descriptionAdded value: +"Footer text shown at the bottom of the embed." - added
Input schema / properties / image_url / descriptionAdded value: +"Large image shown below the embed body." - changed
Input schema / properties / timestamp / descriptionPrevious value: -"If true, adds the current timestamp to the embed."New value: +"If true, stamp the embed with the current time." - added
Input schema / properties / title / descriptionAdded value: +"Embed title shown in bold at the top."
- Changed
discord_send_message2 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the target channel or thread." - added
Input schema / properties / content / descriptionAdded value: +"Plain-text body of the message (max 2000 characters)."
- Changed
discord_send_multiple_embeds19 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the target channel or thread." - changed
Input schema / properties / content / descriptionPrevious value: -"Optional text content above the embeds."New value: +"Optional plain text shown above the embeds." - changed
Input schema / properties / embeds / descriptionPrevious value: -"Array of embed objects (max 10)."New value: +"Array of embed objects to send (max 10)." - added
Input schema / properties / embeds / items / properties / author / descriptionAdded value: +"Author block shown at the top of the embed." - added
Input schema / properties / embeds / items / properties / author / properties / icon_url / descriptionAdded value: +"Small icon shown next to the author name." - added
Input schema / properties / embeds / items / properties / author / properties / name / descriptionAdded value: +"Author display name." - added
Input schema / properties / embeds / items / properties / author / properties / url / descriptionAdded value: +"URL the author name links to." - changed
Input schema / properties / embeds / items / properties / color / descriptionPrevious value: -"Hex color e.g. #5865F2"New value: +"Side-bar color as a hex string, e.g. '#5865F2'." - added
Input schema / properties / embeds / items / properties / description / descriptionAdded value: +"Main body text of the embed (supports Markdown)." - added
Input schema / properties / embeds / items / properties / fields / descriptionAdded value: +"Up to 25 name/value field blocks rendered as a grid." - added
Input schema / properties / embeds / items / properties / fields / items / properties / inline / descriptionAdded value: +"If true, render this field side-by-side with adjacent inline fields." - added
Input schema / properties / embeds / items / properties / fields / items / properties / name / descriptionAdded value: +"Field heading." - added
Input schema / properties / embeds / items / properties / fields / items / properties / value / descriptionAdded value: +"Field body text." - added
Input schema / properties / embeds / items / properties / footer / descriptionAdded value: +"Footer text shown at the bottom of the embed." - added
Input schema / properties / embeds / items / properties / image_url / descriptionAdded value: +"Large image shown below the embed body." - added
Input schema / properties / embeds / items / properties / thumbnail_url / descriptionAdded value: +"Small image shown in the top-right corner." - added
Input schema / properties / embeds / items / properties / timestamp / descriptionAdded value: +"If true, stamp the embed with the current time." - added
Input schema / properties / embeds / items / properties / title / descriptionAdded value: +"Embed title shown in bold at the top." - added
Input schema / properties / embeds / items / properties / url / descriptionAdded value: +"URL that makes the title clickable."
- Changed
discord_send_webhook_message18 fields changed- changed
Input schema / properties / avatar_url / descriptionPrevious value: -"Override the webhook's default avatar."New value: +"Override the webhook's default avatar for this message." - changed
Input schema / properties / content / descriptionPrevious value: -"Text content of the message."New value: +"Plain-text body of the message (max 2000 characters). Optional if embeds are provided." - changed
Input schema / properties / embeds / descriptionPrevious value: -"Optional array of embed objects."New value: +"Up to 10 embed objects to attach to the webhook message." - changed
Input schema / properties / embeds / items / properties / color / descriptionPrevious value: -"Hex color e.g. #5865F2"New value: +"Side-bar color as a hex string, e.g. '#5865F2'." - added
Input schema / properties / embeds / items / properties / description / descriptionAdded value: +"Main body text of the embed (supports Markdown)." - added
Input schema / properties / embeds / items / properties / fields / descriptionAdded value: +"Up to 25 name/value field blocks." - added
Input schema / properties / embeds / items / properties / fields / items / properties / inline / descriptionAdded value: +"If true, render side-by-side with adjacent inline fields." - added
Input schema / properties / embeds / items / properties / fields / items / properties / name / descriptionAdded value: +"Field heading." - added
Input schema / properties / embeds / items / properties / fields / items / properties / value / descriptionAdded value: +"Field body text." - added
Input schema / properties / embeds / items / properties / footer / descriptionAdded value: +"Footer text shown at the bottom of the embed." - added
Input schema / properties / embeds / items / properties / image_url / descriptionAdded value: +"Large image shown below the embed body." - added
Input schema / properties / embeds / items / properties / thumbnail_url / descriptionAdded value: +"Small image shown in the top-right corner." - added
Input schema / properties / embeds / items / properties / timestamp / descriptionAdded value: +"If true, stamp the embed with the current time." - added
Input schema / properties / embeds / items / properties / title / descriptionAdded value: +"Embed title shown in bold at the top." - added
Input schema / properties / embeds / items / properties / url / descriptionAdded value: +"URL that makes the title clickable." - changed
Input schema / properties / username / descriptionPrevious value: -"Override the webhook's default username."New value: +"Override the webhook's default display name for this message." - added
Input schema / properties / webhook_id / descriptionAdded value: +"ID (snowflake) of the webhook to send through." - added
Input schema / properties / webhook_token / descriptionAdded value: +"Secret token of the webhook (from discord_create_webhook or discord_list_webhooks)."
- Changed
discord_set_channel_position2 fields changed- added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel to reposition." - added
Input schema / properties / position / descriptionAdded value: +"Zero-based position within the category (0 = top)."
- Changed
discord_set_forum_tags5 fields changed- added
Input schema / properties / forum_channel_id / descriptionAdded value: +"ID (snowflake) of the forum channel to set tags on." - changed
Input schema / properties / tags / descriptionPrevious value: -"Array of tag objects to set on the forum channel."New value: +"Complete list of tags to set (replaces all existing tags)." - changed
Input schema / properties / tags / items / properties / emoji_name / descriptionPrevious value: -"Unicode emoji for the tag (optional)."New value: +"Optional unicode emoji shown on the tag." - changed
Input schema / properties / tags / items / properties / moderated / descriptionPrevious value: -"If true, only moderators can apply this tag (optional)."New value: +"If true, only members with Manage Threads can apply this tag. Default false." - added
Input schema / properties / tags / items / properties / name / descriptionAdded value: +"Tag label (max 20 characters)."
- Changed
discord_set_member_permission5 fields changed- added
Input schema / properties / allow / descriptionAdded value: +"Permission flag names to allow, e.g. ['ViewChannel']. Uses Discord PermissionsBitField flag names." - added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel to set the overwrite on." - added
Input schema / properties / deny / descriptionAdded value: +"Permission flag names to deny." - added
Input schema / properties / reason / descriptionAdded value: +"Optional reason recorded in the server audit log." - added
Input schema / properties / user_id / descriptionAdded value: +"ID (snowflake) of the member to grant/deny permissions for."
- Changed
discord_set_nickname4 fields changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - changed
Input schema / properties / nickname / descriptionPrevious value: -"New nickname, or null to clear."New value: +"New nickname (max 32 characters), or null to clear it." - added
Input schema / properties / reason / descriptionAdded value: +"Optional reason recorded in the server audit log." - added
Input schema / properties / user_id / descriptionAdded value: +"Discord user ID (snowflake) of the member."
- Changed
discord_set_role_icon4 fields changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - changed
Input schema / properties / icon / descriptionPrevious value: -"Image URL for the role icon. Set to null to remove."New value: +"Image URL for the role icon, or null to remove it." - added
Input schema / properties / role_id / descriptionAdded value: +"ID (snowflake) of the role to set the icon on." - changed
Input schema / properties / unicode_emoji / descriptionPrevious value: -"Unicode emoji for the role. Set to null to remove."New value: +"Unicode emoji to use as the role icon, or null to remove it."
- Changed
discord_set_role_permission5 fields changed- changed
Input schema / properties / allow / descriptionPrevious value: -"e.g. ['SendMessages','ViewChannel']"New value: +"Permission flag names to allow, e.g. ['SendMessages','ViewChannel']. Uses Discord PermissionsBitField flag names." - added
Input schema / properties / channel_id / descriptionAdded value: +"ID (snowflake) of the channel to set the overwrite on." - added
Input schema / properties / deny / descriptionAdded value: +"Permission flag names to deny, e.g. ['SendMessages']." - added
Input schema / properties / reason / descriptionAdded value: +"Optional reason recorded in the server audit log." - added
Input schema / properties / role_id / descriptionAdded value: +"ID (snowflake) of the role to grant/deny permissions for."
- Changed
discord_set_role_position3 fields changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - added
Input schema / properties / position / descriptionAdded value: +"New hierarchy position (0 = lowest, just above @everyone). Higher numbers rank higher." - added
Input schema / properties / role_id / descriptionAdded value: +"ID (snowflake) of the role to reposition."
- Changed
discord_timeout_member4 fields changed- added
Input schema / properties / duration_minutes / descriptionAdded value: +"Timeout length in minutes (1–40320, i.e. up to 28 days). Use 0 to clear an existing timeout." - added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - added
Input schema / properties / reason / descriptionAdded value: +"Optional reason recorded in the server audit log." - added
Input schema / properties / user_id / descriptionAdded value: +"Discord user ID (snowflake) of the member to time out."
- Changed
discord_unban_member3 fields changed- added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)." - added
Input schema / properties / reason / descriptionAdded value: +"Optional reason recorded in the server audit log." - added
Input schema / properties / user_id / descriptionAdded value: +"Discord user ID (snowflake) of the banned user to unban."
- Changed
discord_update_forum_post5 fields changed- changed
Input schema / properties / applied_tags / descriptionPrevious value: -"Array of tag IDs to apply to the post."New value: +"Tag IDs to apply; replaces the post's current tags. Get valid IDs from discord_get_forum_tags." - changed
Input schema / properties / archived / descriptionPrevious value: -"Whether to archive the thread."New value: +"true to archive (close) the post, false to reopen it." - changed
Input schema / properties / locked / descriptionPrevious value: -"Whether to lock the thread."New value: +"true to lock the post so only moderators can reply." - added
Input schema / properties / thread_id / descriptionAdded value: +"ID (snowflake) of the forum post (thread) to update." - changed
Input schema / properties / title / descriptionPrevious value: -"New title for the forum post."New value: +"New title/thread name (max 100 characters)."
- Changed
discord_update_membership_screening5 fields changed- changed
Input schema / properties / form_fields / descriptionPrevious value: -"List of rules/questions. Each item has: label (the rule title), values (array of rule lines), required (boolean)."New value: +"Rules/agreement blocks new members must accept. Replaces the existing fields when provided." - changed
Input schema / properties / form_fields / items / properties / label / descriptionPrevious value: -"Title/question for this field."New value: +"Title of this rules block." - changed
Input schema / properties / form_fields / items / properties / required / descriptionPrevious value: -"Whether this field is required (default true)."New value: +"Whether the member must agree to this block. Default true." - changed
Input schema / properties / form_fields / items / properties / values / descriptionPrevious value: -"Array of rule lines or answer options."New value: +"Individual rule lines shown under the label." - added
Input schema / properties / guild_id / descriptionAdded value: +"Discord server (guild) ID (snowflake)."
91 tool updates
v1.5.0- Added
discord_add_reaction - Added
discord_add_role - Added
discord_audit_permissions - Added
discord_ban_member - Added
discord_bulk_ban - Added
discord_bulk_delete_messages - Added
discord_clone_channel - Added
discord_copy_permissions - Added
discord_create_channel - Added
discord_create_event_invite - Added
discord_create_forum_channel - Added
discord_create_forum_post - Added
discord_create_invite - Added
discord_create_role - Added
discord_create_scheduled_event - Added
discord_create_thread - Added
discord_create_webhook - Added
discord_crosspost_message - Added
discord_delete_channel - Added
discord_delete_forum_post - Added
discord_delete_invite - Added
discord_delete_message - Added
discord_delete_role - Added
discord_delete_scheduled_event - Added
discord_delete_webhook - Added
discord_delete_webhook_message - Added
discord_edit_channel - Changed
discord_edit_dm_embed1 field changed- added
Input schema / properties / fields / descriptionAdded value: +"Name/value blocks shown inside the embed (max 25). Set inline:true to render up to 3 side-by-side."
- Added
discord_edit_embed - Added
discord_edit_message - Added
discord_edit_role - Added
discord_edit_scheduled_event - Added
discord_edit_webhook - Added
discord_edit_webhook_message - Added
discord_fetch_pinned_messages - Added
discord_fetch_webhook_message - Added
discord_find_channel_by_name - Added
discord_follow_announcement_channel - Added
discord_forward_message - Added
discord_get_audit_log - Added
discord_get_channel_permissions - Added
discord_get_event_subscribers - Added
discord_get_forum_channels - Added
discord_get_forum_post - Added
discord_get_forum_tags - Added
discord_get_guild_info - Added
discord_get_invite - Added
discord_get_member_info - Added
discord_get_membership_screening - Added
discord_get_reactions - Added
discord_get_role_members - Added
discord_get_scheduled_event - Added
discord_get_server_stats - Added
discord_kick_member - Added
discord_list_bans - Added
discord_list_channels - Added
discord_list_forum_threads - Added
discord_list_guilds - Added
discord_list_invites - Added
discord_list_members - Added
discord_list_roles - Added
discord_list_scheduled_events - Added
discord_list_webhooks - Added
discord_lock_channel_permissions - Added
discord_move_channel - Added
discord_pin_message - Added
discord_prune_members - Added
discord_read_messages - Added
discord_remove_reactions - Added
discord_remove_role - Added
discord_reply_message - Added
discord_reply_to_forum - Added
discord_reset_channel_permissions - Added
discord_search_members - Added
discord_search_messages - Changed
discord_send_dm_embed1 field changed- added
Input schema / properties / fields / descriptionAdded value: +"Name/value blocks shown inside the embed (max 25). Set inline:true to render up to 3 side-by-side."
- Added
discord_send_embed - Added
discord_send_message - Added
discord_send_multiple_embeds - Added
discord_send_webhook_message - Added
discord_set_channel_position - Added
discord_set_forum_tags - Added
discord_set_member_permission - Added
discord_set_nickname - Added
discord_set_role_icon - Added
discord_set_role_permission - Added
discord_set_role_position - Added
discord_timeout_member - Added
discord_unban_member - Added
discord_update_forum_post - Added
discord_update_membership_screening
1 tool update
v1.2.0- Added
discord_list_channel_invites
5 tool updates
v1.1.0- Added
discord_delete_dm - Added
discord_edit_dm - Added
discord_edit_dm_embed - Added
discord_send_dm - Added
discord_send_dm_embed
2 tool updates
v1.3.0- Added
discord_read_dms - Added
discord_reply_dm
60 tool updates
v1.0.0- Removed
discord_add_reaction - Removed
discord_add_role - Removed
discord_audit_permissions - Removed
discord_ban_member - Removed
discord_bulk_delete_messages - Removed
discord_clone_channel - Removed
discord_copy_permissions - Removed
discord_create_channel - Removed
discord_create_forum_channel - Removed
discord_create_forum_post - Removed
discord_create_role - Removed
discord_create_thread - Removed
discord_create_webhook - Removed
discord_delete_channel - Removed
discord_delete_forum_post - Removed
discord_delete_message - Removed
discord_delete_role - Removed
discord_delete_webhook - Removed
discord_edit_channel - Removed
discord_edit_embed - Removed
discord_edit_message - Removed
discord_edit_role - Removed
discord_edit_webhook - Removed
discord_find_channel_by_name - Removed
discord_get_audit_log - Removed
discord_get_channel_permissions - Removed
discord_get_forum_channels - Removed
discord_get_forum_post - Removed
discord_get_forum_tags - Removed
discord_get_guild_info - Removed
discord_get_member_info - Removed
discord_get_membership_screening - Removed
discord_get_role_members - Removed
discord_get_server_stats - Removed
discord_kick_member - Removed
discord_list_channels - Removed
discord_list_forum_threads - Removed
discord_list_guilds - Removed
discord_list_members - Removed
discord_list_roles - Removed
discord_list_webhooks - Removed
discord_move_channel - Removed
discord_pin_message - Removed
discord_read_messages - Removed
discord_remove_role - Removed
discord_reply_message - Removed
discord_reply_to_forum - Removed
discord_reset_channel_permissions - Removed
discord_search_messages - Removed
discord_send_embed - Removed
discord_send_message - Removed
discord_send_multiple_embeds - Removed
discord_send_webhook_message - Removed
discord_set_forum_tags - Removed
discord_set_member_permission - Removed
discord_set_role_permission - Removed
discord_timeout_member - Removed
discord_unban_member - Removed
discord_update_forum_post - Removed
discord_update_membership_screening
60 tool updates
v0.1.0- First observed
discord_add_reaction - First observed
discord_add_role - First observed
discord_audit_permissions - First observed
discord_ban_member - First observed
discord_bulk_delete_messages - First observed
discord_clone_channel - First observed
discord_copy_permissions - First observed
discord_create_channel - First observed
discord_create_forum_channel - First observed
discord_create_forum_post - First observed
discord_create_role - First observed
discord_create_thread - First observed
discord_create_webhook - First observed
discord_delete_channel - First observed
discord_delete_forum_post - First observed
discord_delete_message - First observed
discord_delete_role - First observed
discord_delete_webhook - First observed
discord_edit_channel - First observed
discord_edit_embed - First observed
discord_edit_message - First observed
discord_edit_role - First observed
discord_edit_webhook - First observed
discord_find_channel_by_name - First observed
discord_get_audit_log - First observed
discord_get_channel_permissions - First observed
discord_get_forum_channels - First observed
discord_get_forum_post - First observed
discord_get_forum_tags - First observed
discord_get_guild_info - First observed
discord_get_member_info - First observed
discord_get_membership_screening - First observed
discord_get_role_members - First observed
discord_get_server_stats - First observed
discord_kick_member - First observed
discord_list_channels - First observed
discord_list_forum_threads - First observed
discord_list_guilds - First observed
discord_list_members - First observed
discord_list_roles - First observed
discord_list_webhooks - First observed
discord_move_channel - First observed
discord_pin_message - First observed
discord_read_messages - First observed
discord_remove_role - First observed
discord_reply_message - First observed
discord_reply_to_forum - First observed
discord_reset_channel_permissions - First observed
discord_search_messages - First observed
discord_send_embed - First observed
discord_send_message - First observed
discord_send_multiple_embeds - First observed
discord_send_webhook_message - First observed
discord_set_forum_tags - First observed
discord_set_member_permission - First observed
discord_set_role_permission - First observed
discord_timeout_member - First observed
discord_unban_member - First observed
discord_update_forum_post - First observed
discord_update_membership_screening
TDQS
Most tools have clear, distinct purposes with descriptions that clarify boundaries. A few tools like discord_pin_message (both pin and unpin) or discord_read_messages vs discord_search_messages could cause minor confusion, but overall the set is well-differentiated.
All tools follow a consistent 'discord_verb_noun' pattern using snake_case. The naming is uniform and predictable across all 97 tools, making it easy to infer functionality from the name.
With 97 tools, the server is far too large for a single MCP server. While the scope is broad, the tool count would overwhelm agents and likely cause inefficiency. A more focused subset or splitting into multiple servers would be appropriate.
The tool set covers most major Discord operations including messages, channels, roles, permissions, webhooks, events, forums, bans, and member management. Minor gaps exist, such as no direct get_channel_by_id tool, but alternatives are available.
Maintenance
Related MCP Connectors
An MCP server for deep research or task groups
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Official MCP server for subfeed.app — the cloud for agents. 15+ tools for AI agents to register, build, and deploy other agents. Zero human required. Start here: subfeed.app/skill.md
The official MCP Server for the Mux API
Related MCP Servers
- AlicenseAqualityAmaintenanceA Discord Model Context Protocol server that enables AI assistants to interact with Discord, providing functionality for sending messages, managing channels, handling forum posts, and working with reactions.30221,062103MIT
- AlicenseNot gradedqualityCmaintenanceThe most complete open-source MCP server for Discord — 80+ tools, dual-mode: integrated (plugin) or standalone4310MIT
- AlicenseAqualityDmaintenanceAn MCP server providing 26 tools for Discord API interactions, enabling message management, moderation, channel operations, and server inspection through Claude Code, Paperclip agents, or other MCP-compatible clients.26MIT
- AlicenseAqualityDmaintenanceMCP server for interacting with Discord via REST API, enabling guild, channel, and message operations using a bot token.7MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/PaSympa/discord-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server