Server has 2 tools with explicit definitions and schemas visible in src/index.ts. Both tools have descriptions (18 - 27 chars) and input schemas with documented parameters. However, descriptions are extremely brief (below the 34-char baseline for p10), lacking actionable context on WHEN to use each tool or multi-step workflows. Parameter descriptions are minimal (10-30 chars). No output schema is documented, the code returns text blobs without structured field definitions. read-messages returns JSON.stringify() without specifying the shape of the array or field names. Error handling is present but lacks recovery guidance (e.g., 'Channel not found' errors list available channels but don't suggest which to try). No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite send-message being a write operation. The server uses proper validation with Zod and catches errors, but error messages don't guide the LLM toward remediation. Schema format is correct JSON Schema with types and required fields. Naming is verb-first and clear (send-message, read-messages), following conventions. No security issues detected, no secrets in parameters, proper permission checks via Guild/Channel membership. Composition is sound: two single-responsibility tools. However, parameter re-use (server, channel across both tools) could be better documented as an optional multi-step pattern.
Read recent messages from a Discord channel
Send a message to a Discord channel
Tool descriptions are extremely brief (18 - 27 characters), below the p10 baseline of 34 chars. They lack actionable context on WHEN to use the tool, prerequisites, or multi-step workflows.
Output schema is not documented. read-messages returns JSON.stringify(formattedMessages) without specifying the field structure (channel, server, author, content, timestamp). send-message returns text without indicating Message ID format or subsequent chain fields. LLMs cannot infer downstream tool parameters.
send-message is a destructive/write operation but has no tool annotation (destructiveHint: true) to warn the LLM and agent frameworks that this operation has side effects and should not be retried blindly.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 52 | - | v1 |
Parameter descriptions are 10 - 30 characters and lack format guidance. Example: 'server' description is 'Server name or ID (optional if bot is only in one server)', clear, but 'channel' is just 'Channel name (e.g., "general") or ID' and uses an inline example value that LLMs may reuse literally. Parameter constraints (min/max for limit) are present in Zod validation but not exposed in the ListTools response schema.
Error recovery guidance is minimal. Errors that list available guilds or channels (e.g., 'Channel "xyz" not found. Available channels: ...') are helpful, but error messages do not tell the LLM what tool to call next or whether the error is retryable, user-fixable, or fatal.