update_task
Modify any updatable field of a Habitica task: text, notes, difficulty, priority, or date to customize task details.
Instructions
Update fields on a task (text, notes, difficulty, priority, etc).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | ||
| text | No | ||
| notes | No | ||
| difficulty | No | ||
| priority | No | ||
| date | No |
Implementation Reference
- index.js:384-387 (handler)Handler function for update_task. Calls the Habitica API PUT /tasks/:taskId with the updates and returns a success message.
update_task: async ({ taskId, ...updates }) => { const t = (await api("PUT", `/tasks/${taskId}`, updates)).data; return ok(`Updated task: "${t.text}"`); }, - index.js:128-143 (schema)Input schema definition for update_task, with optional fields (text, notes, difficulty, priority, date) and required taskId.
{ name: "update_task", description: "Update fields on a task (text, notes, difficulty, priority, etc).", inputSchema: { type: "object", properties: { taskId: { type: "string" }, text: { type: "string" }, notes: { type: "string" }, difficulty: { type: "number", enum: [0.1, 1, 1.5, 2] }, priority: { type: "number", enum: [0.1, 1, 1.5, 2] }, date: { type: "string" }, }, required: ["taskId"], }, }, - index.js:58-367 (registration)The 'tools' array containing the update_task tool definition (line 128-143), which is registered with the MCP server via ListToolsRequestSchema handler on line 480.
const tools = [ { name: "get_user_profile", description: "Get the authenticated user's full profile (stats, prefs, items, party, etc).", inputSchema: { type: "object", properties: {} }, }, { name: "get_stats", description: "Get user stats only (HP, MP, XP, level, gold, class).", inputSchema: { type: "object", properties: {} }, }, { name: "get_tasks", description: "List tasks. Optionally filter by type.", inputSchema: { type: "object", properties: { type: { type: "string", enum: ["habits", "dailys", "todos", "rewards", "completedTodos"], description: "Optional task-type filter.", }, }, }, }, { name: "get_task", description: "Get a single task by id.", inputSchema: { type: "object", properties: { taskId: { type: "string" } }, required: ["taskId"], }, }, { name: "create_task", description: "Create a habit, daily, todo, or reward.", inputSchema: { type: "object", properties: { type: { type: "string", enum: ["habit", "daily", "todo", "reward"] }, text: { type: "string", description: "Title." }, notes: { type: "string", description: "Notes / description." }, difficulty: { type: "number", enum: [0.1, 1, 1.5, 2], description: "0.1=trivial, 1=easy, 1.5=medium, 2=hard.", }, priority: { type: "number", enum: [0.1, 1, 1.5, 2], description: "0.1=low, 1=med, 1.5=high, 2=urgent.", }, date: { type: "string", description: "Due date for todos (ISO)." }, value: { type: "number", description: "Cost in gold for rewards." }, checklist: { type: "array", items: { type: "object", properties: { text: { type: "string" }, completed: { type: "boolean", default: false }, }, required: ["text"], }, }, }, required: ["type", "text"], }, }, { name: "update_task", description: "Update fields on a task (text, notes, difficulty, priority, etc).", inputSchema: { type: "object", properties: { taskId: { type: "string" }, text: { type: "string" }, notes: { type: "string" }, difficulty: { type: "number", enum: [0.1, 1, 1.5, 2] }, priority: { type: "number", enum: [0.1, 1, 1.5, 2] }, date: { type: "string" }, }, required: ["taskId"], }, }, { name: "score_task", description: "Score a task. direction='up' completes a todo/daily or marks a + habit; 'down' is for negative habits.", inputSchema: { type: "object", properties: { taskId: { type: "string" }, direction: { type: "string", enum: ["up", "down"], default: "up" }, }, required: ["taskId"], }, }, { name: "delete_task", description: "Delete a task by id.", inputSchema: { type: "object", properties: { taskId: { type: "string" } }, required: ["taskId"], }, }, // Checklist { name: "get_task_checklist", description: "Get checklist items for a task.", inputSchema: { type: "object", properties: { taskId: { type: "string" } }, required: ["taskId"], }, }, { name: "add_checklist_item", description: "Add a checklist item to a task.", inputSchema: { type: "object", properties: { taskId: { type: "string" }, text: { type: "string" }, }, required: ["taskId", "text"], }, }, { name: "update_checklist_item", description: "Update text/completed on a checklist item.", inputSchema: { type: "object", properties: { taskId: { type: "string" }, itemId: { type: "string" }, text: { type: "string" }, completed: { type: "boolean" }, }, required: ["taskId", "itemId"], }, }, { name: "score_checklist_item", description: "Toggle a checklist item complete/incomplete.", inputSchema: { type: "object", properties: { taskId: { type: "string" }, itemId: { type: "string" }, }, required: ["taskId", "itemId"], }, }, { name: "delete_checklist_item", description: "Delete a checklist item.", inputSchema: { type: "object", properties: { taskId: { type: "string" }, itemId: { type: "string" }, }, required: ["taskId", "itemId"], }, }, // Tags { name: "get_tags", description: "Get all tags.", inputSchema: { type: "object", properties: {} }, }, { name: "create_tag", description: "Create a tag.", inputSchema: { type: "object", properties: { name: { type: "string" } }, required: ["name"], }, }, // Inventory / pets / mounts / equip { name: "get_inventory", description: "Get full inventory (items, eggs, food, hatching potions, special).", inputSchema: { type: "object", properties: {} }, }, { name: "get_pets", description: "Get owned pets map.", inputSchema: { type: "object", properties: {} }, }, { name: "get_mounts", description: "Get owned mounts map.", inputSchema: { type: "object", properties: {} }, }, { name: "feed_pet", description: "Feed a pet a piece of food.", inputSchema: { type: "object", properties: { pet: { type: "string", description: "Pet key, e.g. Wolf-Base." }, food: { type: "string", description: "Food key, e.g. Meat." }, }, required: ["pet", "food"], }, }, { name: "hatch_pet", description: "Hatch a pet from an egg + hatching potion.", inputSchema: { type: "object", properties: { egg: { type: "string" }, hatchingPotion: { type: "string" }, }, required: ["egg", "hatchingPotion"], }, }, { name: "equip_item", description: "Equip a pet, mount, costume piece, or battle gear.", inputSchema: { type: "object", properties: { type: { type: "string", enum: ["pet", "mount", "costume", "equipped"] }, key: { type: "string" }, }, required: ["type", "key"], }, }, // Rewards / shop / spells { name: "buy_reward", description: "Buy a custom reward by key.", inputSchema: { type: "object", properties: { key: { type: "string" } }, required: ["key"], }, }, { name: "get_shop", description: "Get items in a shop (default: market).", inputSchema: { type: "object", properties: { shopType: { type: "string", enum: ["market", "questShop", "timeTravelersShop", "seasonalShop"], default: "market", }, }, }, }, { name: "buy_item", description: "Buy an item from a shop.", inputSchema: { type: "object", properties: { itemKey: { type: "string" }, quantity: { type: "number", default: 1 }, }, required: ["itemKey"], }, }, { name: "cast_spell", description: "Cast a class spell, optionally on a target task or party member.", inputSchema: { type: "object", properties: { spellId: { type: "string" }, targetId: { type: "string" }, }, required: ["spellId"], }, }, // Notifications { name: "get_notifications", description: "Get unread notifications.", inputSchema: { type: "object", properties: {} }, }, { name: "read_notification", description: "Mark a notification as read.", inputSchema: { type: "object", properties: { notificationId: { type: "string" } }, required: ["notificationId"], }, }, // Cron { name: "run_cron", description: "Run the daily cron (advance day, apply damage from missed dailies). Normally auto-runs on first action of the day.", inputSchema: { type: "object", properties: {} }, }, ]; - index.js:53-54 (helper)Helper functions ok() and json() used by update_task to format text/text responses.
const ok = (text) => ({ content: [{ type: "text", text }] }); const json = (obj) => ok(JSON.stringify(obj, null, 2)); - index.js:23-51 (helper)The api() helper function used by update_task to make the HTTP PUT request to the Habitica API.
async function api(method, path, body) { const url = `${API_BASE}${path}`; const headers = { "x-api-user": USER_ID, "x-api-key": API_TOKEN, "x-client": `${USER_ID}-${APP_ID}`, "Content-Type": "application/json", }; const res = await fetch(url, { method, headers, body: body === undefined ? undefined : JSON.stringify(body), }); const text = await res.text(); let payload; try { payload = text ? JSON.parse(text) : {}; } catch { payload = { raw: text }; } if (!res.ok) { const msg = payload?.message || payload?.error || res.statusText; throw new McpError( ErrorCode.InternalError, `Habitica API ${res.status}: ${msg}`, ); } return payload; }