Model Context Protocol (MCP) server enabling AI assistants to interact with Discord through a bot. Send messages, manage channels, and read chat history securely via Docker MCP Gateway.
Discord MCP server has 8 tools with basic schemas and descriptions, but significant quality gaps. All tools have descriptions (10-50 chars, mostly short), and input schemas are present with parameter types. However, descriptions are generic and lack LLM-optimized guidance on WHEN to use each tool or what happens next. Parameter descriptions are minimal (e.g., 'The ID of the Discord channel' repeated 5 times). No output schemas documented. Error handling returns formatted strings but lacks recovery guidance or error classification. No tool annotations (readOnlyHint, destructiveHint) despite clear risk levels. Missing idempotency guidance for write operations. Naming is verb-first and clear (send_message, get_channel, delete_message), which is good. However, parameter naming inconsistencies: 'limit' is a string type (should be integer), and 'channelId' vs 'guildId' use camelCase inconsistently with Discord API conventions.
Create a new channel in a guild
Delete a message from a channel
Edit a message in a channel
Get information about a Discord channel
Get recent messages from a channel
List all channels in a guild
List all guilds (servers) the bot is in
Descriptions are too short (10-50 chars) and lack LLM-optimized guidance. Missing WHEN to use each tool, prerequisites, and what happens next. Baseline for A+ tools is 50-200 chars with clear intent.
No output schemas documented. LLMs cannot plan downstream calls or extract required fields. All tools return free-text strings instead of structured JSON.
Parameter 'limit' in get_messages is typed as string but should be integer. Type mismatch invites LLM errors and validation failures.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | <=2025-11-25 | v2 |
Send a message to a Discord channel
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. Destructive tools (delete_message, edit_message) lack confirmation or dry-run support.
Error handling returns formatted strings but lacks recovery guidance. Errors do not classify as retryable, user-fixable, or fatal. LLM cannot determine next action.