A tiny Model Context Protocol (MCP) server for saving, listing, searching, and deleting text notes, over stdio.
Four tools with clear verb-noun naming (add_note, list_notes, search_notes, delete_note). All have descriptions (34 - 72 chars, within baseline range). All have Zod input schemas with parameter descriptions. However, output schemas are undocumented, LLMs cannot predict response structure. Error handling is minimal: delete_note returns a text message for 'not found' rather than a structured error with recovery guidance. No pagination support on list_notes despite potential for large result sets. Parameter descriptions are adequate but lack format/constraint details (e.g., 'text' param has no length limit guidance).
Save a short text note for later. Returns the new note's id.
Delete a saved note by its id.
List all saved notes.
Find saved notes containing the given text (case-insensitive).
Output schemas undocumented. All tools return { content: [{ type: 'text', text: string }] } but LLMs cannot infer this structure. Responses should document field types and meanings.
list_notes lacks pagination. No limit, offset, or page parameters. Large note collections will blow context windows. Should support limit (default 20) and offset parameters.
Error handling is unstructured. delete_note returns plain text 'No note with id #X' instead of a structured error with recovery guidance (e.g., 'Try list_notes to see available IDs').
Parameter 'text' in add_note has no length constraints documented. LLMs may pass arbitrarily large strings. Should specify max length (e.g., 'max 1000 chars').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
list_notes description is generic ('List all saved notes'). Does not explain when to call it vs search_notes, or that it returns all notes without pagination.