Update task
update_taskUpdate a task. Only the fields you pass are changed; the rest are preserved (the server PUT is a full replace, so this tool reads the current task first and merges). Members may edit body fields and progress but their date changes are ignored server-side — as is a change to isMilestone, which is planner-owned like the dates. Pass an empty string to clear a text field. Status values are DEFINED PER WORKSPACE — there is no fixed list. Call list_task_statuses to see this workspace's labels before setting one; a label it does not define is rejected with 400. A new workspace starts with "Open", "InProgress", "Review", "Done", but any of those may have been renamed, reordered, removed or added to. Each status also carries a progress value, and CHANGING A STATUS OVERWRITES percentComplete with it (the workspace's starting status is 0, its finished status 100). To set a status without taking its progress, send status and percentComplete together in one update_task call — except for the finished status, which always forces 100. Dates are ISO-8601 strings. An ordinary task must end up with BOTH startDate and endDate, and startDate must be on or before endDate — the server rejects a missing or inverted range with 422. A milestone needs only one of the two: the isMilestone invariants run first and copy it to the other. A child task's startDate must also be >= its parents' end dates. Dates you omit are left as they are, so a task that is already dated stays valid; a task that predates the rule (restored from an older backup) needs both dates supplied on the first edit. A milestone marks a dated gate rather than a span of work (launch date, sign-off, go/no-go). The server holds it to one date — endDate is forced to equal startDate, so naming either one is enough — with duration 0 and progress that is only ever 0 or 100 (100 exactly when it is in the workspace's finished status). Setting isMilestone on a task that already has a date range collapses it onto its start date. WORK BREAKDOWN STRUCTURE. Tasks nest via wbsParentId, and every task carries a read-only wbscode — its dotted outline number within the project ("1", "2.3", "2.3.1") — plus issummary. wbsParentId is NOT a scheduling dependency: a WBS child sits INSIDE its parent's span and in fact defines it, whereas a predecessor runs BEFORE its successor. Predecessors are their own resource — create_task_dependency — and are unrelated to nesting. A task with at least one WBS child is a SUMMARY TASK and owns none of its own schedule: its startDate, endDate, duration, percentComplete and status are all recomputed from its children (dates span the children; progress is their span-weighted average). Writing any of those on a summary returns 422 — change the children instead. wbscode is derived from tree position, so it shifts whenever tasks are reordered or re-parented: display it, never store or match on it. To move a task within the breakdown use set_task_parent, not this tool. Returns the updated task.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Task id | |
| title | No | New title (optional) | |
| status | No | New status (optional). Status values are DEFINED PER WORKSPACE — there is no fixed list. Call list_task_statuses to see this workspace's labels before setting one; a label it does not define is rejected with 400. A new workspace starts with "Open", "InProgress", "Review", "Done", but any of those may have been renamed, reordered, removed or added to. Each status also carries a progress value, and CHANGING A STATUS OVERWRITES percentComplete with it (the workspace's starting status is 0, its finished status 100). To set a status without taking its progress, send status and percentComplete together in one update_task call — except for the finished status, which always forces 100. | |
| endDate | No | End date ISO-8601 (optional; omit to keep the stored one, which must leave endDate >= startDate) | |
| duration | No | Duration value (optional). In Days it is derived from the dates (working days) and a sent value is overwritten | |
| projectId | No | Move to a different project id (optional) | |
| startDate | No | Start date ISO-8601 (optional; omit to keep the stored one, which must leave startDate <= endDate) | |
| assignedTo | No | Assigned user id (optional) | |
| description | No | New description (optional) | |
| isMilestone | No | Convert to/from a milestone (optional; omit to leave unchanged) | |
| durationUnit | No | Duration unit (optional) | |
| targetVersion | No | Target version (optional) | |
| resourceNeeded | No | Resource needed (optional) | |
| percentComplete | No | Percent complete 0-100 (optional) |