mcp-discord
Provides tools for interacting with Discord's API, enabling AI agents to send messages, moderate content, manage channels, inspect servers, handle reactions, and perform server management operations through Discord's REST API.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-discordsend a welcome message to #general with the embed about our new project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@devli13/mcp-discord
An MCP server for Discord. Send messages, moderate, manage channels, inspect servers — from Claude Code, Paperclip agents, Gemini CLI, or any MCP-compatible client.
Pure REST wrapper. No Gateway. No database. Just Discord's v10 API as 26 well-documented tools, with per-route rate limiting and structured error results.
Why
Discord's API is sprawling and agent-unfriendly when called via raw curl. Agents hit rate limits, mishandle 429s, fumble audit-log reasons, forget pagination cursors. This MCP fixes that once, so agents can focus on intent: "delete that spam message," "post the daily digest to #mod-log," "timeout @user for an hour."
Also great for humans. Connected to Claude Code, you can say "summarize the last 50 messages in my Discord #dev channel" and Claude just does it.
Related MCP server: Discord Bridge MCP Server
Install
npm install -g @devli13/mcp-discordOr via npx (no install):
DISCORD_BOT_TOKEN=<your-token> npx -y @devli13/mcp-discordSetup
1. Create a Discord bot
Go to https://discord.com/developers/applications → New Application
Add a Bot to the application
Copy the bot token — this is your
DISCORD_BOT_TOKENInvite the bot to your server using the OAuth2 URL generator (scope:
bot). Pick permissions based on what you need the MCP to do (e.g. Manage Messages for deletes, Moderate Members for timeouts)
2. Wire it to your MCP client
Claude Code:
claude mcp add discord \
--env DISCORD_BOT_TOKEN=<your-token> \
-- npx -y @devli13/mcp-discordPaperclip mcp-gateway (.mcp.json):
{
"mcpServers": {
"discord": {
"command": "npx",
"args": ["-y", "@devli13/mcp-discord"],
"env": {
"DISCORD_BOT_TOKEN": "<your-token>"
}
}
}
}Gemini CLI (~/.gemini/config.json):
{
"mcpServers": {
"discord": {
"command": "npx",
"args": ["-y", "@devli13/mcp-discord"]
}
}
}3. (Optional) Enable privileged intents
If you want to list server members (discord_list_members) or use this MCP alongside the companion plugin for inbound events, enable Server Members Intent and Message Content Intent in your bot's Developer Portal settings. These are not required for most MCP operations — only for specific endpoints.
Tool reference
All tools are prefixed discord_* and return either a JSON blob (on success) or a formatted error message (on failure). None throw — every tool returns a usable string result.
Messages (8)
Tool | Purpose |
| Send to a channel. Supports embeds, replies, mention control |
| Edit the bot's own message |
| Delete one message (by bot or others, with Manage Messages) |
| Delete 2-100 messages (<14 days old) in one call |
| Fetch one message by ID |
| Paginated channel history (before/after/around cursors) |
| Manage pins |
Reactions (3)
Tool | Purpose |
| Bot adds a reaction |
| Remove bot's or user's reaction |
| List users who reacted with an emoji |
Channels & Threads (5)
Tool | Purpose |
| All channels in a guild |
| Single channel details |
| Spawn a new thread (public or private, anchored or standalone) |
| All active threads in a guild |
| Trigger "bot is typing…" indicator |
Moderation (6)
Tool | Purpose |
| Member profile (roles, join date, timeout state) |
| Paginated member list (requires Server Members intent) |
| Mute via |
| Remove from guild |
| Role management |
Server info (4)
Tool | Purpose |
| All guilds the bot is in |
| Single guild details |
| All roles, sorted by position |
| Recent audit log entries (filter by user, action, etc.) |
Not included (by design):
ban/unban— deliberate. Use Discord's UI; irreversible actions shouldn't be one agent-call awayChannel create/delete/edit — high blast radius, use the UI
Webhook CRUD — not needed for most agent flows; can add in a future release
Voice operations, sticker/emoji management — out of scope for v0.1
Example: summarize a channel via Claude Code
User: Summarize the last 30 messages in the #dev channel of my Discord server, guild ID 1234...
Claude (calls discord_list_channels → finds #dev → calls discord_list_messages → writes summary)Example: Paperclip agent daily digest
// From an agent's prompt:
"Post the daily digest to channel 1234. Summarize the last 24h of activity
using discord_list_messages with limit=100, then format as an embed via
discord_send_message."Error handling
Every tool returns a usable text result. On error:
Error (DISCORD_50001, HTTP 403): Missing Access
Details: [...]
(This error is transient and may succeed on retry.)The MCP already handles retries internally for 429 (rate limits) and 5xx (server errors), with exponential backoff.
Rate limits
Discord has two rate-limit layers:
Per-route — each API endpoint has independent buckets. This MCP serializes requests per (method + route template) to prevent bursting past a 429.
Global — per-bot, across all endpoints. The MCP honors
Retry-Afterheaders globally.
You shouldn't need to think about this. If you do hit the global limit repeatedly, you're probably doing something that deserves a human in the loop.
Security
Never commit your bot token. This MCP reads it from
DISCORD_BOT_TOKENenvironment variable at startup.Use least-privilege invite URLs. Don't give bots Administrator if you only need Manage Messages.
Audit log reasons — all moderation tools accept a
reasonargument that appears in Discord's audit log. Use it.
Development
git clone https://github.com/devli13/mcp-discord.git
cd mcp-discord
npm install
npm test # smoke tests (no live Discord calls)
npm run lint # syntax check all files
npm start # boot server over stdio (needs DISCORD_BOT_TOKEN)Companion project — inbound events
This MCP handles outbound REST calls (send, delete, moderate). It does not hold a Discord Gateway WebSocket, so it can't react to inbound events (a user @mentioning the bot, DMs, new members joining).
For inbound Discord events in a Paperclip setup, use @devli13/paperclip-plugin-discord — a fork of @mvanhorn/paperclip-plugin-discord with free-form @mention routing, DM support, a serialized per-context message queue, and downtime mention backfill.
The two projects are designed to work together: the plugin receives events, invokes your agent; the agent uses this MCP to respond and moderate. Use either or both depending on your setup.
Attribution
See ATTRIBUTION.md. Short version: built alongside the fork of paperclip-plugin-discord by @mvanhorn, whose Gateway handling inspired design patterns here.
License
MIT — see LICENSE.
Available Tools
26 toolsdiscord_add_reactionA
Add a reaction from the bot to a message. Emoji can be a unicode glyph (e.g. "👍") or custom-emoji string ("name:id"). Requires Add Reactions + Read Message History.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ||
| message_id | Yes | ||
| emoji | Yes | Unicode emoji or "name:id" for custom emoji. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the action (adding a reaction), specifies the actor (the bot), and outlines permission requirements. It also clarifies the emoji format, which is crucial for correct usage. However, it lacks details on rate limits, error conditions, or response format, leaving some behavioral aspects uncovered.
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, followed by essential details (emoji format and permissions) in a single, efficient sentence. Every part earns its place, with no redundant or verbose language, making it highly concise and well-structured.
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's moderate complexity (3 parameters, no output schema, no annotations), the description is mostly complete. It covers the action, actor, parameters, and prerequisites. However, it lacks information on return values or error handling, which would be beneficial for full contextual understanding, especially without an output 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 low (33%), with only the 'emoji' parameter documented in the schema. The description compensates by explaining the emoji format ('Unicode glyph or custom-emoji string') and implying the need for channel_id and message_id to target a specific message. This adds meaningful context beyond the bare schema, though it could further clarify parameter relationships or constraints.
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 action ('Add a reaction from the bot to a message') and resource ('message'), distinguishing it from sibling tools like discord_remove_reaction (which removes reactions) or discord_get_reactions (which retrieves them). The verb 'Add' is precise and the target 'reaction from the bot' is well-defined.
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 by specifying prerequisites ('Requires Add Reactions + Read Message History'), which helps determine when the tool can be used. However, it does not explicitly state when to use this tool versus alternatives like discord_remove_reaction or discord_get_reactions, nor does it mention exclusions or edge cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_add_roleA
Add a role to a guild member. Requires Manage Roles and the target role must be below the bot's highest role.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes | ||
| user_id | Yes | ||
| role_id | Yes | ||
| reason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behavioral traits: it's a mutation operation (implied by 'Add'), requires specific permissions ('Manage Roles'), and has a hierarchical constraint ('target role must be below the bot's highest role'). However, it doesn't mention rate limits, error conditions, or response format, leaving some gaps.
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 in the first clause, followed by essential prerequisites. Both sentences earn their place by providing critical information without redundancy or fluff, making it highly efficient.
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 no annotations, no output schema, and 0% schema description coverage for a 4-parameter mutation tool, the description is moderately complete. It covers purpose, usage context, and key constraints, but lacks details on parameter semantics, return values, error handling, or side effects, which are important for a tool with permissions and hierarchical rules.
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 0%, so the description must compensate for undocumented parameters. It implicitly references guild_id, user_id, and role_id through context ('guild member', 'role'), but doesn't explain parameter meanings, formats, or the optional 'reason' parameter. The description adds minimal semantic value beyond what's inferable from parameter names.
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 action ('Add a role') and target ('to a guild member'), distinguishing it from sibling tools like discord_remove_role, discord_list_roles, or discord_kick_user. It precisely identifies the verb and resource without ambiguity.
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 to use this tool ('Add a role to a guild member') and provides critical prerequisites: 'Requires Manage Roles and the target role must be below the bot's highest role.' This gives clear context for usage versus alternatives like discord_remove_role or other member management tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_bulk_delete_messagesA
Bulk delete 2-100 messages from a channel. All messages must be less than 14 days old. Useful for raid cleanup. Requires Manage Messages permission.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ||
| message_ids | Yes | Array of message snowflake IDs to delete (min 2, max 100). | |
| reason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key constraints: the 2-100 message range, the 14-day age limit, and the permission requirement. However, it does not mention potential side effects (e.g., whether deletions are logged or reversible) or error handling, leaving some behavioral aspects unclear.
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 functionality, followed by constraints and usage context. All three sentences are necessary and contribute value without redundancy. It is efficiently structured and appropriately sized for the tool's complexity.
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's moderate complexity (3 parameters, no output schema, no annotations), the description covers essential aspects like purpose, constraints, and permissions. However, it lacks details on return values or error cases, which would enhance completeness. It is mostly adequate but has minor gaps.
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 low (33%), with only 'message_ids' documented. The description compensates by clarifying the purpose of bulk deletion and the 2-100 range, which adds meaning beyond the schema. However, it does not explain 'channel_id' or 'reason' parameters, so some semantic gaps remain.
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 action ('Bulk delete'), resource ('messages'), and scope ('from a channel'), distinguishing it from the sibling 'discord_delete_message' which presumably handles single deletions. The verb+resource combination is precise 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 provides clear context for when to use this tool ('Useful for raid cleanup') and mentions prerequisites ('Requires Manage Messages permission'), but does not explicitly state when NOT to use it or name alternatives (e.g., 'discord_delete_message' for single deletions). The guidance is helpful but not fully comparative.
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. If message_id is provided, creates a thread from that message; otherwise creates a standalone thread in the channel. auto_archive_duration is in minutes: 60, 1440, 4320, or 10080.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ||
| name | Yes | 1-100 character thread name. | |
| message_id | No | Optional — create thread anchored to this message. | |
| auto_archive_duration | No | Minutes of inactivity before auto-archive: 60, 1440 (1d), 4320 (3d), or 10080 (7d). Default 1440. | |
| type | No | Thread type (only used when message_id is not set): 11 = public thread, 12 = private thread. Default 11. | |
| invitable | No | Private threads only — if false, only moderators can add members. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavioral traits: the conditional creation modes and auto_archive_duration options. However, it lacks details on permissions required, error conditions, rate limits, or what happens on success (e.g., thread ID returned). For a mutation tool with zero annotation coverage, this leaves gaps in safety and operational context.
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, followed by conditional behavior and parameter details in two efficient sentences. Every sentence adds necessary information without redundancy, making it appropriately sized and well-structured for quick comprehension.
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 complexity of a creation tool with 6 parameters, no annotations, and no output schema, the description is moderately complete. It covers key behavioral aspects and parameter semantics but lacks details on permissions, error handling, and return values. This leaves the agent with incomplete operational context, though it meets minimum viability for basic use.
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 high (83%), so the baseline is 3. The description adds value by clarifying the semantics of message_id (anchoring behavior) and auto_archive_duration (specific minute values), which complements the schema. However, it does not address parameters like type or invitable beyond what the schema already describes, keeping it from a perfect score.
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 action ('Create a thread') and distinguishes between two modes: creating from a message or standalone. It explicitly mentions the resource (thread) and the conditional behavior based on message_id, which differentiates it from sibling tools like discord_send_message or discord_list_active_threads.
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 on when to use different modes (with or without message_id) and mentions auto_archive_duration options. However, it does not explicitly state when to use this tool versus alternatives like discord_send_message for general messaging or discord_list_active_threads for viewing threads, nor does it mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_delete_messageA
Delete a single message. Requires Manage Messages for other users' messages; bot can always delete its own.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ||
| message_id | Yes | ||
| reason | No | Audit log reason (shown in Discord's audit log). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behavioral traits: the destructive nature of deletion, permission requirements (Manage Messages for others, self-deletion allowed), and the audit log implication via the 'reason' parameter. This covers safety and authorization aspects well, though it lacks details on error handling 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?
The description is front-loaded with the core purpose in the first sentence, followed by essential usage context in the second. Both sentences earn their place by providing critical information without redundancy, making it efficient and well-structured.
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's complexity (destructive operation with permission nuances), no annotations, and no output schema, the description is reasonably complete. It covers the action, permissions, and audit log context, but lacks details on return values or error cases, which would enhance completeness for a deletion 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 33% (only 'reason' has a description), and the description does not add meaning for the undocumented parameters 'channel_id' and 'message_id'. It implies the 'reason' parameter's purpose (audit log) but does not elaborate beyond what the schema provides. With low coverage, the description compensates minimally, meeting the baseline for partial parameter information.
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 action ('Delete a single message') and resource ('message'), distinguishing it from sibling tools like 'discord_bulk_delete_messages' (which handles multiple messages) and 'discord_edit_message' (which modifies rather than deletes). The verb 'Delete' is precise 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 provides clear context for when to use this tool by specifying permission requirements ('Requires Manage Messages for other users' messages; bot can always delete its own'), which helps differentiate it from alternatives like 'discord_bulk_delete_messages' for batch operations. However, it does not explicitly state when NOT to use it or name specific alternatives beyond implied distinctions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_edit_messageA
Edit a message the bot previously sent. Can edit content and embeds. Cannot edit other users' messages.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ||
| message_id | Yes | ||
| content | No | ||
| embeds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that editing is limited to bot messages only, which is a crucial behavioral constraint. However, it doesn't mention authentication requirements, rate limits, or what happens when editing fails, leaving some behavioral aspects unclear.
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 zero waste: the first states the purpose and scope, the second adds a critical exclusion. Every word earns its place, and the most important information (what it does and what it doesn't do) 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 mutation tool with no annotations and no output schema, the description provides essential context about limitations (bot messages only) but lacks details on error conditions, return values, or side effects. Given the complexity of editing messages in Discord, more behavioral context would be helpful.
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 0%, so the description must compensate. It mentions that you can 'edit content and embeds,' which maps to two of the four parameters (content, embeds), adding meaning beyond the bare schema. However, it doesn't explain channel_id or message_id parameters, leaving half the parameters without semantic context.
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 action ('Edit a message') with the resource ('the bot previously sent'), distinguishing it from sibling tools like discord_delete_message or discord_send_message by specifying it's for editing existing bot messages 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?
It explicitly states when to use this tool ('Edit a message the bot previously sent') and when not to use it ('Cannot edit other users' messages'), providing clear boundaries that differentiate it from alternatives like discord_send_message for new messages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_audit_logA
Fetch recent audit log entries. Filter by action_type (Discord AuditLogEvent enum integer) and/or user_id. Requires View Audit Log permission.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes | ||
| user_id | No | Filter to actions by this user. | |
| action_type | No | Discord AuditLogEvent integer — e.g. 20 = MEMBER_KICK, 22 = MEMBER_BAN_ADD, 24 = MEMBER_UPDATE, 72 = MESSAGE_DELETE, 74 = MESSAGE_BULK_DELETE. See https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object-audit-log-events | |
| before | No | Audit entry ID cursor. | |
| limit | No | 1-100, default 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the permission requirement ('Requires View Audit Log permission'), which is a key behavioral trait for access control. However, it lacks details on rate limits, pagination behavior (beyond the 'before' parameter in schema), error handling, or what the response looks like (since no output schema exists). This leaves gaps in transparency for a 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 front-loaded with the core purpose ('Fetch recent audit log entries'), followed by filtering details and permission requirement in just two sentences. Every sentence earns its place by providing essential information without redundancy, making it appropriately sized and efficient.
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's complexity (5 parameters, no annotations, no output schema), the description is somewhat complete but has gaps. It covers the purpose, filtering, and permission needs, but lacks details on return values, error cases, or behavioral constraints like rate limits. For a tool with moderate complexity and no structured output, more context would improve completeness.
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 description adds meaningful context beyond the input schema by explaining that filtering can be done by 'action_type (Discord AuditLogEvent enum integer) and/or user_id,' which clarifies the purpose of those parameters. With schema description coverage at 80%, the schema already documents most parameters well, but the description enhances understanding of filtering semantics, compensating slightly for the coverage 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?
The description clearly states the tool's purpose with a specific verb ('Fetch') and resource ('recent audit log entries'), and mentions filtering capabilities. However, it doesn't explicitly differentiate from sibling tools like 'discord_get_guild' or 'discord_get_member' which might also retrieve guild-related information, though audit logs are distinct.
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 some context by stating 'Requires View Audit Log permission,' which implies when to use it (when that permission is available). However, it doesn't offer explicit guidance on when to choose this tool over alternatives like 'discord_get_guild' for general guild info or other audit-related tools (none exist in siblings), leaving usage somewhat implied rather than clearly defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_channelB
Fetch details about a single channel — name, type, permission overwrites, parent category, rate limit, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions 'fetch details' but does not specify whether this is a read-only operation, requires permissions, has rate limits, or returns error types. The mention of 'rate limit' in the examples is ambiguous—it could refer to channel settings or API constraints. This leaves critical behavioral traits unclear for a tool that likely interacts with an external API.
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 a single, efficient sentence that front-loads the core purpose ('Fetch details about a single channel') and follows with specific examples. There is no redundant or verbose language, making it easy to parse and understand 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?
Given the tool's moderate complexity (fetching channel details from an external service), no annotations, no output schema, and low schema description coverage, the description is minimally adequate. It covers the purpose and hints at return data but lacks behavioral details, error handling, and explicit parameter guidance. This leaves gaps that could hinder effective tool use in varied contexts.
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 1 parameter with 0% description coverage, so the description must compensate. It does not explicitly mention the channel_id parameter, but implies it by referring to 'a single channel'. However, it adds semantic context by listing the types of details fetched (e.g., name, type, permission overwrites), which helps the agent understand what information will be returned, partially offsetting the lack of schema 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 clearly states the verb 'fetch' and the resource 'details about a single channel', with examples of specific attributes like name, type, and permission overwrites. It distinguishes from sibling tools like discord_list_channels (which lists multiple channels) by specifying 'single channel', but does not explicitly contrast with other read tools like discord_get_message or discord_get_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 provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., needing channel access), compare to discord_list_channels for bulk retrieval, or specify use cases like checking channel settings before modifications. Without such context, the agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_guildC
Fetch details for a single guild — name, icon, owner, member count, features, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes | ||
| with_counts | No | Include approximate member/presence counts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states 'Fetch details' which implies a read-only operation, but doesn't cover critical aspects like authentication requirements, rate limits, error handling, or response format. This is a significant gap for a tool with potential API constraints.
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 a single, efficient sentence that front-loads the core purpose ('Fetch details for a single guild') followed by illustrative examples. Every word earns its place with zero redundancy or unnecessary elaboration.
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 2 parameters, 50% schema coverage, no annotations, and no output schema, the description is incomplete. It doesn't address behavioral aspects like authentication, rate limits, or error cases, nor does it explain the return format. This leaves significant gaps for an AI agent to use 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?
Schema description coverage is 50% (only 'with_counts' has a description). The description adds no parameter-specific information beyond what's implied by 'guild' context. It doesn't explain the 'guild_id' parameter or provide examples, leaving half the parameters undocumented. Baseline 3 is appropriate as the schema covers some ground but description adds minimal value.
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 'Fetch' and resource 'details for a single guild', with examples like name, icon, owner, etc. It distinguishes from siblings like discord_list_guilds (which lists multiple guilds) by specifying 'a single guild', but doesn't explicitly contrast with other fetch tools like discord_get_channel or discord_get_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?
No explicit guidance on when to use this tool versus alternatives is provided. It doesn't mention when to choose this over discord_list_guilds for bulk operations or discord_get_member for user-specific data. The description implies usage for retrieving guild details but lacks context about prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_memberC
Fetch a guild member — nickname, joined_at, roles, communication_disabled_until (timeout), etc.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes | ||
| user_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions what data is fetched but lacks behavioral details: no information on permissions required, rate limits, error handling (e.g., if member not found), or response format. For a read operation with zero annotation coverage, this is a significant gap in transparency.
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 efficiently lists key data fields. It uses a single sentence with no wasted words, making it easy to scan. However, the lack of additional context slightly reduces effectiveness, but it remains appropriately sized.
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 no annotations, no output schema, and 0% schema coverage, the description is incomplete. It covers what data is fetched but misses critical context: parameter details, behavioral traits, error cases, and output structure. For a tool with two required parameters and no structured support, this leaves too many gaps for reliable agent use.
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 0%, so the description must compensate. It doesn't explain the parameters guild_id and user_id at all—no details on format (e.g., numeric IDs), sourcing, or constraints. The description adds no meaning beyond the bare schema, failing to address the coverage 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?
The description clearly states the verb 'Fetch' and resource 'guild member', specifying what data is retrieved (nickname, joined_at, roles, timeout). It distinguishes from siblings like discord_list_members (which lists multiple members) by focusing on a single member lookup. However, it doesn't explicitly contrast with discord_get_guild or discord_get_message, which slightly limits 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?
No explicit guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing guild_id and user_id), when not to use it (e.g., for bulk operations), or direct comparisons to siblings like discord_list_members. Usage is implied by the action 'Fetch', but no contextual rules are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_messageB
Fetch a single message by ID. Useful for reading context before acting.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ||
| message_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It indicates a read operation ('Fetch') and hints at use for context reading, but fails to disclose critical behavioral traits such as permissions needed, rate limits, error handling, or what data is returned. This leaves significant gaps for a tool with no 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?
The description is front-loaded with the core purpose in the first sentence and adds a brief usage hint in the second. Both sentences earn their place by providing essential information without redundancy, making it efficiently structured.
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's complexity (2 parameters, no annotations, no output schema), the description is incomplete. It doesn't cover parameter meanings, return values, error conditions, or behavioral constraints, leaving the agent with insufficient information to use the tool effectively beyond basic intent.
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 0%, so the description must compensate for the two undocumented parameters. It mentions 'by ID' which relates to 'message_id,' but doesn't explain 'channel_id' or provide any details on parameter formats, constraints, or relationships. This adds minimal value beyond the bare 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 the action ('Fetch') and resource ('a single message by ID'), making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'discord_get_channel' or 'discord_list_messages', which would require more specific scope clarification.
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 implied usage context with 'Useful for reading context before acting,' suggesting it's for preparatory reads. However, it lacks explicit guidance on when to use this versus alternatives like 'discord_list_messages' or 'discord_get_channel,' and doesn't mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_get_reactionsA
List users who reacted with a specific emoji on a message. Paginated (default 25, max 100).
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ||
| message_id | Yes | ||
| emoji | Yes | ||
| limit | No | 1-100, default 25. | |
| after | No | User ID cursor for pagination. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: pagination support, default limit (25), and maximum limit (100), which are crucial for usage. However, it does not mention rate limits, permissions required, or error conditions, leaving some gaps in transparency.
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 a single, well-structured sentence that front-loads the core purpose and efficiently adds pagination details. Every word earns its place, with no redundancy or unnecessary elaboration, making it highly concise and clear.
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 no annotations, no output schema, and moderate complexity (5 parameters, 3 required), the description is fairly complete. It covers the tool's purpose, pagination behavior, and key parameter details, but lacks information on return values, error handling, or authentication needs, which could be helpful for an 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 description coverage is low (40%), with only 'limit' and 'after' having descriptions. The description adds value by clarifying that 'limit' is for pagination with a default of 25 and max of 100, which compensates for the low coverage. It does not explain 'channel_id', 'message_id', or 'emoji' beyond their names, but the tool's purpose implicitly defines their roles.
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 ('List users') and resource ('who reacted with a specific emoji on a message'), making the purpose specific and unambiguous. It distinguishes from siblings like discord_add_reaction (adds reactions) and discord_remove_reaction (removes reactions) by focusing on listing users, not modifying 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?
The description implies usage when needing to see who reacted with a particular emoji, but does not explicitly state when to use this tool versus alternatives like discord_get_message (which might include reaction data) or other listing tools. No exclusions or prerequisites are mentioned, leaving some ambiguity for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_kick_userA
Remove a user from the guild. They can rejoin via invite. Requires Kick Members permission.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes | ||
| user_id | Yes | ||
| reason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: the action is destructive (removal), has permission requirements, and mentions the user can rejoin via invite. It doesn't cover rate limits, error conditions, or response format, but provides essential context for a mutation 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?
Two concise sentences with zero waste: first states the core action, second adds crucial context (rejoin possibility and permission requirement). Every word earns its place, and information is front-loaded appropriately.
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 with 3 parameters, 0% schema coverage, and no output schema, the description provides good behavioral context but lacks parameter documentation and return value information. It's adequate for basic understanding but leaves gaps for proper implementation.
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 0%, so the description must compensate. It implies parameters (guild, user, reason through 'Remove a user') but doesn't explicitly name or explain them. The description adds some meaning about the action's purpose but doesn't fully document the 3 parameters beyond what's inferable from the tool name.
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 action ('Remove a user from the guild') and resource ('user'), distinguishing it from siblings like discord_timeout_user (temporary restriction) or discord_remove_role (role removal). It uses precise terminology that matches Discord's API concepts.
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 to use this tool ('Remove a user from the guild') and includes a prerequisite ('Requires Kick Members permission'). However, it doesn't explicitly contrast with alternatives like discord_timeout_user or explain when kicking vs. other moderation actions 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_active_threadsA
List all active (non-archived) threads in a guild.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions the tool lists threads but does not disclose behavioral traits such as permissions required, rate limits, pagination, or response format. This is a significant gap for a tool with no 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?
The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. Every part of the sentence earns its place by specifying the action, resource, and scope.
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 complexity (listing threads in a guild), lack of annotations, and no output schema, the description is incomplete. It does not cover behavioral aspects like permissions, rate limits, or return values, which are crucial for effective tool use.
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 description adds meaning by specifying that the guild_id parameter is used to list threads in a guild. With 0% schema description coverage and only one parameter, this compensates adequately, though it could provide more context (e.g., format of guild_id).
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 action ('List') and resource ('all active (non-archived) threads in a guild'), distinguishing it from siblings like discord_list_channels or discord_list_messages. It precisely defines the scope as 'active (non-archived)' threads, avoiding ambiguity.
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 when needing to list active threads in a guild, but does not explicitly state when to use this tool versus alternatives (e.g., discord_list_channels for channels, discord_list_messages for messages). No exclusions or prerequisites are mentioned, leaving some context gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_list_channelsB
List all channels in a guild (server). Includes text, voice, category, thread channels.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool lists channels, implying a read-only operation, but doesn't mention permissions required, rate limits, pagination, or the format of returned data. This leaves significant gaps for a tool that likely interacts with an external API.
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 a single, efficient sentence that front-loads the core purpose ('List all channels in a guild') and adds clarifying detail ('Includes text, voice, category, thread channels'). Every word earns its place with no redundancy or 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?
Given 1 parameter with no schema descriptions and no output schema, the description is minimally adequate but incomplete. It covers the resource scope but lacks details on permissions, data format, or error handling. For a simple list tool, this might suffice, but the absence of annotations and output schema means more context would be helpful.
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 1 parameter (guild_id) with 0% description coverage, so the description must compensate. It adds meaning by clarifying that guild_id refers to a 'guild (server)', which helps interpret the parameter. However, it doesn't specify the format (e.g., numeric ID) or where to find it, leaving some ambiguity.
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 ('List') and resource ('channels in a guild'), specifying it includes text, voice, category, and thread channels. It distinguishes from siblings like discord_get_channel (singular) and discord_list_active_threads (only threads), but doesn't explicitly contrast with discord_list_guilds or discord_list_members, which operate on different resources.
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?
No explicit guidance on when to use this tool versus alternatives is provided. While the description implies it's for listing all channel types in a guild, it doesn't mention when to choose this over discord_get_channel (for a single channel) or discord_list_active_threads (for threads only), nor does it address prerequisites like needing guild access.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_list_guildsA
List all guilds (servers) the bot is a member of. Useful for multi-server setups.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1-200, default 200. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions the tool lists guilds but lacks behavioral details such as pagination, rate limits, authentication requirements, or error handling. For a read operation with no annotation coverage, this is a significant gap in transparency.
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 concise sentences with zero waste. The first sentence states the purpose, and the second adds contextual value ('Useful for multi-server setups'), making it front-loaded and efficiently structured.
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's low complexity (one optional parameter, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose and usage context but lacks details on behavior (e.g., response format, limitations), leaving gaps for an AI agent to operate 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 has 100% description coverage, with the 'limit' parameter fully documented. The description does not add any parameter-specific information beyond what the schema provides, so it meets the baseline score of 3 for high schema coverage without extra value.
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 ('List') and resource ('all guilds (servers) the bot is a member of'), making the purpose specific and unambiguous. It distinguishes from siblings like 'discord_get_guild' (which retrieves a single guild) by emphasizing 'all guilds' for enumeration.
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 ('Useful for multi-server setups'), indicating when this tool is appropriate. However, it does not explicitly state when not to use it or name alternatives (e.g., 'discord_get_guild' for single guild details), which prevents a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_list_membersA
List members of a guild. Paginate with after cursor (last user ID). Requires the Server Members privileged intent on the bot.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes | ||
| limit | No | 1-1000, default 100. | |
| after | No | User ID cursor for pagination. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it's a read operation (implied by 'List'), requires specific permissions ('Server Members privileged intent'), and supports pagination ('Paginate with `after` cursor'). However, it lacks details on rate limits, error conditions, 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?
The description is front-loaded with the core purpose, followed by essential details (pagination and permission requirement) in two concise sentences. Every sentence earns its place with no wasted words, making it highly efficient and well-structured.
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's moderate complexity (3 parameters, no output schema, no annotations), the description is mostly complete. It covers purpose, pagination, and permissions, but lacks details on response format, error handling, or rate limits. For a list operation with no output schema, this is adequate but not exhaustive.
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 67% (2 out of 3 parameters have descriptions). The description adds value by explaining the pagination mechanism ('after cursor (last user ID)'), which clarifies the schema's 'after' parameter. However, it does not provide additional context for 'guild_id' or 'limit' beyond what the schema offers, meeting the baseline for moderate 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 clearly states the verb ('List') and resource ('members of a guild'), making the purpose specific and unambiguous. It distinguishes from siblings like 'discord_get_member' (singular) and 'discord_list_guilds' (different resource), providing clear 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 description explicitly states when to use this tool ('List members of a guild') and provides context for pagination, but does not specify when not to use it or name alternatives among siblings. It mentions a prerequisite ('Requires the Server Members privileged intent on the bot'), which is helpful guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_list_messagesA
Fetch recent messages from a channel. Paginate with before/after/around cursors. Default limit is 50, max 100.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ||
| limit | No | Number of messages to fetch (1-100, default 50). | |
| before | No | Return messages before this message ID. | |
| after | No | Return messages after this message ID. | |
| around | No | Return messages around this message ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behavioral traits: pagination mechanism (using cursors), default limit (50), and maximum limit (100). However, it doesn't cover other important aspects like rate limits, authentication requirements, error conditions, or what the return format looks like (e.g., message objects with content, timestamps, authors). The description adds value but leaves significant gaps for a tool with no annotation support.
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 perfectly concise and front-loaded: the first sentence states the core purpose, followed by essential behavioral details in subsequent clauses. Every sentence earns its place by providing critical information about pagination and limits without any redundant or vague language. The structure efficiently communicates what's needed in minimal 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?
Given the complexity (5 parameters, no annotations, no output schema), the description is moderately complete. It covers the basic operation, pagination mechanism, and limits adequately. However, for a tool with no output schema, it should ideally describe what the return values look like (e.g., array of message objects with fields). The absence of annotations means the description should also address safety/authentication concerns, which it doesn't. It's sufficient for basic use but incomplete for full agent understanding.
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 80% (4 out of 5 parameters have descriptions), so the baseline is 3. The description adds some context by mentioning that before/after/around are 'cursors' for pagination and specifying the default/max for limit, which complements the schema's numeric range description. However, it doesn't provide additional meaning for channel_id or clarify the mutual exclusivity/relationships between the pagination parameters beyond what the schema already indicates.
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 ('Fetch recent messages') and resource ('from a channel'), making the purpose immediately understandable. It distinguishes itself from siblings like discord_get_message (singular) and discord_send_message, though it doesn't explicitly contrast with discord_bulk_delete_messages which also operates on multiple messages. The description is specific but could be slightly more differentiated from similar list 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?
The description implies usage through mention of pagination parameters (before/after/around) and default/max limits, suggesting when to use this for retrieving message batches. However, it doesn't explicitly state when to choose this over alternatives like discord_get_message for single messages or discord_list_active_threads for thread content. No clear exclusions or prerequisites are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_list_rolesA
List all roles in a guild. Returns role objects sorted by position (highest first).
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the return format ('role objects') and sorting behavior ('sorted by position, highest first'), which is valuable context. However, it lacks details on permissions, rate limits, or pagination, leaving gaps for a 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 front-loaded with the core purpose in the first sentence and adds behavioral detail in the second. Both sentences earn their place with zero waste, making it highly efficient and well-structured.
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's low complexity (one parameter, no output schema, no annotations), the description is mostly complete. It covers purpose, behavior, and parameter context, but could improve by addressing permissions or error handling, though not strictly required for this simple 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?
The schema has 0% description coverage, but the description adds meaning by clarifying that the single parameter 'guild_id' is used to specify the guild for listing roles. Since there is only one parameter, the baseline is 4, and the description provides adequate context without redundancy.
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 action ('List all roles') and resource ('in a guild'), distinguishing it from siblings like discord_list_channels or discord_list_members. It provides precise scope and verb usage.
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 roles in a guild, but does not explicitly state when to use this tool versus alternatives (e.g., discord_get_guild for guild info or discord_get_member for member roles). No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_pin_messageA
Pin a message in a channel. Requires Manage Messages. Channels max 50 pinned messages.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ||
| message_id | Yes | ||
| reason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively adds context beyond basic functionality by specifying permission requirements ('Requires Manage Messages') and a key constraint ('Channels max 50 pinned messages'), which are crucial for understanding limitations and prerequisites. It does not cover response format or error handling, but provides essential operational details.
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 concise and front-loaded, consisting of two sentences that efficiently convey purpose, requirements, and a critical constraint without any wasted words. Every sentence adds value, making it easy to parse and understand 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?
Given the tool's moderate complexity (a mutation operation with permissions and constraints), no annotations, no output schema, and low schema coverage, the description is relatively complete. It covers the core action, prerequisites, and a key limitation, but lacks details on parameters, return values, or error cases. For a tool with these gaps, it provides sufficient context to use it correctly in most 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?
Schema description coverage is 0%, so the schema provides no parameter details. The description does not mention any parameters explicitly, failing to compensate for the coverage gap. However, the purpose implies parameters like channel_id and message_id, and the constraint about max pinned messages hints at potential outcomes, offering minimal semantic context. With 3 parameters and no schema descriptions, this is a baseline score.
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 ('Pin a message') and resource ('in a channel'), using a specific verb and target. It distinguishes from siblings like 'discord_unpin_message' by specifying the opposite operation, and from other message-related tools like 'discord_edit_message' or 'discord_delete_message' by focusing on pinning.
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 to use it ('Pin a message in a channel') and includes prerequisites ('Requires Manage Messages'), which helps guide usage. However, it does not explicitly state when not to use it or name alternatives (e.g., 'discord_unpin_message' for unpinning), missing full sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_remove_reactionA
Remove a reaction. Without user_id, removes the bot's own reaction. With user_id, removes a specific user's reaction (requires Manage Messages).
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ||
| message_id | Yes | ||
| emoji | Yes | ||
| user_id | No | Optional — specific user's reaction to remove. Omit for bot's own. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behavioral traits: the tool's behavior changes based on the presence of user_id (removing bot's own vs. user's reaction) and mentions a permission requirement (Manage Messages for user-specific removal). However, it lacks details on error handling, rate limits, or response format, leaving some gaps.
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 action and efficiently uses two sentences to cover key usage rules and permissions. Every sentence adds value—no wasted words—making it highly concise and well-structured for quick comprehension.
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 complexity (a mutation tool with permission nuances), no annotations, and no output schema, the description does a good job covering essential aspects like purpose, usage, and behavioral traits. However, it omits details on return values, error cases, or side effects, which could be important for full agent understanding in this 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 low at 25%, with only user_id having a description. The description compensates by explaining the semantics of user_id (optional, specifies whose reaction to remove, with implications for permissions) and implies the purpose of other parameters (channel_id, message_id, emoji for targeting). It adds meaningful context beyond the schema, though not exhaustive for all parameters.
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 action ('Remove a reaction') and distinguishes it from siblings like discord_add_reaction and discord_delete_message by focusing on reaction removal rather than addition or message deletion. It specifies the resource (a reaction) and the operation (removal), making the purpose explicit and distinct.
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 guidance on when to use this tool vs. alternatives: it specifies that without user_id, it removes the bot's own reaction, and with user_id, it removes a specific user's reaction (requiring Manage Messages). This clearly differentiates usage scenarios and prerequisites, helping the agent choose correctly based on context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_remove_roleC
Remove a role from a guild member.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes | ||
| user_id | Yes | ||
| role_id | Yes | ||
| reason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('Remove') but doesn't describe what happens after removal (e.g., if it's permanent, requires specific permissions, affects user access, or has rate limits). For a mutation tool with zero annotation coverage, this is a significant gap in transparency.
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 a single, clear sentence that efficiently conveys the core action without unnecessary words. It's front-loaded with the main purpose, making it easy to parse. Every word earns its place, and there's no redundancy or 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?
Given the complexity (a mutation tool with 4 parameters), lack of annotations, and no output schema, the description is incomplete. It doesn't explain the outcome, error conditions, or behavioral details needed for safe and effective use. The minimal description leaves too many gaps for a tool that modifies user roles in a Discord guild.
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 0%, meaning none of the 4 parameters are documented in the schema. The description doesn't add any meaning beyond the parameter names (e.g., what 'guild_id', 'user_id', 'role_id', or 'reason' represent, their formats, or constraints). It fails to compensate for the low schema coverage, leaving parameters largely unexplained.
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 ('Remove') and target ('a role from a guild member'), making the purpose immediately understandable. It doesn't explicitly distinguish from sibling tools like 'discord_add_role' or 'discord_kick_user', but the verb 'Remove' implies a specific operation. It's not tautological with the name 'discord_remove_role' as it elaborates on the action.
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 no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., permissions needed), when not to use it (e.g., for temporary roles vs. permanent removal), or compare it to siblings like 'discord_add_role' or 'discord_kick_user'. Usage is implied by the action but lacks explicit context.
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 new message to a Discord channel. Supports plain text, embeds, replies, and allowed_mentions control. Returns the created message object including its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | Snowflake ID of the target channel. | |
| content | No | Message text (up to 2000 chars). Either content or embeds is required. | |
| embeds | No | Array of Discord embed objects (up to 10). Each embed is a rich card with title, description, fields, color, etc. | |
| reply_to_message_id | No | Optional — reply to this message ID. The message must be in the same channel. | |
| allowed_mentions | No | Control which mentions actually ping. E.g. {"parse": ["users"]} to allow user pings but suppress @everyone. | |
| suppress_embeds | No | If true, no link previews are auto-generated. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('Send a new message') and return value ('Returns the created message object including its ID'), which implies a write operation with output. However, it lacks details on permissions required, rate limits, error conditions, or side effects (e.g., message visibility, notifications), leaving gaps in behavioral context 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?
The description is front-loaded with the core purpose in the first sentence, followed by key features and return value in a second sentence. Every sentence earns its place by adding value (e.g., listing capabilities, specifying output), with zero waste or redundancy, making it efficiently structured and appropriately sized.
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's complexity (6 parameters, mutation operation) and lack of annotations and output schema, the description is partially complete. It covers the basic action, features, and return value, but for a mutation tool, it should ideally include more behavioral context (e.g., permissions, errors) or output details. The schema compensates for parameter documentation, but overall completeness is adequate with clear gaps.
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 6 parameters thoroughly (e.g., channel_id as 'Snowflake ID of the target channel', content with char limits). The description adds minimal value beyond the schema by mentioning 'plain text, embeds, replies, and allowed_mentions control', which loosely maps to parameters but doesn't provide additional syntax or format details. Baseline 3 is appropriate as 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 states the action ('Send a new message') and resource ('to a Discord channel'), distinguishing it from siblings like discord_edit_message (edits existing messages) or discord_send_typing (shows typing indicator). It specifies the tool's capabilities (plain text, embeds, replies, allowed_mentions control) and return value, making the purpose highly specific and differentiated.
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 context by listing supported features (e.g., embeds, replies), which helps an agent decide when to use this tool versus alternatives like discord_edit_message for updates or discord_send_typing for non-message actions. However, it lacks explicit when-not-to-use guidance or direct sibling comparisons, such as clarifying that discord_bulk_delete_messages is for removal, not sending.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_send_typingA
Trigger the "bot is typing…" indicator in a channel for about 10 seconds. Useful before sending a long-form response so users know the bot is working.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior (triggers a typing indicator for ~10 seconds) and its purpose (user feedback during processing). However, it lacks details on potential limitations like rate limits, permissions required, or error conditions, which would be helpful 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?
The description is highly concise and front-loaded, with two sentences that each serve a clear purpose: the first defines the action and duration, and the second provides usage guidance. There is no wasted text, making it efficient for an AI agent 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 tool's low complexity (1 parameter, no output schema, no annotations), the description is mostly complete for its purpose. It explains what the tool does, when to use it, and behavioral traits. However, it lacks parameter details and does not cover potential side effects or error handling, which are minor gaps for such a simple 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?
The input schema has 0% description coverage, but the description does not mention the 'channel_id' parameter at all. While the tool has only one parameter, the description fails to add any semantic context beyond what the schema's property name implies, missing an opportunity to clarify what channel_id represents (e.g., a Discord channel ID).
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 action ('Trigger the "bot is typing…" indicator') and resource ('in a channel'), distinguishing it from siblings like discord_send_message. It explicitly mentions the duration ('for about 10 seconds'), which adds precision beyond a generic typing indicator.
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 guidance on when to use this tool ('Useful before sending a long-form response so users know the bot is working'), including a specific scenario and alternative context (i.e., use it before discord_send_message for long responses). This clearly differentiates it from other messaging-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_timeout_userA
Timeout a user — they cannot send messages, react, or join voice. Up to 28 days. Pass duration_seconds=0 to remove an existing timeout. Requires Moderate Members permission.
| Name | Required | Description | Default |
|---|---|---|---|
| guild_id | Yes | ||
| user_id | Yes | ||
| duration_seconds | Yes | Timeout length (0 to clear, max 2419200 = 28 days). | |
| reason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and effectively discloses key behavioral traits: it specifies the action is a timeout (not read-only), mentions the 28-day maximum duration, explains how to clear a timeout, and states the required permission. It lacks details on error handling or response format, but covers essential operational context.
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, followed by key details in a logical flow: effects, duration, special case, and permission requirement. Every sentence adds value with no wasted words, making it highly 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 no annotations and no output schema, the description does well by covering purpose, usage, key parameters, and permissions. It could improve by mentioning error cases or response structure, but it's largely complete for a mutation tool with moderate 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 low at 25%, but the description adds significant meaning: it explains that duration_seconds=0 clears a timeout and notes the 28-day max, which clarifies beyond the schema's basic description. It doesn't detail guild_id or user_id semantics, but compensates well for the coverage 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?
The description clearly states the specific action ('Timeout a user') and the effects ('they cannot send messages, react, or join voice'), distinguishing it from sibling tools like discord_kick_user or discord_remove_role by specifying timeout functionality rather than removal or role management.
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 provides explicit guidance on when to use this tool ('Timeout a user') and when not to (e.g., for removal use discord_kick_user), including prerequisites ('Requires Moderate Members permission') and special cases ('Pass duration_seconds=0 to remove an existing timeout').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discord_unpin_messageC
Unpin a previously pinned message.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ||
| message_id | Yes | ||
| reason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('Unpin') but doesn't describe permissions required (e.g., manage messages), side effects (e.g., message remains in channel), error conditions, or response format. For a mutation tool with zero annotation coverage, this leaves significant gaps in understanding how it behaves.
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 a single, efficient sentence that gets straight to the point with zero wasted words. It's front-loaded with the core action and resource, making it easy to parse quickly. Every word earns its place by conveying essential 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?
Given the tool's mutation nature, lack of annotations, no output schema, and 0% schema description coverage for 3 parameters, the description is incomplete. It states what the tool does at a high level but omits critical details about inputs, permissions, behavior, and results, leaving the agent with insufficient context to use it 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?
Schema description coverage is 0%, so the description must compensate by explaining parameters, but it adds no information beyond the action. It doesn't mention 'channel_id', 'message_id', or 'reason', leaving all three parameters undocumented. The description fails to provide any semantic context for what these inputs mean or how they should be used.
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 ('Unpin') and the resource ('a previously pinned message'), making the purpose immediately understandable. It doesn't explicitly differentiate from sibling tools like 'discord_pin_message' or 'discord_delete_message', but the verb 'Unpin' is specific enough to imply its unique function within the Discord API context.
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 no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a pinned message first), compare it to 'discord_pin_message' for pinning operations, or clarify when unpinning is appropriate versus deleting a message. The agent must infer usage from the tool name alone.
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.
26 tool updates
v0.1.0- First observed
discord_add_reaction - First observed
discord_add_role - First observed
discord_bulk_delete_messages - First observed
discord_create_thread - First observed
discord_delete_message - First observed
discord_edit_message - First observed
discord_get_audit_log - First observed
discord_get_channel - First observed
discord_get_guild - First observed
discord_get_member - First observed
discord_get_message - First observed
discord_get_reactions - First observed
discord_kick_user - First observed
discord_list_active_threads - First observed
discord_list_channels - First observed
discord_list_guilds - First observed
discord_list_members - First observed
discord_list_messages - First observed
discord_list_roles - First observed
discord_pin_message - First observed
discord_remove_reaction - First observed
discord_remove_role - First observed
discord_send_message - First observed
discord_send_typing - First observed
discord_timeout_user - First observed
discord_unpin_message
TDQS
Most tools have distinct purposes targeting specific Discord resources and actions, such as send_message vs. edit_message or kick_user vs. timeout_user. However, some overlap exists: add_reaction and remove_reaction are clear, but get_reactions could be confused with list_messages for reading message content, and list_active_threads vs. create_thread might cause minor ambiguity in thread management scenarios.
All tools follow a consistent snake_case naming pattern with a clear verb_noun structure, such as discord_send_message, discord_get_channel, and discord_list_members. The naming is predictable and uniform across all 26 tools, making it easy for agents to understand and select the appropriate tool.
With 26 tools, the count is on the higher side for a Discord bot server, which may feel heavy and potentially overwhelming for agents. While Discord's API is feature-rich, this many tools could lead to decision paralysis or misselection, though it does cover a broad range of functionalities from messaging to moderation.
The tool set provides comprehensive coverage for core Discord bot operations, including CRUD for messages, roles, and members, as well as moderation actions like kick and timeout. Minor gaps exist, such as no tools for editing roles or managing invites, but agents can still handle most common workflows effectively without significant dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Augments MCP Server - A comprehensive framework documentation provider for Claude Code
An MCP server that integrates with Discord to provide AI-powered features.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that allows Claude to interact with Discord by providing tools for sending/reading messages and managing server resources through Discord's API.19348MIT
- AlicenseAqualityDmaintenanceAn MCP server that provides native Discord tools for Claude Code, enabling bidirectional communication with remote agents or humans via the Discord REST API. It allows users to send messages, read channel history, and manage reactions directly from their local environment.6193MIT
- AlicenseNot gradedqualityDmaintenanceComprehensive Discord MCP server with 66 tools that provides rich message context including emoji reactions, thread indicators, and attachment metadata inline. Enables AI assistants to interact with Discord servers for messaging, moderation, roles, channels, and more.3481MIT
- AlicenseAqualityDmaintenanceAn MCP server that enables LLMs to control Discord servers via a bot token, providing comprehensive management tools for messages, members, roles, channels, permissions, and more.67130MIT
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/devli13/mcp-discord'
If you have feedback or need assistance with the MCP directory API, please join our Discord server