An MCP server that provides Discord bot integration capabilities, allowing agents to register Discord bots, send messages, retrieve message history, and manage Discord interactions.
Discord MCP server has basic tool definitions with descriptions and schemas present, but exhibits several quality gaps. All 4 tools have descriptions (meeting the baseline minimum), and input schemas are visible. However, descriptions are moderately detailed but lack explicit guidance on when to use each tool, error recovery, and prerequisites. Parameter descriptions are adequate but inconsistent. Output schemas are not documented, tools return string confirmations or error messages rather than structured objects. Error handling is present in implementation but not described in tool specs. The server has appropriate separation of concerns (register_discord_bot, send_message, get_channel_messages, get_bot_id) and names follow verb_noun convention. No critical security gaps visible in tool definitions (secrets are not exposed as parameters), but audit logging is not addressed in the rubric requirements.
Returns the Discord bot's user ID for a given bot token. This is useful for identifying which specific bot instance is running. This tool does not require the bot to be fully logged in, but it does a quick check to get the bot's ID from Discord's API.
Retrieves the recent message history from a specified Discord channel using the specified bot. This tool is useful for fetching context from a Discord conversation or reviewing past messages. The bot must have permission to read message history in the specified channel.
Registers and starts a new Discord bot client with the provided token. This tool should be called by the agent manager when an agent requires Discord capabilities. Returns the Discord bot's user ID once it's successfully logged in.
Sends a text message to a specific Discord channel using the specified bot. Use this tool when the user explicitly asks to send a message to a Discord channel or user. The bot must have permission to send messages in the specified channel.
Output schemas not documented. All tools return plain strings rather than structured objects with typed fields. LLMs cannot predict response structure or extract relevant fields for downstream tool calls. For example, register_discord_bot returns a bot_id string, but send_message and get_channel_messages need that bot_id, the response should explicitly indicate it's the value to pass to subsequent tools.
Parameter 'limit' in get_channel_messages lacks explicit constraints (min/max range). Description says 'default is 10' but does not specify upper bound. Unbounded parameters invite LLMs to pass absurd values (e.g. limit=999999) that could timeout or overload Discord API.
Tool descriptions do not explain error recovery or prerequisites. E.g., send_message states 'The bot must have permission to send messages in the specified channel' but does not explain what happens if permission is missing or guide the LLM on recovery (ask user, check permissions, use a different bot). This forces the LLM to guess on failures.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 58 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 46 | - | v1 |
get_bot_id description is vague: 'This tool does a quick check to get the bot's ID from Discord's API' does not clarify when to use it vs register_discord_bot. Both accept bot_token; the difference in use case is unclear. LLMs may call both redundantly.
send_message returns a generic string error response instead of structured error classification. Per the rubric, errors should categorize as retryable, user-fixable, or fatal so the LLM knows whether to retry, ask the user, or abort. Current implementation returns 'Error sending message by bot {bot_id}: {e}' with no guidance.