MCP server for managing todo items with dual interface support (MCP protocol and REST API)
Server defines 5 tools with explicit schemas and basic descriptions. All tools have input schemas with type definitions and required fields properly declared. However, descriptions are minimal (10-40 chars), parameter descriptions lack context about constraints and expected formats, and output schemas are not documented. No error handling guidance, no parameter validation rules, and no indication of idempotency or side effects. Naming follows verb_noun convention (create_todo, list_todos, get_todo, update_todo, delete_todo) which is good, but descriptions do not explain WHEN to use each tool or what distinguishes them from similar operations.
Create a new todo item
Delete a todo item
Get a specific todo item by ID
List all todo items
Update a todo item (title, description, or completion status)
Descriptions are too brief (10-40 chars). LLMs cannot determine when to select each tool or what distinguishes create_todo from update_todo. Descriptions must be 50-200 chars and explain WHAT, WHEN, and any prerequisites.
Parameter descriptions lack constraint information. 'title' and 'description' have no length limits, format hints, or validation rules. 'todo_id' does not explain format (UUID, integer, string). LLMs cannot validate inputs without explicit constraints.
Output schema not documented. Tool responses return TextContent with unstructured text. LLMs cannot parse structured fields (todo_id, created_at, completed status) for downstream tool chaining. Responses should return JSON objects with typed fields.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
No error handling guidance. If todo_id is invalid or not found, the tool returns plain text 'Todo not found' with no recovery hints. LLMs need actionable error messages: 'Todo ID not found. Call list_todos() to see available IDs.'
Destructive operations (delete_todo) lack confirmation or dry-run support. Agents can permanently delete todos without a confirmation step. Should implement a confirm_before_execute pattern or require explicit confirmation parameter.