A Dart implementation of the server half of the Model Context Protocol, supporting tools, resources, prompts, and other MCP capabilities over Streamable HTTP with Server-Sent Events
Three tools with complete schemas and basic descriptions. echo and roll_dice have minimal descriptions (under 50 chars); add_note lacks parameter descriptions entirely. All tools have proper JSON Schema with types and constraints. Tool annotations present (readOnlyHint/destructiveHint) but descriptions do not explain when to use each tool or what they return. No output schemas documented. Error handling guidance absent.
Stores a note and returns a link to it.
Echoes its input back.
Rolls a number of dice with the given number of sides.
Parameter descriptions missing for add_note (id, text). LLMs cannot infer what 'id' means, is it a note UUID, user ID, or slug? Descriptions are required for every parameter.
Tool descriptions are too brief (echo: 24 chars, roll_dice: 60 chars, add_note: 42 chars). Baseline is 194 chars. Descriptions lack context on WHEN to use each tool, WHAT it returns, and any prerequisites. LLMs cannot reliably select tools with minimal descriptions.
No output schemas documented. LLMs need to know what fields to expect (e.g., does roll_dice return {result: number} or {rolls: [number], total: number}?). This forces LLMs to guess and wastes tokens parsing unstructured responses.
No error handling guidance. If add_note fails (duplicate ID, storage error), the tool should return actionable recovery hints. Raw errors give LLMs nothing to act on.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2025-06-18+ | v2 |
roll_dice 'sides' parameter defaults to 6 but lacks description explaining the default behavior. LLMs may not realize the default applies when omitted.