Optional MCP server exposing Habitica task management to MCP clients (Claude Desktop, Claude Agent SDK, etc.). Reuses the same engine as the Claude Code skill for identical behavior everywhere.
Habitica MCP has clear, action-oriented tool names (get_stats, list_tasks, add_task, etc.) and reasonable descriptions (avg ~120 chars). All 12 tools have input schemas with type definitions and parameter descriptions. However, schemas lack enums for constrained inputs (task_type, priority, direction), output schemas are not documented, and error handling is minimal. The _safe() wrapper converts exceptions to strings but provides no recovery guidance. Parameter descriptions are present but sparse (avg ~50 chars) and lack format/range constraints. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Descriptions are adequate but not LLM-optimized per pattern:tool-description baseline (target 50-200 chars).
Add a checklist item to a task.
Create a task. task_type: habit | daily | todo | reward. priority: 0.1 trivial, 1 easy, 1.5 medium, 2 hard. due/start_date: 'YYYY-MM-DD'. repeat_days: subset of [su,m,t,w,th,f,s] (dailies). reminders: ['HH:MM', ...].
Mark a checklist item as complete or incomplete.
Complete a to-do/daily or score a habit up. If the id is a REWARD this spends gold and requires confirm=true.
Delete a checklist item from a task.
Permanently delete a task. Requires confirm=true.
Missing enum constraints for task_type, priority, direction, and frequency parameters. Free-form strings invite hallucinated values like 'task_type: "homework"' instead of valid options.
No output schemas documented. LLMs cannot plan downstream calls or extract fields reliably. E.g., add_task returns a dict but structure is not specified.
Error handling returns plain strings ('Error: ...') with no recovery guidance. LLMs cannot determine if errors are retryable, user-fixable, or fatal.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Get the user's character stats: level, class, HP, MP, XP, gold.
Get a single task by id (full detail, including checklist item ids).
List the user's tags with their ids.
List tasks. task_type: habits | dailys | todos | rewards | completedTodos (friendly forms like 'daily'/'todos' are accepted). Empty = all active tasks.
Score a task 'up' or 'down'. Guarded (needs confirm=true) when scoring a daily/todo down (un-complete/penalty) or scoring a reward up (purchase).
Update a task's text, notes, priority (0.1/1/1.5/2), or due date ('YYYY-MM-DD').
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (READ_ONLY, WRITE, DESTRUCTIVE). Agents cannot infer safety properties.
Parameter descriptions lack format/range constraints. E.g., 'priority' says '0.1, 1, 1.5, 2' but no enum; 'due' says 'YYYY-MM-DD' but no regex or validation hint.