A Model Context Protocol server implementing a simple note-taking system with resources, tools, and prompts
Single tool 'create_note' has a properly structured JSON Schema with typed parameters (title, content both strings) and clear descriptions. However, the tool lacks critical production-quality details: no output schema documentation, no error handling guidance, no idempotency hints, and no indication of side effects. The description is minimal (14 chars) and does not explain when to use this tool or what happens on retry. Parameter descriptions are present but generic. No validation of input constraints (e.g., max title length). The tool is write-only with no corresponding read/update/delete operations, limiting composability.
Create a new note
Tool description is too short (14 chars: 'Create a new note'). Does not explain when to use it, what happens on retry, or side effects. LLMs cannot determine if this is idempotent or if repeated calls create duplicates.
No output schema documented. Callers cannot predict the response structure. Code shows response is {content: [{type: 'text', text: string}]}, but this is not declared in the tool definition.
No error handling guidance. If title or content is empty, the tool throws 'Title and content are required', but the LLM has no recovery path. Should suggest alternatives or clarify constraints.
No idempotency or side-effect declaration. Tool modifies state (writes to notes object) but description does not warn that repeated calls with same input create duplicate notes with different IDs. Agents may retry on ambiguous failures, causing data duplication.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 44 | 2026-07-28+ | v2 |
Parameter descriptions lack format/constraint details. 'Title of the note' and 'Text content of the note' do not specify max length, character restrictions, or required format. LLMs may pass excessively long or invalid input.