Skip to main content
Glama

Update task

update_task
Idempotent

Update 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

TableJSON Schema
NameRequiredDescriptionDefault
idYesTask id
titleNoNew title (optional)
statusNoNew 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.
endDateNoEnd date ISO-8601 (optional; omit to keep the stored one, which must leave endDate >= startDate)
durationNoDuration value (optional). In Days it is derived from the dates (working days) and a sent value is overwritten
projectIdNoMove to a different project id (optional)
startDateNoStart date ISO-8601 (optional; omit to keep the stored one, which must leave startDate <= endDate)
assignedToNoAssigned user id (optional)
descriptionNoNew description (optional)
isMilestoneNoConvert to/from a milestone (optional; omit to leave unchanged)
durationUnitNoDuration unit (optional)
targetVersionNoTarget version (optional)
resourceNeededNoResource needed (optional)
percentCompleteNoPercent complete 0-100 (optional)

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses behavior far beyond annotations: server-side read-then-merge despite a full-replace PUT, member role limits (date changes and isMilestone silently ignored), specific rejection codes (400 for undefined status, 422 for missing/inverted ranges and summary-task writes), and milestone forcing of endDate/duration/progress. These are exactly the non-obvious traits an agent needs before mutating a task.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the merge rule, and the single heading (WORK BREAKDOWN STRUCTURE) helps, but the block is roughly 350 words with the entire per-workspace status/progress explanation repeated verbatim from the status property's schema description. Valuable content, but it is overlarge and mid-paragraph transitions ('WORK BREAKDOWN STRUCTURE.') do little to structure the read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter mutation tool with no output schema, nearly every risky path is covered: validation failures, role-based no-ops, milestone and summary-task invariants, and the return value ('Returns the updated task'). Nothing essential to a correct call is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning the schema does not: empty string clears a text field, omitted dates are preserved, milestones accept either date and copy it, and summary-task fields are rejected. Date invariants (startDate <= endDate, child >= parent end dates) are spelled out rather than left to the terse schema hints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update a task') and immediately clarifies the merge contract, which is the key semantic. It explicitly distinguishes itself from set_task_parent ('To move a task within the breakdown use set_task_parent, not this tool') and from create_task_dependency for scheduling links. An agent can tell what this tool owns without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives strong conditional guidance: call list_task_statuses before setting a status, send status and percentComplete together to avoid progress overwrite, change children instead of summary tasks, use set_task_parent for re-parenting. What's missing is routing to the obvious siblings set_task_status and set_task_progress when only status or progress changes, which would help the agent choose between near-duplicate tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources