Zero-dependency MCP todo server — agent-facing, idempotent, full-state responses
mcp-todo has 6 tools with complete input schemas and basic descriptions. However, descriptions are minimal (10-50 chars), parameter descriptions lack detail about constraints and formats, and output schemas are not documented. Tools follow verb_noun naming but lack guidance on when to use each tool vs. alternatives. No error recovery hints, no pagination support, and responses embed full state (todos array) on every call rather than structured, minimal output. Schemas are present but descriptions fall short of LLM-optimization standards (target 50-200 chars per pattern:tool-description).
Add one or more todos. Use clear_existing to reset the list before adding.
Clear all todos at once.
Mark one or more todos as done.
List all current todos and their states.
Delete one or more todos.
Mark one or more todos as in-progress.
Descriptions are too brief (10-50 chars). LLMs need 50-200 char descriptions explaining WHAT, WHEN, and WHY. E.g., 'Mark one or more todos as in-progress.' lacks context on when to use start_todos vs. complete_todos, and does not explain the return value.
Parameter descriptions are missing or generic. 'ids' is described as 'Array of todo IDs' but lacks format guidance (are IDs strings? UUIDs? numeric?). 'texts' lacks length constraints or format hints. Per pattern:tool-description, every parameter must have a non-empty, actionable description.
Output schemas are not documented. Tools return JSON with 'success', 'added'/'results'/'cleared'/'count', and 'todos' array, but the response structure is not declared in tool definitions. LLMs cannot plan downstream calls without knowing what fields to expect.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
No error recovery guidance. If an agent calls start_todos with a non-existent ID, the response returns {found: false} but does not suggest what to do next (e.g., 'Call list_todos to see available IDs'). Per pattern:recovery-guide, errors must tell the LLM what to do.
add_todos 'clear_existing' parameter lacks constraint documentation. The description does not explain the side effect (all existing todos are deleted) or warn that this is destructive. Per pattern:command-tool, destructive operations must be explicit in descriptions.