A task management MCP server with PostgreSQL persistence
TaskManager is a functional but mediocre MCP server with significant definition quality gaps. Tool naming follows verb_noun convention (add_task, list_tasks, complete_task, tasks_by_status) which is good, but descriptions are minimal and parameter documentation is incomplete. All four tools have input schemas visible, but lack constraint documentation, enums, and output schemas are not formally specified. Error handling is absent, no recovery guidance, no error classification, and no validation feedback. The resource dependency in add_task's description ('consult resource: task://priorities') is documented but the actual priority enum is not enforced in the schema itself. Overall, the server meets basic functionality but falls short of production-grade quality expected for agent usage.
Add a new task. Before calling this tool, consult resource: task://priorities Priority must match available priority levels.
Mark a task as completed
List all tasks
Get tasks filtered by status (pending or completed)
No enum constraints on constrained parameters. Status parameter in tasks_by_status and priority in add_task accept free-form strings despite documented restrictions. LLMs will hallucinate invalid values.
No output schemas documented. LLMs cannot predict response structure (field names, types) and must infer from examples. Adds guesswork and error-prone parsing.
Missing error handling and recovery guidance. Tools provide no error messages, no classification (retryable vs fatal), and no next-step advice if operations fail (e.g., task_id not found in complete_task).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 55 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 52 | - | v1 |
Tool descriptions are too brief. list_tasks (14 chars), complete_task (30 chars), tasks_by_status (55 chars) are below recommended 50 - 200 char range. LLMs lack context for confident tool selection.
No pagination support on list tools. list_tasks and tasks_by_status both return all matching results with no limit, offset, or page parameters. Large task lists will explode token usage.
Parameter descriptions lack format/range guidance. task_id accepts any integer with no description of valid range. created_at is a string with no format specification (ISO 8601? Epoch?). LLMs will guess and pass invalid values.
Resource dependency is documented in prose but not enforced at API level. add_task says 'consult resource task://priorities' but the tool accepts any priority string, no server-side validation or enum.
Destructive tools lack confirmation pattern. complete_task is irreversible (marks tasks as completed) with no dry-run, undo, or confirmation mechanism. Agents can mistake task IDs and permanently alter state.