A Spring Boot-based MCP server for task management with CRUD operations, filtering, statistics, and planning prompts.
Task MCP Server has well-structured tool definitions with complete schemas and clear descriptions. All 8 tools have proper input schemas with typed parameters and enums where appropriate. Descriptions are concise (10-50 chars) and action-oriented. However, descriptions lack depth on WHEN to use each tool and lack recovery guidance for error cases. Output schemas are not documented. Parameter descriptions are minimal (e.g., 'Task ID' without context on format or constraints). No tool annotations (readOnlyHint, destructiveHint) despite clear risk levels. Error handling is basic, no guidance on retries or next steps. Composition is sound: tools follow single-responsibility principle and chain well (e.g., createTask → getTask). Naming is clear and verb-first throughout.
Mark a task as completed.
Create a task with an optional due date and priority.
Delete a task and return confirmation.
List tasks past their due date that are not completed or cancelled.
Get a task by ID.
Get totals, status counts, overdue count, and completion rate.
List tasks, optionally filtered by status, priority, or title search.
Output schemas not documented. LLMs cannot plan downstream calls or extract required fields (e.g., task_id from createTask response). Breaks tool chaining.
Tool descriptions lack WHEN-to-use context and recovery guidance. E.g., deleteTask says 'Delete a task and return confirmation' but does not explain irreversibility or that agents should confirm first. Violates pattern:command-tool.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. deleteTask is DESTRUCTIVE, getTask is READ_ONLY, completeTask is WRITE. Agents cannot reason about safety without annotations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Update editable fields on a task.
Parameter descriptions are minimal. E.g., 'Task ID' lacks format/type context. 'ISO date, for example 2026-09-07' includes example value (anti-pattern); should use format constraint instead. Violates pattern:constrained-input.
No error handling guidance. ApiExceptionHandler returns HTTP status codes and error codes (TASK_NOT_FOUND, VALIDATION_ERROR) but does not tell LLM what to do next (e.g., 'Try search_users() first'). Violates pattern:recovery-guide.