Cloudflare Worker providing Discord REST API as MCP tools with secret-path authentication
21 tools with complete input schemas and descriptions. Naming follows verb_noun convention consistently (discord_read_*, discord_send_*, discord_delete_*). Descriptions are present but brief (avg ~60 chars, below 194-char baseline). Parameters have types and descriptions. Critical gaps: no output schemas documented, no error handling guidance, no pagination support for list operations, missing parameter constraints (e.g., limit ranges not enforced in schema), no idempotency hints for destructive operations. Destructive tools (delete_message, bulk_delete_messages, delete_channel) lack confirmation/dry-run patterns. Composition is sound, tools are single-responsibility and chainable.
Add an emoji reaction to a message
Bulk delete messages (2-100, must be <14 days old). Requires MANAGE_MESSAGES.
Create a new channel in a guild
Delete a channel
Delete a Discord message
Edit channel properties (name, topic, NSFW, etc.)
Edit a message sent by the bot
No output schemas documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., message_id from send_message, channel_id from create_channel). Baseline: 100% of A+ tools document return types.
Destructive tools (delete_message, bulk_delete_messages, delete_channel) lack confirmation/dry-run patterns. Agents can accidentally delete data without safeguards. Pattern: confirmation-request.
List operations (discord_read_messages, discord_list_channels, discord_list_servers) lack pagination support. No offset/cursor, no total_count, no next_cursor. Large result sets will blow context window.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
Get all reactions on a message
Get all pinned messages in a channel
List all channels in a guild/server
List all Discord servers the bot is in
Pin a message to a channel
Read DM message history with a user
Read message history from a Discord channel
Remove a reaction from a message. Omit user_id to remove the bot's own reaction.
Send a direct message to a user
Send a rich embed message to a channel
Send a message to a Discord channel
Set permission overwrites for a role or user on a channel
Set slowmode rate limit for a channel (0 to disable)
Unpin a message from a channel
Parameter constraints not enforced in schema. 'limit' accepts 1-100 but schema has no minItems/maxItems. 'seconds' in discord_set_slowmode accepts 0-21600 but no min/max in schema. LLMs may pass invalid values.
No error handling guidance. Tools lack recovery hints (e.g., 'Channel not found. Try discord_list_channels() to find valid IDs.'). Agents cannot self-correct on failures.