Discord MCP Server on Cloudflare Workers - Full Discord API access via Model Context Protocol. Provides complete Discord API access through MCP tools for server/guild management, channel operations, message operations, reactions, and webhooks. Deploys to Cloudflare Workers with SSE transport.
The Discord Cloud MCP has adequate tool definitions with mostly complete schemas and descriptions, but exhibits several patterns that fall short of production quality. All 9 tools are explicitly registered with names, descriptions, and Zod schemas. Tool naming follows verb_noun convention (list, get, read, send, delete, search, add, remove), which is appropriate. Descriptions are present and contextually relevant (avg ~80 chars), though several lack actionable recovery guidance. Parameters are generally well-typed (using Zod), but descriptions are sparse (avg ~50 chars per param). Output is uniformly returned as JSON text wrapped in MCP TextContent, avoiding the need for complex response parsing. However, error handling is minimal, most failures return raw Discord API errors without guidance on next steps. No tool annotations (readOnlyHint/destructiveHint) are declared despite clear risk classifications in the spec. Response schemas are not formally documented for downstream tool composition. The discord_add_multiple_reactions tool exhibits 'and' naming anti-pattern but is forgivable given functional necessity.
Adds multiple emoji reactions to a message
Adds an emoji reaction to a message
Deletes a message from a Discord channel
Retrieves detailed information about a Discord server including channels and member count
Lists all Discord servers the bot is a member of
Retrieves messages from a Discord text channel
Missing tool annotations despite clear risk classifications. discord_delete_message and discord_send have DESTRUCTIVE/WRITE risk but lack destructiveHint annotations. discord_list_servers, discord_get_server_info, discord_read_messages, discord_search_messages are READ_ONLY but lack readOnlyHint.
Error handling returns raw Discord API errors without recovery guidance. When discordRequest fails, responses return bare JSON error objects (e.g. 'Discord API error 404: ...') that do not tell the LLM what to do next or whether to retry.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 73 | 2026-07-28+ | v2 |
Removes an emoji reaction from a message
Searches for messages in a Discord server
Sends a message to a Discord text channel
discord_add_multiple_reactions violates single-responsibility naming with 'and' in the name. Suggests bundling of two concerns (add_reaction × multiple). While functionally reasonable for batch efficiency, the naming should be consistent, either separate add_reaction per emoji and provide as batch, or rename to reflect the batch nature (e.g. 'add_reactions_batch').
Sparse parameter descriptions. Many parameter descriptions lack context about expected format, valid ranges, or dependencies. E.g., 'emoji' param in discord_add_reaction has no guidance on Unicode format, custom emoji syntax, or valid values.
Output schemas not formally documented. All tools return JSON text without explicit schema documentation for downstream tool composition. An LLM cannot plan multi-step operations if it does not know the structure of returned fields (e.g., guild.id, guild.name, channels[].id).
No pagination support for list endpoints. discord_list_servers returns all guilds without limit/offset. If a user has hundreds of servers, context window bloat is likely. discord_read_messages does support limit (1-100, default 50), which is reasonable, but discord_list_servers does not.
Irreversible operations (discord_delete_message) lack confirmation mechanism. discord_delete_message immediately deletes without a dry-run or confirmation step. An LLM mistake could permanently remove important messages.