Manage your entire Discord server from Claude Code, Claude Co-Work, Claude Desktop, Cursor, or Windsurf via MCP. 139 admin tools across 20 categories.
The server registers 20 tools with explicitly visible schemas and descriptions in src/tools/server.ts and src/tools/automod.ts. Most tools have moderate-quality descriptions (100-250 chars), proper naming with action verbs, and JSON Schema input definitions. However, several critical gaps prevent a higher score: (1) output schemas are undocumented, tools lack explicit response field definitions, forcing LLMs to infer structure; (2) parameter descriptions are present but often generic, lacking format/range constraints that would guide LLM input validation (e.g., 'limit' has no min/max stated); (3) error handling guidance is absent, tools provide no recovery hints; (4) some parameter relationships are undocumented (e.g., create_automod_rule has 4 mutually exclusive trigger types but no explicit 'choose exactly one' language); (5) many parameters accept IDs but do not document whether fuzzy name matching applies (only 'channel' and 'emoji' explicitly note fuzzy matching). Per-tool scores average 56 - 62, clustering in the fair-to-good range. This is typical of community-maintained MCP servers that prioritize breadth (20 tools) over depth (complete, LLM-optimized schemas).
Create a new auto-moderation rule in the Discord server. Supports keyword filtering, spam detection, keyword presets, and mention spam prevention.
Generate a new invite link for a specific channel. Channel name is fuzzy-matched.
Delete an auto-moderation rule from the Discord server.
Remove an integration from the server by its ID.
Revoke an active invite link by its invite code.
Modify an existing auto-moderation rule. Only specified fields will be updated.
Output schemas completely undocumented. No tool documents what fields are returned, their types, or nested structures. Forces LLMs to infer and causes errors when chaining tools or extracting data.
Numeric parameters lack bounds. 'limit' in get_audit_log has no min/max constraint stated (should be 1 - 100 per description). Unbounded numbers let LLMs pass absurd values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 60 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 45 | - | v1 |
Modify server settings such as name, description, verification level, and default notification settings.
Fetch recent audit log entries for the server. Optionally filter by action type or user.
Get details about a specific invite code, including guild info, channel, inviter, usage stats, and expiration.
Get the server icon, banner, splash, and discovery splash image URLs.
Get the server vanity URL if the server has the VANITY_URL feature.
Get the server welcome screen configuration including description and channels.
Get the server widget settings including whether it is enabled and which channel it uses.
List all auto-moderation rules in the Discord server. Returns rule details including triggers, actions, and exemptions.
View all banned users in the server along with their ban reasons.
List all integrations (bots, apps) connected to the server.
List all active invite links for the Discord server, including usage stats and expiration info.
Set the server icon or banner from a URL.
Configure the server welcome screen with a description and featured channels.
Configure the server widget settings.
Fuzzy name matching documented inconsistently. 'channel' explicitly states fuzzy matching in create_invite, set_welcome_screen, set_widget, but other ID parameters (role_id, channel_id in automod tools) do not clarify whether fuzzy matching or strict ID lookup applies.
Mutually exclusive parameters not documented. create_automod_rule accepts 'keywords', 'regexPatterns', and 'presets', only one should apply per triggerType, but schema and description do not enforce this. LLMs will pass multiple, causing validation errors.
Error handling guidance absent. No tool provides recovery hints (e.g., 'Channel not found. Try list_channels() to see available channels'). Raw errors force LLM to blindly retry or give up.
No pagination guidance for list tools. list_invites, list_bans, list_integrations, list_automod_rules lack limit/offset parameters and total count in responses. Large server could return thousands of records, exhausting context window.
Destructive operations lack confirmation mechanism. delete_invite, delete_integration, delete_automod_rule are marked DESTRUCTIVE but have no dry-run or confirmation flow. Agent could accidentally delete rules or integrations.
Parameter descriptions lack format/constraint hints. Many string parameters (e.g., 'emoji', 'reason', 'description') lack guidance on valid formats, length limits, or special character restrictions. LLMs cannot read JSON Schema constraints, they rely on description text.