A Model Context Protocol server for Discord — lets Claude interact with Discord servers
discord-mcp has 13 tools with consistent naming (verb_noun pattern: get_, list_, send_, edit_, delete_, pin_, add_, remove_). All tools have descriptions (avg 65 chars, baseline 194 chars, below target). Input schemas are present and properly typed for all tools. However, parameter descriptions are minimal (e.g., 'Server ID', 'Channel ID') and lack context about constraints, formats, or when to use each tool. Output schemas are not documented, LLMs cannot predict response structure. Error handling exists (McpError with ErrorCode) but lacks recovery guidance. No tool annotations (readOnlyHint, destructiveHint) despite clear risk stratification (READ_ONLY, WRITE, REVERSIBLE, DESTRUCTIVE). Missing pagination guidance for list_* tools and get_messages.
Add a reaction emoji to a message
Delete a message
Edit one of your own messages
Get information about a specific channel
Get detailed information about a Discord server
Get information about the connected Discord account
Retrieve recent messages from a channel
Output schemas not documented. LLMs cannot predict response structure (e.g., what fields formatMessage() returns, pagination behavior for list_* tools). This forces agents to guess and risks context loss.
Parameter descriptions are minimal (e.g., 'Server ID', 'Channel ID') and lack format/constraint guidance. No mention of valid ranges, formats, or when to use optional params (before/after in get_messages). Baseline: 72 chars per param; these average ~15 chars.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
List all channels in a Discord server
List all Discord servers the account is in
Pin or unpin a message
Remove a reaction emoji from a message
Send a rich embed message to a channel
Send a message to a channel
No tool annotations despite clear risk stratification. Tools marked DESTRUCTIVE (delete_message) or WRITE (send_message, send_embed) lack readOnlyHint/destructiveHint/idempotentHint annotations. Agents cannot infer safety properties from tool definitions.
Pagination not documented for list_* tools and get_messages. No mention of limits, offsets, or how to fetch all results. get_messages accepts 'before' and 'after' but no guidance on cursor semantics or default behavior.
Error handling lacks recovery guidance. McpError is thrown but messages are generic (e.g., 'Discord API error 404: ...'). No actionable next steps for agents (e.g., 'Channel not found. Try list_channels() to see available channels.').