update_work_item
Changes a work item in part; the criteria, components and labels are replaced only when their list is sent, and every change writes a version.
Change a work item by work_item_id with any of title, type, description (HTML), epic_id, parent_id, priority, the four people, story_points, estimate_minutes, remaining_minutes, due_on, component_ids and label_ids (each replaces its list), the story fields persona_id, as_a, i_want, so_that, business_value_points and acceptance_criteria (replaces the list; a row with an id keeps and changes that criterion), the bug fields severity, environment_id, component_id, steps_to_reproduce, expected_result, actual_result, reproducible, and the spike fields timebox_minutes and outcome. A field left out keeps its value; a field sent as null is cleared. Changing the type drops the fields the new kind does not carry. The change goes through the same action the Backlog page runs, writes a version a person can put back, and work_item.updated goes out.
The status moves through move_work_item and the assignee may also move through assign_work_item. A staff token with work-item:update on the project is needed.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Fires one event
Delivered to every endpoint subscribed to it once the change is made.
Annotations
A client that honours annotations asks a person before running it.
Arguments
work_item_id*stringUUID of the work item.
titlestringoptionalThe title, 3 to 200 characters.
typestringoptionalThe kind; changing it drops the fields the new kind does not carry.
storytasksubtaskbugspikeimprovementdescriptionstringoptionalWhat the item is, as HTML.
epic_idstringoptionalUUID of the epic it hangs under.
sprint_idstringoptionalUUID of the planned or running sprint it is planned into; null for the backlog.
parent_idstringoptionalUUID of the story or task a sub-task or bug hangs under.
prioritystringoptionalHow urgent it is; medium by default.
lowestlowmediumhighhighestassignee_idstringoptionalUUID of the person doing the work.
reporter_idstringoptionalUUID of the person who raised it; the acting person when left out on a create.
reviewer_idstringoptionalUUID of the person who reviews the code.
qa_owner_idstringoptionalUUID of the person who verifies it.
story_pointsstringoptionalThe estimate on the project's scale, as text such as 5 or M.
estimate_minutesintegeroptionalThe estimate in minutes.
remaining_minutesintegeroptionalWhat is left, in minutes.
due_onstringoptionalWhen it is due, YYYY-MM-DD.
persona_idstringoptionalUUID of the persona a story is written as.
as_astringoptionalThe persona of a story, as in "returning shopper".
i_wantstringoptionalWhat they want, as in "to reorder my last basket".
so_thatstringoptionalWhy, as in "I do not pick every item again".
business_value_pointsintegeroptionalThe value of a story, in points.
severitystringoptionalHow badly a bug hurts.
blockercriticalmajorminortrivialenvironment_idstringoptionalUUID of the environment a bug was seen in.
component_idstringoptionalUUID of the component a bug was found in.
steps_to_reproducestringoptionalHow to make a bug happen, as HTML.
expected_resultstringoptionalWhat should have happened, as HTML.
actual_resultstringoptionalWhat happened, as HTML.
reproduciblestringoptionalHow reliably a bug comes back.
alwayssometimesoncenot_reproducedtimebox_minutesintegeroptionalA spike's time box, in minutes.
outcomestringoptionalA spike's outcome, as HTML.
component_idsstring[]optionalUUIDs of the components the item touches; the list replaces the current one.
label_idsstring[]optionalUUIDs of the labels pinned on the item; the list replaces the current one.
acceptance_criteriaarrayoptionalThe criteria that say when a story is done, replacing the list: objects with title (required), given, when, then and kind (functional, negative, edge or non_functional); a row with an id keeps that criterion.
What it returns
{ "data": { "id": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e", "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13", "number": 8, "reference": "SCL-8", "type": "story", "parent_id": null, "epic_id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d", "title": "Track my order from my phone", "description": null, "status": "backlog", "resolution": null, "priority": "medium", "assignee_id": null, "assignee_name": null, "reporter_id": "5b6c7d8e-9f0a-4b1c-8d2e-3f4a5b6c7d8e", "reporter_name": "Bea Analyst", "reviewer_id": null, "qa_owner_id": null, "story_points": "3", "estimate_minutes": null, "remaining_minutes": null, "due_on": null, "started_at": null, "completed_at": null, "persona_id": "6f7a8b9c-0d1e-4f2a-8b3c-4d5e6f7a8b9c", "as_a": "busy parent", "i_want": "to see where my laundry is", "so_that": "I know when to collect it", "business_value_points": null, "severity": null, "environment_id": null, "component_id": null, "steps_to_reproduce": null, "expected_result": null, "actual_result": null, "reproducible": null, "timebox_minutes": null, "outcome": null, "component_ids": [], "labels": [], "acceptance_criteria": [ { "id": "c3d4e5f6-a7b8-4c9d-8e0f-1a2b3c4d5e6f", "work_item_id": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e", "position": 1, "title": "The status page shows the current stage and the next one", "given": null, "when": null, "then": null, "kind": "functional", "verified_at": null, "verified_by": null } ], "position": 8, "version": 2, "approved_at": null, "created_at": "2026-10-28T10:08:00+00:00", "updated_at": "2026-10-28T10:20:00+00:00" }}How it fails
VALIDATION_FAILEDa field outside its limits, a value outside its set, an epic, parent, persona, component, environment or label that is not the project's, a parent the kind does not allow, a person who is not on the team, or a criterion without a title.
RESOURCE_NOT_FOUNDunknown work_item_id, or an item outside the token's scope or the person's visibility.
FORBIDDENthe token is a client guest's, or the holder's role on the project does not carry work-item:update.
TOKEN_MISSING_ABILITYtoken lacks work-item:update.
How is this guide?
Last updated on