habitica-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@habitica-mcpWhat do I still have to do today?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
habitica-mcp
An MCP server that lets LLMs (Claude, Cursor, VS Code Copilot, local models...) read and manage your Habitica tasks: habits, dailies, to-dos, rewards, checklists and tags. Written in Python with FastMCP.
Status: alpha (v0.1). Not affiliated with HabitRPG, Inc.
Why another Habitica MCP server?
Before starting this project we reviewed the existing ones (September 2026). The most popular
server stopped being maintained in 2025 and no longer works because it does not send the
x-client header Habitica now requires; the Python alternatives were single-file experiments.
This server focuses on being correct, safe and maintainable:
Follows Habitica's API rules: always sends
x-client, stays under the 30 requests/minute limit (and obeysRetry-After/X-RateLimit-*), never runs the day rollover (cron).Safe by default: deleting, removing checklist items or tags and buying rewards return a preview until the model calls again with
confirm=true. Aread-onlymode hides every write tool.Designed for LLMs: few workflow-level tools, references by id or text ("mark meditation as done"), compact responses without Habitica's bulky history, and error messages that say what to do.
Tested and measured: an in-memory Habitica test double, a snapshot of the tool contract, live contract tests and LLM evals (see docs/measurement.md).
Related MCP server: Todoist MCP Server
Tools
Tool | What it does | Changes Habitica |
| Stats, dailies due today, overdue/today/upcoming to-dos, habits, warnings | no |
| Filter by type, status (pending, due today, overdue, completed), tag, text | no |
| Full details of one task (checklist, schedule, dates) | no |
| Tags and how many tasks use them | no |
| Create a habit, daily (with schedule), to-do (due date, checklist) or reward | yes |
| Change text, notes, difficulty, due date, schedule, tags... | yes |
| Check off / undo dailies and to-dos, +/- habits, buy rewards ( | yes |
| Add, rename, toggle or remove ( | yes |
| Create, rename or delete ( | yes |
| Delete a task ( | yes |
Not exposed on purpose: cron, gems and payments, account resets, chat and party messages.
Quick start
Install uv.
In Habitica go to Settings > Site Data and copy your User ID and API Token.
Check the connection:
HABITICA_USER_ID=... HABITICA_API_TOKEN=... uvx habitica-mcp --checkUntil the first PyPI release, replace
uvx habitica-mcpwithuvx --from git+https://github.com/CDMonsalveA/habitica-mcp habitica-mcp.
Claude Desktop / Cursor
Add to claude_desktop_config.json (Claude Desktop) or ~/.cursor/mcp.json (Cursor):
{
"mcpServers": {
"habitica": {
"command": "uvx",
"args": ["habitica-mcp"],
"env": {
"HABITICA_USER_ID": "your-user-id",
"HABITICA_API_TOKEN": "your-api-token"
}
}
}
}Claude Code
claude mcp add habitica -e HABITICA_USER_ID=your-user-id -e HABITICA_API_TOKEN=your-api-token -- uvx habitica-mcpVS Code
.vscode/mcp.json (the token is asked for once and never stored in the repository):
{
"inputs": [
{ "type": "promptString", "id": "habitica-token", "description": "Habitica API token", "password": true }
],
"servers": {
"habitica": {
"type": "stdio",
"command": "uvx",
"args": ["habitica-mcp"],
"env": {
"HABITICA_USER_ID": "your-user-id",
"HABITICA_API_TOKEN": "${input:habitica-token}"
}
}
}
}Then ask things like "What do I still have to do today in Habitica?", "Add a to-do to call the dentist on Friday, hard difficulty, with a checklist: find the number, ask about cleaning" or "I meditated, check it off".
Configuration
Variable | Default | Description |
| — | Your Habitica User ID (required to call Habitica) |
| — | Your Habitica API Token (required, never logged) |
|
|
|
|
| Another Habitica instance (self-hosted or a test double) |
|
| Override the |
|
| Max Habitica requests per minute (Habitica allows 30) |
|
| Seconds a tool may wait for a free request slot before failing fast |
|
| Seconds reads are reused between tool calls ( |
|
| Request timeout in seconds |
|
| Logs go to stderr; |
| — | Append per-call metrics (no task content) as JSON lines |
Credentials stay on your machine: the server runs locally over stdio and only talks to Habitica.
Development
uv sync # install dependencies
uv run pre-commit install # checks before every commit (see CONTRIBUTING.md)
uv run pytest # unit, integration, protocol and stdio end-to-end tests
uv run ruff check . && uv run pyright
uv run python -m tests.fake_habitica --port 8765 # the Habitica test double, standalone
uv run pytest -m contract # live tests (needs HABITICA_TEST_USER_ID / HABITICA_TEST_API_TOKEN)
uv run python -m evals run --driver ollama --model qwen3:8b # LLM evals, local model
uv run python -m evals run --driver claude_code --model sonnet # LLM evals, Claude subscriptionArchitecture decisions: docs/adr
How the project is measured: docs/measurement.md
Maintenance runbook: docs/maintenance.md
Contributing: CONTRIBUTING.md · Security: SECURITY.md
Built on habiticalib models (also used by Home Assistant).
License
Available Tools
10 toolshabitica_create_taskHabitica: create a taskC
Create a habit, daily, to-do or reward. Tags are given by name.
| Name | Required | Description | Default |
|---|---|---|---|
| cost | No | Rewards only: price in gold (default 10) | |
| tags | No | Tag names (or ids) | |
| text | Yes | Task title | |
| notes | No | ||
| due_date | No | To-dos only: due date (YYYY-MM-DD) in the user's calendar | |
| schedule | No | Dailies only. Default: due every day starting today | |
| checklist | No | Dailies and to-dos only: checklist item texts | |
| task_type | Yes | 'habit' = repeatable good/bad behavior scored with +/-; 'daily' = recurring task on a schedule; 'todo' = one-off task; 'reward' = custom reward bought with gold | |
| difficulty | No | Affects rewards and damage. Not used for rewards | easy |
| habit_negative | No | Habits only: enable - (default false; set true for bad habits) | |
| habit_positive | No | Habits only: enable + (default true) | |
| create_missing_tags | No | Create tags that do not exist yet |
Output Schema
| Name | Required | Description |
|---|---|---|
| task | No | |
| status | Yes | |
| message | Yes | |
| created_tags | No | Tags that did not exist and were created |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnly=false, destructive=false, idempotent=false), so the description is not required to repeat them. However, the description adds no behavioral context beyond annotation coverage: it does not mention tag auto-creation, duplicate-handling, permission needs, or side effects, leaving most behavior to be inferred from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and task types, with no wasted words. It is concise and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists and the input schema is rich, this is a complex 12-parameter mutation tool with nested scheduling and tag creation behavior. The description does not provide enough context for an agent to understand usage conditions, side effects, or task-type-specific constraints beyond what the schema already says.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 92%, so the schema already documents nearly all parameters in detail. The description adds only a minor clarification that tags are given by name, and even that slightly conflicts with the schema's 'Tag names (or ids)' wording; baseline 3 is appropriate when the schema carries parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: create one of four Habitica task types. It clearly distinguishes creation from scoring/updating/deleting siblings, but does not explicitly contrast with them or mention the task resource in a broader sense.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives such as habitica_update_task, habitica_score_task, or habitica_delete_task. It also omits prerequisites or conditions for creating each task type.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
habitica_delete_taskHabitica: delete a taskADestructive
Permanently delete a task. Without confirm=true it only returns a preview: show it to the user and delete only after they agree.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | Task id (preferred), alias, or its text. Partial text works when it matches exactly one task. | |
| confirm | No | Set to true only after the user explicitly agreed to this irreversible action. When false the tool only returns a preview and changes nothing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| task | No | |
| status | Yes | |
| message | Yes | |
| created_tags | No | Tags that did not exist and were created |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, so the bar is lower, yet the description adds the non-obvious safety gate: the tool mutates nothing unless confirm=true. That is exactly the kind of behavior an agent cannot infer from the schema or annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the irreversible action and immediately followed by the required safety protocol. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so the preview's return shape needn't be spelled out; the destructive nature, the consent workflow, and the accept-forms of the task parameter are all covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description nevertheless reinforces the meaning of confirm as a human-consent gate rather than a mere boolean switch, and pairs it with the preview semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Permanently delete a task') plus the key qualifier of irreversibility, which separates it cleanly from habitica_update_task and habitica_score_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit two-step workflow: call without confirm to preview, show it to the user, then delete only on agreement. It does not name sibling alternatives for non-destructive edits, but the when/when-not condition is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
habitica_get_overviewHabitica: today's overviewARead-onlyIdempotent
Snapshot of the user's Habitica day: character stats (HP, mana, XP, gold, level), dailies still due today, overdue / due-today / upcoming to-dos and habits, plus warnings such as a new day that has not started yet. Start here when the user asks what is pending or how they are doing.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | 'concise' keeps responses short; 'detailed' adds full notes, checklist items with ids, schedules and dates. | concise |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| today | Yes | The user's current Habitica day |
| habits | No | |
| player | Yes | |
| rewards | Yes | |
| warnings | No | |
| needs_cron | Yes | Habitica has not started the user's new day yet |
| dailies_due | Yes | Dailies due today and not completed yet |
| todos_overdue | No | |
| todos_upcoming | No | Due within the next 7 days |
| todos_due_today | No | |
| dailies_completed | Yes | |
| dailies_due_total | Yes | |
| todos_without_due_date | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds useful behavioral context beyond that: it enumerates what the snapshot contains and flags edge-condition warnings such as a new day not yet started, though it says nothing about response size or limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the content inventory comes first, followed by the routing advice. Every clause contributes either scope or usage direction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter read tool with an output schema and full annotation coverage, the description supplies everything needed to call it correctly — what it returns, when to reach for it, and the warning semantics. No essential gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single response_format parameter is fully documented in the schema, so the schema carries the burden. The description never mentions response_format or how verbosity affects the returned snapshot, adding no meaning beyond the structured field — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb-resource pair (a snapshot of the user's Habitica day) and enumerates the contents: character stats, due dailies, to-dos, habits, and warnings. This clearly distinguishes it from siblings like habitica_list_tasks, which retrieve a single task category rather than an aggregated daily state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit entry-point guidance — "Start here when the user asks what is pending or how they are doing" — which routes the agent ahead of the list/get siblings. It does not explicitly name an alternative or exclusion case, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
habitica_get_taskHabitica: get a taskARead-onlyIdempotent
Full details of one task: notes, checklist items with ids, schedule, tags and dates.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | Task id (preferred), alias, or its text. Partial text works when it matches exactly one task. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| cost | No | Rewards: price in gold |
| tags | No | Tag names |
| text | Yes | |
| type | Yes | |
| alias | No | |
| notes | No | |
| streak | No | |
| overdue | No | To-dos: past the due date and not completed |
| due_date | No | To-dos: due date in the user's calendar |
| negative | No | Habits: the - button is enabled |
| next_due | No | Dailies: next due dates |
| positive | No | Habits: the + button is enabled |
| schedule | No | |
| challenge | No | Name of the challenge this task belongs to |
| checklist | No | |
| completed | No | Dailies and to-dos: checked off |
| due_today | No | Dailies: due in the user's current Habitica day |
| counter_up | No | Habits: times scored + in the current period |
| created_at | No | |
| difficulty | No | |
| updated_at | No | |
| counter_down | No | Habits: times scored - in the current period |
| checklist_progress | No | Checked items / total items |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, so safety is covered and the bar is lower. The description adds that checklist items come back with ids (useful for follow-up habitica_manage_checklist calls) but says nothing about behavior when the task is not found, openWorld/lookup semantics, or whether tags are names or ids.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence listing exactly what details are returned, with zero filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, and the field enumeration plus annotations cover the essentials for a one-parameter read. The only missing piece is a failure/lookup behavior note (e.g., ambiguous partial text), which the schema partially handles.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents the id/alias/partial-text matching rule in detail, so the description adds no parameter meaning beyond it. Baseline 3 applies; the description does not compensate further nor detract.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: retrieves full details of a single task, and the enumerated fields (notes, checklist items with ids, schedule, tags, dates) make clear it returns the complete object rather than a summary. This distinguishes it from habitica_list_tasks, which enumerates many tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'one task' implies single-record lookup and the sibling names (list_tasks, update_task) make the split reasonably inferrable, but the description never explicitly says when to use this versus listing tasks or when it is unnecessary. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
habitica_list_tagsHabitica: list tagsARead-onlyIdempotent
List the user's tags with how many active tasks use each one.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tag | No | |
| tags | No | |
| status | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as read-only, idempotent, non-destructive, and open-world. The description adds useful behavioral context by noting that each tag is returned with an active-task usage count, but it does not discuss ordering, whether inactive tasks are excluded from the count, or other retrieval behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the action and resource, and it immediately adds the most useful scope detail. No wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter read tool with rich annotations and an output schema, the description covers the essential purpose and the notable active-task count behavior. Minor gaps remain around count semantics and ordering, but nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the parameter semantics baseline is 4. The empty schema matches the description and leaves no parameter ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the user's tags') and adds scope detail ('how many active tasks use each one'), which distinguishes it from the mutation-oriented sibling habitica_manage_tags. It does not explicitly name that sibling, but the read-vs-manage split is clear from the tool name and description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The listing purpose implies when to use it, but there is no explicit guidance on when to prefer this over habitica_manage_tags or how it relates to tag creation/deletion. An agent can infer the use case, but the description provides no exclusions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
habitica_list_tasksHabitica: list tasksARead-onlyIdempotent
List the user's tasks with filters. Prefer filters over listing everything; returned ids can be passed to the other habitica_* tools.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Tag name or id | |
| limit | No | ||
| search | No | Text contained in the task text or notes | |
| status | No | 'all' = active tasks; 'pending' = dailies due today and to-dos not done; 'due_today' = dailies due today and to-dos due today; 'overdue' = to-dos past their due date; 'completed' = dailies done today and the 30 most recently completed to-dos | all |
| task_type | No | Only this type of task | |
| response_format | No | 'concise' keeps responses short; 'detailed' adds full notes, checklist items with ids, schedules and dates. | concise |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| tasks | Yes | |
| truncated | Yes | |
| total_matching | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is fully covered structurally. The description adds the id-reuse workflow, but says nothing about the default 20-item cap, truncation, or cost of an unfiltered listing. Useful but thin beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler, and the primary action is front-loaded ahead of the filtering advice and the id-chaining hint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Six optional parameters, full schema descriptions and an output schema mean the description doesn't need to explain returns. It covers purpose and downstream id usage; only the truncation/limit behavior of an unfiltered listing is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83% and two enums (status, task_type) are documented inline with detailed semantics, so the schema carries the parameter burden. The description only gestures at 'filters' generically and adds no syntax, combination, or default behavior beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the user's tasks') plus the notion of filtering. It implies a collection-level read versus the single-task habitica_get_task sibling but never names that sibling, so differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Prefer filters over listing everything' gives real selection guidance, and 'returned ids can be passed to the other habitica_* tools' describes the intended workflow into update/score/delete. It stops short of naming explicit alternatives or exclusions (e.g., use habitica_get_task when you already have an id).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
habitica_manage_checklistHabitica: edit a checklistADestructive
Add, rename, check/uncheck or remove checklist items of a daily or to-do. Returns the task with its checklist item ids.
| Name | Required | Description | Default |
|---|---|---|---|
| item | No | Existing item id or text (rename, toggle, remove) | |
| task | Yes | Task id (preferred), alias, or its text. Partial text works when it matches exactly one task. | |
| text | No | Item text (add, rename) | |
| action | Yes | 'add' a new item; 'rename' an item; 'toggle' checks or unchecks an item; 'remove' deletes an item (needs confirm=true) | |
| confirm | No | Set to true only after the user explicitly agreed to this irreversible action. When false the tool only returns a preview and changes nothing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| task | No | |
| status | Yes | |
| message | Yes | |
| created_tags | No | Tags that did not exist and were created |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the low bar applies — yet the description adds little beyond them. It omits the confirm/preview safety behavior and the irreversibility of 'remove', and its return-value note is redundant with the existing output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, action scope first and return shape second, with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, 100% schema coverage and full annotations, most structured needs are met. However, for a destructive mutation tool the description should at least signal that removal requires confirm/preview, which is an important behavioral fact an agent would benefit from seeing up front.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents task resolution, item/text usage per action, and confirm. The description contributes no additional parameter meaning, which is the baseline 3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a specific verb set (add, rename, check/uncheck, remove) with a precise resource (checklist items of a daily or to-do) and states the return value. It is clearly distinguishable from siblings like habitica_update_task or habitica_delete_task, which operate on the task itself rather than its checklist.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The four enumerated actions imply when the tool applies, but no sibling is named as an alternative (e.g. 'to edit task fields use habitica_update_task'). Exclusions and prerequisites are left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
habitica_manage_tagsHabitica: create, rename or delete tagsADestructive
Create, rename or delete a tag. To tag tasks use habitica_update_task(add_tags=...).
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Existing tag name or id (rename, delete) | |
| name | No | New tag name (create, rename) | |
| action | Yes | 'delete' removes the tag from every task and needs confirm=true | |
| confirm | No | Set to true only after the user explicitly agreed to this irreversible action. When false the tool only returns a preview and changes nothing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tag | No | |
| tags | No | |
| status | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=true, so the safety profile is covered structurally. The description itself adds no behavioral context beyond the pointer to update_task – it does not mention the confirm/preview safeguard or that delete strips the tag from every task, both of which live only in the schema parameter descriptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the primary purpose front-loaded and the disambiguation second. Nothing to trim and nothing duplicated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, full parameter documentation, and destructive annotations, the description only needs to establish purpose and routing, which it does. It could go slightly further by flagging the irreversible two-step confirm flow at the top level, since an agent skimming only the description would not know a preview step exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the confirm-preview semantics and the rename/delete vs create/rename mapping of tag and name, so the baseline of 3 applies. The description adds no parameter-level meaning beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs (create, rename, delete) against a specific resource (tag), and immediately clarifies the boundary with task tagging, which is the most likely source of confusion with siblings like habitica_update_task. An agent can pick this tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative for the adjacent use case: 'To tag tasks use habitica_update_task(add_tags=...).' That is a concrete when-not-to-use-this rule plus a redirect to the correct sibling, which is exactly what usage guidance should do.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
habitica_score_taskHabitica: check off / score a taskA
Record progress: check off or undo a daily or to-do, press + or - on a habit, or buy a custom reward. Returns the character's stats after scoring and what changed.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | Task id (preferred), alias, or its text. Partial text works when it matches exactly one task. | |
| confirm | No | Rewards only: true after the user agreed to spend the gold | |
| direction | No | 'up' = complete a daily/to-do, + on a habit, or buy a reward; 'down' = undo a completed daily/to-do, or - on a habit | up |
Output Schema
| Name | Required | Description |
|---|---|---|
| drop | No | Item found while scoring |
| task | No | |
| stats | No | Character stats after scoring |
| status | Yes | |
| changes | No | Difference from before scoring |
| message | Yes | |
| level_up | No | |
| warnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the bar is lower, but the description adds real context: scoring is reversible via 'undo', and buying a reward is a distinct purchase action. It also notes the response contains the character's post-scoring stats and a delta, which helps the agent understand the effect of a non-idempotent write. It does not mention permissions/authentication or what happens if the task text is ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste: the operation is front-loaded, followed by the return-value note. Everything earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the description still summarizes the return (stats + what changed), so return values are covered. The mutation/reversal semantics are conveyed for a non-idempotent tool. Minor gaps remain around failure modes (ambiguous task text, insufficient gold, already-completed tasks) that the agent would need to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already defines direction's up/down meaning per task type and confirm's role in reward purchases. The description restates these mappings in prose without adding syntax, constraints, or edge-case detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('record progress') and enumerates exactly which operations it covers across the three Habitica task types (daily/to-do, habit, custom reward). This is clearly distinguishable from siblings such as habitica_create_task, habitica_update_task, or habitica_delete_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the contexts in which this tool applies (checking off, undoing, pressing +/- on a habit, buying a reward), which gives the agent a clear trigger. It does not explicitly name an alternative or exclusion (e.g., 'to edit task text use habitica_update_task'), so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
habitica_update_taskHabitica: update a taskAIdempotent
Change fields of a task; only the given fields change. To check tasks off use habitica_score_task, and habitica_manage_checklist for checklist items.
| Name | Required | Description | Default |
|---|---|---|---|
| cost | No | Rewards only | |
| task | Yes | Task id (preferred), alias, or its text. Partial text works when it matches exactly one task. | |
| text | No | ||
| notes | No | New notes ('' clears) | |
| add_tags | No | Tag names (or ids) | |
| due_date | No | To-dos only: new due date | |
| schedule | No | Dailies only: replaces the schedule | |
| difficulty | No | ||
| remove_tags | No | Tag names (or ids) | |
| clear_due_date | No | To-dos only: remove the due date | |
| habit_negative | No | Habits only: enable - | |
| habit_positive | No | Habits only: enable + | |
| create_missing_tags | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| task | No | |
| status | Yes | |
| message | Yes | |
| created_tags | No | Tags that did not exist and were created |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false; the description adds the genuinely useful behavioral fact that omitted fields are untouched, which is the key safety/idempotency guarantee for a 13-param patch tool. It stays silent on side effects such as create_missing_tags defaulting to true and on schedule being replaced wholesale rather than merged, so it stops short of full disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two clauses, zero filler: the partial-update rule is front-loaded and the alternative-routing sentence follows. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter mutation with a nested schedule object and an output schema, the description covers only the patch semantics and two sibling handoffs. It omits the tag-creation side effect and the replace-vs-merge behavior of schedule, both of which an agent must get right; the presence of an output schema excuses it from explaining return values, but not from these behavioral gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 77%, so the schema already carries most parameter meaning (cost=rewards only, due_date=to-dos only, notes '' clears, schedule replaces the schedule). The description adds nothing parameter-specific, and the undocumented remainder (text, difficulty, create_missing_tags) is left entirely to the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Change fields of a task') and immediately clarifies the partial-update semantics ('only the given fields change'), which is exactly what separates it from create/delete siblings. It also names the siblings that handle adjacent operations (habitica_score_task, habitica_manage_checklist), so an agent can route correctly without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes two common adjacent intents away from this tool: checking a task off goes to habitica_score_task, checklist items go to habitica_manage_checklist. What's missing is guidance on the other obvious boundary (habitica_create_task / habitica_delete_task) and any precondition such as the task needing to exist or the ambiguity of a text match.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v0.1.0- First observed
habitica_create_task - First observed
habitica_delete_task - First observed
habitica_get_overview - First observed
habitica_get_task - First observed
habitica_list_tags - First observed
habitica_list_tasks - First observed
habitica_manage_checklist - First observed
habitica_manage_tags - First observed
habitica_score_task - First observed
habitica_update_task
TDQS
Scored across 10 tools
Each tool has a clearly distinct purpose: overview vs. filtered listing, single-task detail, task CRUD, scoring, checklist management, and tag management are all separated. The potentially overlapping update_task vs. score_task boundary is explicitly clarified in the descriptions.
All tool names use a consistent habitica_ prefix followed by snake_case verb_noun patterns such as get_task, create_task, update_task, and list_tags. The manage_* tools are slightly aggregate but still follow the same predictable convention.
Ten tools is a well-scoped surface for Habitica task, scoring, checklist, and tag workflows. Each tool covers a meaningful operation without excessive fragmentation.
The surface covers task CRUD, scoring/progress, checklist item lifecycle, tag listing and management, and a daily overview snapshot. Core Habitica task-management workflows are complete, with no obvious dead ends for the stated purpose.
Maintenance
Related MCP Connectors
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
ADHD-friendly tasks, notes & projects for LucidNest - 18 tools, scoped tokens, Streamable HTTP.
Read tasks, habits, events and scheduling links; create and update Reclaim tasks and habits.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables AI assistants to interact with the Habitica API to manage tasks, track habits, and engage in gamified productivity features like pet raising and inventory management. It allows users to control their Habitica account through natural language for a personalized and automated productivity experience.2624 npm24MIT
- AlicenseBqualityDmaintenanceEnables AI assistants to manage Todoist tasks, projects, and labels through natural language. It provides a comprehensive suite of tools for task organization, productivity tracking, and structured workflows like daily planning.24186 npmMIT
- AlicenseBqualityDmaintenanceExposes the Habitica v3 API as MCP tools, allowing AI assistants to read and manage tasks, habits, dailies, rewards, pets, inventory, and notifications.28MIT
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to manage Habitify habits, journals, moods, and notes through the Habitify API, with tools for adding, deleting, and retrieving habit logs and other data.20 npm8MIT