Run Codex on Discord — one MCP server, 23 tools, full Discord control from your AI
24 tools with consistent naming (verb_noun pattern) and present descriptions, but significant gaps in schema completeness and parameter documentation. All tools have descriptions (10-200 chars, baseline 194), but 18 of 24 lack documented output schemas. Parameter descriptions are present but sparse (avg 40-60 chars vs baseline 72). No tool annotations (readOnlyHint/destructiveHint). Error handling is minimal, most tools return raw Discord.js errors without recovery guidance. Schemas are present but incomplete: many parameters lack type constraints (e.g., 'limit' has no min/max), and no enums for constrained values (e.g., auto_archive_minutes accepts only 60|1440|4320|10080 but is not declared as enum). No idempotency guidance for write operations. Composition is sound, tools chain well (e.g., discord_read returns message IDs for discord_reply), but no batch variants for common loops.
Create a new text channel in a server.
Edit a channel's name or topic.
Get detailed information about a channel.
List all channels in a server.
Delete a message (bot's own or others if permitted).
Edit a message sent by the bot.
Send a formatted embed message to a channel.
No output schemas documented. LLMs cannot predict response structure or plan downstream tool calls. E.g., discord_read returns message objects but structure is not declared.
Numeric parameters lack min/max constraints. 'limit' in discord_read accepts 1-50 but schema does not enforce bounds; LLMs may pass 0, 1000, or negative values.
Enum values not declared in schema. discord_thread_create 'auto_archive_minutes' accepts only 60|1440|4320|10080 but is typed as 'number' without enum constraint. LLMs will hallucinate invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Get information about a server.
List all servers the bot is in.
Get information about a specific member.
List members in a server.
Add a reaction emoji to a message.
Read recent messages from a channel. Returns message IDs for use with other tools.
Reply to a specific message in a channel.
Assign a role to a member.
Create a new role in a server.
List all roles in a server.
Remove a role from a member.
Search messages in a channel by content (simple text match).
Send a message to a Discord channel.
Create a new thread from a message or in a channel.
List active threads in a channel or guild.
Create a webhook in a channel.
List webhooks in a channel.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot distinguish safe reads from destructive writes. discord_delete and discord_role_remove are marked DESTRUCTIVE in metadata but not in schema.
Error handling returns raw Discord.js exceptions without recovery guidance. E.g., 'Channel not found' should suggest 'Call discord_channel_list() to see available channels.' No categorization of retryable vs fatal errors.