Edit a user story
userstory.updateChanges dataCreates, updates or deletes something in your workspace.What it does
Changes a user story of the connected workspace: title (unique across features and stories in the workspace), description, the "as a / I want / so that" statement, story points, assignee, priority, parent feature, status, and its breakdown (edgeCases, nonFunctional, dependencies, assumptions, outOfScope, risks, sourceRequirement). Send only what changes; a breakdown field given replaces that field only, and null removes it. Its acceptance-criteria test cases are edited with case.update; the Definition of Ready / Done checklist is ticked by a person (userstory.gates); lifecycle and release have their own tools. Editing a story does not reset its review. Get the id from feature.list. Returns {success, data: the updated story, uri}.
Ask your agent
You don’t call userstory.update yourself. Say something like this to Claude Code, Cursor or another MCP-connected agent:
- “The saved-card story is 5 points, not 3”
- “Assign the order tracking story to me”
- “Add "card expired" as an edge case of the saved-card story”
Inputs
| Name | Type | Description |
|---|---|---|
suiteIdrequired | string | Id of the user story (the id from feature.list). |
titleoptional | string | New title, unique across features and stories in the workspace. |
descriptionoptional | string | null | New description; null clears it. |
asAoptional | string | Who the user is (the "As a ..." part). |
iWantoptional | string | What they want to do (the "I want ..." part). |
soThatoptional | string | Why it matters to them (the "so that ..." part). |
storyPointsoptional | integer | null | Estimate in story points; null clears it. |
assigneeIdoptional | string | null | User id of the person building it (a member of this workspace); null clears it. |
priorityoptional | enum | P0 = critical; P1 = high; P2 = normal; P3 = nice to have. Allowed: P0P1P2P3 |
parentFeatureIdoptional | string | Move it under another feature (the id from feature.list); a story always has a parent. |
statusoptional | enum | ACTIVE, or INACTIVE to hide it. Allowed: ACTIVEINACTIVE |
edgeCasesoptional | any | string[] | null | Error states, boundaries, empty states and permission cases to cover (each becomes a negative or boundary acceptance case). |
nonFunctionaloptional | any | string[] | null | Performance, security, accessibility or scalability requirements, where they apply. |
dependenciesoptional | any | string[] | null | Other stories or external systems this one needs first. |
assumptionsoptional | any | string[] | null | Things assumed true that would change the scope if wrong. |
outOfScopeoptional | any | string | null | What this story deliberately leaves out. |
risksoptional | any | object[] | null | Risks, each with an optional mitigation. |
sourceRequirementoptional | any | string | null | The original requirement text this story came from, kept for traceability. Copy it, do not rewrite it. |
The MCP call
What the agent’s MCP client sends (placeholders in angle brackets):
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "userstory.update",
"arguments": {
"suiteId": "<suiteId>"
}
}
}Connect your agent
npx -y @testmaze/mcp init tmt_xxx claude mcp add tm --scope project -- npx -y @testmaze/mcp
Create the token in your Test Maze workspace under Settings → MCP. Setup for Cursor, Cline, Gemini CLI and Codex CLI is shown there too.
More features & user stories tools
- List features and user stories
feature.list - Create a feature
feature.create - Create a user story under a feature
userstory.create - Move a feature or story to a new stage
feature.set_lifecycle - Check a user story's Definition of Ready and Done
userstory.gates - Suggest Definition of Ready / Done items for a user story
userstory.suggest_checklist - Plan a feature into a release
feature.set_release - Edit a feature
feature.update