Skip to main content

Orchestrations

MCP tools for the Orchestrations module. See the Orchestrations module docs for permissions and data model.

create-orchestration​

Create an orchestration

Arguments​

ArgumentTypeRequiredDescription
project_idstringnoPublic ID of the project. Optional when authenticating with a project-scoped API key, which defaults to the key's project; required otherwise.
namestringyesHuman-readable name.
descriptionstring | nullno—
nodesarray<object>yesThe graph's nodes. Each id is unique and is what edges and nodes.<id> state references name; a node with no incoming edge starts the run.
edgesarray<object>yesDirected edges between node ids. Every from/to must name a node in nodes, and the graph must be acyclic unless it contains a loop node. A node with several outgoing edges activates every target in parallel. [] for a graph of independent nodes.
state_schemaobject | nullno—
input_schemaobject | nullno—
output_mappingobject | nullnoThe shape of a succeeded run's output, owned by the orchestration rather than by its terminal node ids. Each key is an output field (a dotted key such as summary.title builds a nested object); each value is JSON Logic (https://jsonlogic.com) evaluated against { "state": <final run state> }, which includes state.input and state.nodes.<id>. A missing path maps to null; a mapping that throws fails the run. Null (or omitted) keys output by terminal node id. Versioned with the graph; null on update clears it.
version_labelstringnoOptional tag for the version this create archives, e.g. initial.

list-orchestrations​

List orchestrations

Arguments​

ArgumentTypeRequiredDescription
project_idstringnoFilter by project public ID
limitnumbernoResults per page. Above the maximum it is clamped, and limit in the response reports the page served; below 1 or not an integer it is 400 VALIDATION_FAILED.
offsetnumbernoResults to skip. Negative or not an integer it is 400 VALIDATION_FAILED.

validate-orchestration​

Validate an orchestration graph

Arguments​

ArgumentTypeRequiredDescription
nodesarray<object>noThe graph's nodes. Each id is unique and is what edges and nodes.<id> state references name; a node with no incoming edge starts the run. Checked exactly as create checks them, without persisting.
edgesarray<object>noDirected edges between node ids. Every from/to must name a node in nodes, and the graph must be acyclic unless it contains a loop node. A node with several outgoing edges activates every target in parallel. Checked exactly as create checks them, without persisting.
input_schemaobject | nullnoOptional JSON Schema for run inputs; its top-level properties seed state.

get-queue-stats​

Get orchestration queue stats

Arguments​

This tool takes no arguments.

list-queue-stats-projects​

List the projects with queued orchestration work

Arguments​

ArgumentTypeRequiredDescription
limitnumbernoResults per page. Above the maximum it is clamped, and limit in the response reports the page served; below 1 or not an integer it is 400 VALIDATION_FAILED.
offsetnumbernoResults to skip. Negative or not an integer it is 400 VALIDATION_FAILED.

get-orchestration​

Get an orchestration

Arguments​

ArgumentTypeRequiredDescription
orchestration_idstringyesPublic ID of the orchestration (orch_...)

update-orchestration​

Update an orchestration

Arguments​

ArgumentTypeRequiredDescription
orchestration_idstringyesPublic ID of the orchestration (orch_...)
namestringno—
descriptionstring | nullno—
nodesarray<object>noThe graph's nodes. Each id is unique and is what edges and nodes.<id> state references name; a node with no incoming edge starts the run. Replaces the stored list; omitted, the stored nodes are kept and validated against the new edges.
edgesarray<object>noDirected edges between node ids. Every from/to must name a node in nodes, and the graph must be acyclic unless it contains a loop node. A node with several outgoing edges activates every target in parallel. Replaces the stored list; omitted, the stored edges are kept and validated against the new nodes.
state_schemaobject | nullno—
input_schemaobject | nullno—
output_mappingobject | nullnoThe shape of a succeeded run's output, owned by the orchestration rather than by its terminal node ids. Each key is an output field (a dotted key such as summary.title builds a nested object); each value is JSON Logic (https://jsonlogic.com) evaluated against { "state": <final run state> }, which includes state.input and state.nodes.<id>. A missing path maps to null; a mapping that throws fails the run. Null (or omitted) keys output by terminal node id. Versioned with the graph; null on update clears it.
version_labelstringnoOptional tag for the version this write archives, e.g. pre-rewire. Ignored when the write changes no graph field, since no version is archived.
expected_versionanynoRefuses the write unless the resource is at this version.

delete-orchestration​

Delete an orchestration

Arguments​

ArgumentTypeRequiredDescription
orchestration_idstringyesPublic ID of the orchestration (orch_...)

list-orchestration-versions​

List an orchestration's graph versions

Arguments​

ArgumentTypeRequiredDescription
orchestration_idstringyesPublic ID of the orchestration (orch_...)
limitnumbernoResults per page. Above the maximum it is clamped, and limit in the response reports the page served; below 1 or not an integer it is 400 VALIDATION_FAILED.
offsetnumbernoResults to skip. Negative or not an integer it is 400 VALIDATION_FAILED.

get-orchestration-version​

Fetch an archived orchestration version

Arguments​

ArgumentTypeRequiredDescription
orchestration_idstringyesPublic ID of the orchestration (orch_...)
versionnumberyesThe archived version number

restore-orchestration-version​

Restore an archived orchestration graph

Arguments​

ArgumentTypeRequiredDescription
orchestration_idstringyesPublic ID of the orchestration (orch_...)
versionnumberyesThe archived version number
labelstringnoOptional tag for the version the restore creates. Defaults to restored from v<version>.

start-orchestration-run​

Start an orchestration run

Arguments​

ArgumentTypeRequiredDescription
orchestration_idstringyesOrchestration to run (orch_...).
inputobjectnoInitial state for the run (merged with orchestration defaults).
tool_contextobjectnoKey-value pairs forwarded as X-Soat-Context-<key> headers on every http, mcp and builtin tool call made by an agent node of this run — including the agents of any child run a loop or sub_orchestration node starts. The header name is X-Soat-Context- plus the key verbatim; no character is re-cased. The bag is stored on the run and re-read on every step, so it survives an awaiting_input pause, a sleeping wait, a background worker drive and a crash redrive. It is write-only: a run is a record every principal who may read runs can read, and a credential in it is not theirs to see, so it is never returned on one. It also does not outlive the run: reaching a terminal status (succeeded, failed, cancelled or expired) clears it. A key that is not a valid HTTP header name, or two keys that map to the same header, are rejected with 400 INVALID_TOOL_CONTEXT_KEY and no run is created. The reserved identity keys (session_id, actor_id, actor_external_id) are stripped at generation time — a caller cannot address them from here.
metadataanynoCaller-supplied key/value metadata attached to the run record for per-run attribution (e.g. which of your own tenants this run belongs to, or the dispatch batch that started it). Round-trips verbatim on every read of the run, on the list as well as the single read. The bag is caller-owned and no key is reserved: server-owned state (status, the pinned orchestration version, the trace, usage, artifacts, the run's own input and accumulated state) lives in its own top-level field and cannot be written from here. It is not merged into run state: no graph node sees it, and an input_schema never has to tolerate it — which is what makes it the place for an infrastructural label, rather than input. Keys are never transformed. It is not inherited by the child runs a loop or sub_orchestration node starts; each child carries whatever the graph gives it, which today is nothing.
idempotency_keystringnoDeduplication key, unique within the project, that makes a retry of an ambiguous failure safe. The first request under a key starts the run and answers 201; any later request carrying the same key answers 200 with that same run, whatever state it has reached — including a retry that arrives while the original is still running. The key is claimed by the run record and stays claimed for as long as the record exists, so it never silently expires and lets a second run through. orchestration_id, input, tool_context and metadata are the request the key names: reusing a key with any of them changed is 409 IDEMPOTENCY_KEY_REUSED rather than a replay of a run that does something else. wait is not part of that comparison — it says how the caller waits, not what the run is — so a retry may flip it.
waitbooleannoWhen true, block until the run reaches a terminal (succeeded/failed) or awaiting_input state and return the settled run. When false (default), return immediately with status "queued" and execute the run in the background.

list-orchestration-runs​

List orchestration runs

Arguments​

ArgumentTypeRequiredDescription
project_idstringnoNarrow the listing to one project (proj_...). A project-scoped key lists its own project without it.
orchestration_idstringnoFilter by orchestration public ID (orch_...)
parent_orchestration_run_idstringnoFilter to the runs one specific parent run's loop / sub_orchestration nodes started (run_...). This is how a caller holding a parent names the individual children behind its usage.
nestedbooleannoFilter by whether the run was started by another run. false returns only the runs a caller started (no parent), which is the set to sum usage over; true returns only the runs a loop / sub_orchestration node started, across every parent. Omit to return both. Contradicting parent_orchestration_run_id with nested=false is a 400; any value other than true or false is a 400.
statusarray<string>noFilter by run status. Repeat the parameter to OR values — status=queued&status=running&status=sleeping&status=awaiting_input is the set still driving, which is how a caller finds live work without paging every run the project ever started. There is no non_terminal shorthand on purpose: which statuses count as live is the caller's policy. A value outside the enum, empty string included, is a 400.
limitnumbernoResults per page. Above the maximum it is clamped, and limit in the response reports the page served; below 1 or not an integer it is 400 VALIDATION_FAILED.
offsetnumbernoResults to skip. Negative or not an integer it is 400 VALIDATION_FAILED.

cancel-orchestration-run​

Cancel an orchestration run

Arguments​

ArgumentTypeRequiredDescription
orchestration_run_idstringyesPublic ID of the run (run_...)

pause-orchestration-run​

Pause an orchestration run

Arguments​

ArgumentTypeRequiredDescription
orchestration_run_idstringyesPublic ID of the run (run_...)
reasonstringnoWhy the run is being paused, surfaced on the parked run's required_action.reason and on pause_reason.

submit-human-input​

Submit human input

Arguments​

ArgumentTypeRequiredDescription
orchestration_run_idstringyesPublic ID of the run (run_...)
node_idstringyesID of the human node to satisfy.
outputobjectnoOutput/response provided by the human reviewer.

resume-orchestration-run​

Resume an orchestration run

Arguments​

ArgumentTypeRequiredDescription
orchestration_run_idstringyesPublic ID of the run (run_...)

get-orchestration-run​

Get an orchestration run

Arguments​

ArgumentTypeRequiredDescription
orchestration_run_idstringyesPublic ID of the run (run_...)

list-orchestration-run-node-executions​

List a run's node executions

Arguments​

ArgumentTypeRequiredDescription
orchestration_run_idstringyesPublic ID of the run (run_...)
limitnumbernoResults per page. Above the maximum it is clamped, and limit in the response reports the page served; below 1 or not an integer it is 400 VALIDATION_FAILED.
offsetnumbernoResults to skip. Negative or not an integer it is 400 VALIDATION_FAILED.