update_plan
Partial update of a content plan: only the keys you send change; unspecified keys are preserved. Call get_plan FIRST to see the current state, then send a minimal diff. Use produce_plan (not this) to generate a plan's content.
Must-know rules:
plan_uuidis required (fromcreate_planorlist_plans).reference_document_ids,context_collection_idsandtargeting_dimension_ids: a non-empty array REPLACES the full set (not merge). An empty array[]is ignored, so this tool cannot clear them.blueprint_idanddue_date: null CLEARS the field.project_idandcategory_id: null is ignored; pass a new value to change one.blueprint_idtakes a blueprint UUID (fromlist_blueprints) or integer id.assigned_tomust be the NUMERIC user id of a current team member (emails and names are rejected). Assigning a private plan to someone else auto-promotes it to "team" visibility.visibility("private" | "team"): only the plan's creator may change it. Mention the change to the user before sending it.target_stagetriggers a stage transition, validated server-side (use the underscore formIn_Process). Common moves: Suggested → Accepted (user accepts), any open stage → Dismissed (terminal), Complete → Accepted (re-open: clearsproduced_content_id; confirm with the user FIRST).Never send server-managed fields (
source,source_metadata,created_by,team_id,id,produced_content_id, the timestamps); the server rejects them.
Present link_url exactly as returned.
Input roles:
plan_uuid: required. The UUID from a prior create_plan or list_plans response.
title / description / prompt: update the human-facing or executable text.
blueprint_id / project_id / category_id / due_date: update executable parameters (null clears blueprint_id and due_date; null is ignored for project_id and category_id).
assigned_to: there is no user-lookup tool; get the id from the user or from another plan's assigned_to/created_by. Self-assignment does not change visibility.
Allowed transitions: Suggested → Accepted (user accepts the suggestion) Suggested → Dismissed (user rejects it) Accepted → In_Process (content is being created; usually triggered automatically) Accepted → Dismissed In_Process → Complete (content reached ready; usually triggered automatically) In_Process → Accepted (content was deleted; plan reverts) In_Process → Dismissed Complete → Accepted (re-open the plan; clears produced_content_id and completed_at) Complete → Dismissed Dismissed → (nothing; terminal)
Do NOT send (server rejects with InputError "{field} is immutable" or "{field} is server-managed"): source, source_metadata, created_by, team_id, id, plan_uuid (as an update value), produced_content_id, created_at, updated_at, completed_at, dismissed_at.
Usage patterns:
Dismiss a plan: { plan_uuid: X, target_stage: "Dismissed" }
Re-open a Complete plan: { plan_uuid: X, target_stage: "Accepted" } (confirm with the user first)
Reassign: { plan_uuid: X, assigned_to: <user_id> }
Accept a Marcora-suggested plan: { plan_uuid: X, target_stage: "Accepted" }
Errors:
Missing param: plan_uuid. Pass the plan_uuid from a prior list_plans or create_plan response.
NotFound: plan_uuid doesn't exist or is not visible to your team.
InputError: stage transition {from} → {to} not allowed.
InputError: source is immutable / source_metadata is immutable.
InputError: assigned_to is not a member of the team.
InputError: assigned_to must be the numeric user id of a team member (a non-numeric value was sent).
InputError: only the plan creator can change visibility.
InputError: visibility must be one of [private, team].
AccessDenied: JWT doesn't resolve to the right team context.
Links: copy link_url character for character. Never retype, shorten, or rebuild a link or the IDs inside it.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"plan_uuid": "<plan_uuid>"
},
"name": "update_plan"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Update plan title (1-200 chars). | |
| prompt | No | Update the content prompt. | |
| due_date | No | Update due date (ISO YYYY-MM-DD). null clears it. | |
| plan_uuid | Yes | Required. UUID of the plan to update. | |
| project_id | No | Update project association. null is ignored; pass a new value to change it. | |
| visibility | No | Change the plan's visibility. Creator-only — non-creators get InputError. | |
| assigned_to | No | Reassign to a different team member (integer user ID). Must be a current team member. Assigning a private plan to anyone other than the calling user auto-promotes it to team visibility. | |
| category_id | No | Update category association. null is ignored; pass a new value to change it. | |
| description | No | Update plan description. | |
| blueprint_id | No | Update blueprint association — accepts a blueprint UUID (from list_blueprints) or integer id. null clears it. | |
| target_stage | No | Request a stage transition. Use UNDERSCORE form In_Process. Validated against the allowed-transition map; disallowed transitions return InputError. Allowed: Suggested, Accepted, In_Process, Complete, Dismissed. | |
| context_collection_ids | No | REPLACES full set of context collection associations with a non-empty array. [] is ignored, so this cannot clear the set. | |
| reference_document_ids | No | REPLACES full set of reference doc associations with a non-empty array. [] is ignored, so this cannot clear the set. | |
| targeting_dimension_ids | No | REPLACES full set of targeting dimension associations with a non-empty array. [] is ignored, so this cannot clear the set. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| stage | Yes | ||
| title | No | ||
| prompt | No | ||
| source | No | ||
| team_id | No | ||
| due_date | No | ||
| link_url | Yes | Shareable deep-link that opens the plans screen with this plan's detail overlay. Give this to the user. | |
| plan_uuid | Yes | ||
| created_at | No | ||
| created_by | No | ||
| project_id | No | ||
| updated_at | Yes | ||
| visibility | No | private = creator-only; team = visible to all active teammates. | |
| assigned_to | No | ||
| category_id | No | ||
| description | No | ||
| blueprint_id | No | ||
| completed_at | No | ||
| dismissed_at | No | ||
| source_metadata | No | ||
| context_collections | No | ||
| produced_content_id | No | ||
| reference_documents | No | ||
| targeting_dimensions | No |