This todo MCP server has basic tool structure with acceptable naming and parameter schemas, but significant gaps in descriptions and error handling. All 5 tools are explicitly registered with input schemas (visible in index.js lines 34-66). Tool names follow verb_noun convention (add_, list_, complete_, delete_, clear_). Descriptions exist but are minimal (15-30 chars) and in Vietnamese, which limits LLM comprehension for English-speaking agents. Parameter schemas are properly typed with enums where applicable (priority, filter fields). However, error handling is weak, tools return generic not-found messages without recovery guidance, and there is no output schema documentation. The server lacks critical features like pagination hints, idempotency markers, and destructive operation warnings.
Thêm một công việc mới vào danh sách
Xóa tất cả công việc đã hoàn thành
Đánh dấu công việc đã hoàn thành
Xóa một công việc khỏi danh sách
Xem danh sách tất cả công việc
Descriptions are too short (15 - 30 chars) and in Vietnamese only. For English-speaking LLM agents, descriptions like 'Thêm một công việc mới vào danh sách' are non-actionable. Minimum effective length is 50 chars; target 100 - 150 for LLM selection clarity.
No output schema documented. Tools return hardcoded text responses with emoji formatting, but LLMs cannot parse structure or extract IDs for chaining. list_todos returns unstructured text instead of a JSON array of todo objects with id, title, priority, done, createdAt fields.
Error handling lacks recovery guidance. When a todo is not found (e.g., delete_todo with invalid id), the response is 'Không tìm thấy ID: {id}' without suggesting next steps. Per pattern:recovery-guide, errors should guide the LLM: 'ID not found. Try list_todos() first to see available IDs.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 43 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 39 | - | v1 |
Missing tool annotations. Destructive tools (delete_todo, clear_completed) have no annotation indicating they are destructive. Per current MCP spec, tools should include destructiveHint flag. Also, complete_todo lacks idempotentHint even though marking a todo done twice is idempotent.
clear_completed has vague name and no required parameters. It silently removes all completed todos without a dry-run or confirmation. Per pattern:confirmation-request, irreversible operations should support a confirm_before_execute step or at least require explicit acknowledgment.
Parameters lack detailed constraints. 'priority' accepts [low, medium, high] but description does not explain what each level means or when to use each. 'filter' in list_todos accepts [all, pending, done], correct use of enum, but description could clarify 'pending' means !done.
No pagination support. list_todos returns all todos at once. For large todo lists (100+ items), unstructured output will exhaust context. Per pattern:paginated-result, add limit and offset parameters and return a total_count.