Production-grade MCP server for Discord using FastMCP and discord.py
Server has 25 tools with consistent naming conventions (verb_noun pattern) and complete input schemas across all tools. Descriptions are present and functional, though somewhat brief (averaging ~40-60 chars). Parameter definitions include types and descriptions. However, output schemas are not documented, the source shows only input schemas but no return type specifications in the code. Error handling is minimal, with no recovery guidance or actionable error messages. Tool naming is clear but some semantic overlap exists (e.g., configure_channel_permissions vs set_channel_permissions are both present but unnamed differently in import). Missing: output schema documentation, error classification, confirmation patterns for destructive ops, dependency hints in descriptions.
Assign a role to a guild member
Clear permissions for a channel target
Configure permissions for a category
Configure permissions for a channel
Create a category in a guild
Create a new role in a guild
Create a text channel in a guild
Output schemas not documented. Tools define inputs with full type schemas (JSON Schema), but return types are not visible in the source code. LLMs cannot predict what fields will be available for chaining downstream tool calls.
Destructive tools (remove_channel, remove_role_from_guild, delete operations) lack confirmation/dry-run patterns. No guidance on whether operations are retryable or irreversible. Agents may execute destructive actions without user approval.
Brief descriptions (30-60 chars) lack context about when to use tools vs alternatives. E.g., 'Get information about a channel' (same as 'List all channels') does not guide LLM selection. No dependency hints (e.g., 'Call list_guilds() first to find guild_id').
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 60 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Create a voice channel in a guild
Edit a category
Edit a text channel
Edit a voice channel
Get information about a channel
Get information about a role
Inspect effective permissions for a role
List all channels in a guild
List all guilds the bot is in
List all roles in a guild
Modify a role
Move a channel to a category
Delete a channel
Delete a role from a guild
Remove a role from a guild member
Update permissions for a role
View permissions for a category
View permissions for a channel
Permission parameters ('allow', 'deny' in configure_channel_permissions) accept arbitrary permission flag strings without enum constraints or validation guidance. LLMs may pass invalid Discord permission names.
Semantic naming overlap: 'create_new_role' exists alongside role creation via 'create_role' import; 'configure_channel_permissions' vs 'set_channel_permissions' in imports suggest duplicate intent. No clear distinction in tool list.
Parameter 'target_type' in permission tools ('user' or 'role') is a free-form string, should be an enum constraint to prevent invalid values like 'webhook' or 'bot'.