Version
DESTRUCTIVE

update_sequence

Change a win-back sequence's name, trigger or switch, and replace its steps whole when given. Only the arguments present move. Emits sequence.updated.

Change a sequence without restating it: name, trigger and active move only when present, and steps, when present, replaces the whole list in order. A step still at its place keeps its id and a member due it keeps their position; the rest are appended and the extra ones removed from the end. An empty list removes every step.

Synchronous — the sequence as it then stands comes back, and sequence.updated emits once.

Switching off lets every member go

active: false ends every member's passage at once, as sequence.exited with the reason disabled, and enrols nobody until the sequence runs again; switching it back on enrols nobody retroactively. Confirm with the creator before pausing a sequence members are part-way through.

Read the steps first

The list is replaced by position, not merged by id. Read the sequence with get_sequence, change the list, and send it whole; omit steps to leave them alone.

Requires ability

The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.

The REST endpoint and this tool share one action, so validation, permissions and events are identical.

Delivered to every endpoint subscribed to it once the change is made.

Annotations

DestructiveIdempotentOpen world

A client that honours annotations asks a person before running it. Sending the same arguments twice changes nothing the second time. It reaches beyond Subscriby: a connector, a provider or a member.

Arguments

project_id*string

UUID of the project the sequence belongs to.

sequence_id*string

UUID of the sequence to change.

namestringoptional

A new creator-facing label, 1 to 120 characters.

triggerstringoptional

What enrols a member: "churned" is the only trigger available today.

activebooleanoptional

Switch the sequence on or off. Off lets every member part-way through go and enrols nobody until it runs again.

stepsobject[]optional

The whole list of steps in order, at most 8, replacing the stored list: each {delay_days: int 1-180, body: string up to 1,000 characters, coupon_id?: UUID}. A step still at its place keeps its id. Omit to leave the steps alone; send an empty list to remove them all.

What it returns

{  "data": {    "id": "9d2f4b6a-1c3e-4f58-8a7b-6e5d4c3b2a19",    "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",    "name": "Win-back after churn",    "trigger": "churned",    "active": false,    "steps": [      { "id": "4e8a2c6d-7b1f-4d93-a5c0-8f2e1b7d6c54", "position": 1, "delay_days": 2, "body": "Hi {name}, your place in {project} is still here: {link}", "coupon": null }    ],    "counts": { "enrolled": 12, "open": 0, "completed": 6, "won_back": 2 },    "created_at": "2026-10-01T09:00:00+00:00",    "updated_at": "2026-10-12T09:05:00+00:00",    "deleted_at": null  }}

How it fails

VALIDATION_FAILED

the owner's plan lacks sequences, a reserved trigger, a name outside 1..120 characters, more than 8 steps, a step out of bounds, or a coupon_id of another project.

RESOURCE_NOT_FOUND

unknown project_id or sequence_id, a sequence of another project, or one the creator deleted.

AUTHENTICATION_REQUIRED

no authenticated user on the request.

TOKEN_MISSING_ABILITY

token lacks project-sequence:update.

How is this guide?

Last updated on