Skip to main content

Agents

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

create-agent​

Create an agent

Arguments​

ArgumentTypeRequiredDescription
project_idstringnoPublic ID of the project
ai_provider_idstringnoPublic ID of the AI provider to pin. Mutually exclusive with model_route_id.
model_route_idstringnoPublic ID of a model route in the same project. The agent's completion model is then resolved through the route's ordered targets with failover. Mutually exclusive with ai_provider_id and model.
namestringnoDisplay name.
instructionsstringnoSystem instructions, sent as the system message of every generation.
modelstringnoModel identifier on the pinned AI provider. Omitted, the provider's default model is used. Cannot be combined with model_route_id.
tool_bindingsarray<object>noTools to attach, one binding object per tool — the only attachment field. An entry is either a reference ({ "tool_id": … }) or an inline definition ({ "tool": … }). See Tool Bindings.
max_stepsnumbernoMaximum agent loop steps per turn (default 20).
tool_choiceanynoTool choice strategy. Accepts a string ("auto", "required") or an object ({ "type": "tool", "tool_name": "my_tool" }). A forcing value ("required" or the object form) forbids a final assistant message on every step of every turn, including a resumed or continued one, so it requires a has_tool_call entry in stop_conditions — otherwise the write is refused with FORCED_TOOL_CHOICE_CANNOT_STOP.
stop_conditionsarray<object>noConditions that end the agent's work early, on top of max_steps. Two scopes: {"type": "has_tool_call", "tool_name": "<resolved tool name>"} ends the turn after the step that calls the named tool. It narrows when the loop ends — it never lets it run past max_steps. {"type": "max_chain_generations", "max_generations": <n>} bounds the continuation chain instead: once the chain has spawned that many generations, further resumptions stop with chain_limit rather than extending it. It never shortens a turn. The effective ceiling is the smaller of this and the deployment's MAX_CONTINUATION_CHAIN_GENERATIONS, so an agent can be stricter than the platform but never looser. An unknown type, a has_tool_call without a tool_name, a max_chain_generations whose max_generations is not a positive integer, or a non-object entry is rejected with 400.
active_tool_idsarray<string>noPersisted tools from tool_bindings the model sees on every step. Omitted or [] leaves every bound tool active. See Active Tools.
guardrail_idsarray<string> | nullnoGuardrails attached at the agent scope.
step_rulesarray<object>noPer-step overrides of tool_choice and active_tool_ids, numbered from the first step of the turn. See Step Rules.
boundary_policyobject | nullnoRestricts which SOAT actions the agent may invoke. Evaluated as the intersection with the caller's own policy, so it can only narrow.
temperaturenumbernoSampling temperature passed to the model. Omitted, the provider's default applies.
knowledge_configobjectnoKnowledge search run before every generation; its matches are prepended as reference context. See Knowledge Config.
output_schemaobject | nullnoJSON Schema describing the structured object the model must return. When set, non-streaming generations constrain output to this schema and the parsed value is returned as output.object. The schema is enforced on the way back, not just sent to the model: an object that violates it fails the generation with 502 OUTPUT_SCHEMA_VALIDATION_FAILED, naming the violated field. Constraints beyond required/type (minLength, enum, pattern, minItems) are honored and are what reject a structurally valid but degenerate answer. See the Structured Output section in the Agents module docs.
prompt_cachingobject | nullnoPrompt caching for this agent's turns. {"enabled": true} marks a cache breakpoint at the end of the turn's static prefix — the tool definitions and the instructions together — so a provider that caches by explicit breakpoint reads that prefix back on every later step of the turn and every later turn of the session instead of being charged for it again. Null or omitted is off: a cache write costs more than an uncached token, so an agent whose prefix is never re-read would pay for the privilege. An agent with no instructions has no block to mark and caches nothing. Cache reads are reported as cached_tokens and cache writes as cache_write_tokens on usage.
max_context_messagesnumbernoMaximum number of recent messages included in the context window. Null means no limit.
single_session_per_actorbooleannoWhen true, only one open session per actor_id is allowed for this agent.
trace_content_modestring | nullnoZero-retention opt-in for this agent. null inherits the project's setting; none means trace and generation content is never written. Setting full under a project whose own mode is none is refused with 400 — the project is a floor an agent may only tighten.
on_approval_expirystring | nullnoWhat happens when one of this agent's held tool calls expires un-approved. null (the default) and terminate end the chain there — the expired approval, its approvals.expired event and the auto-filed approval_expired exception are the whole record. react spawns a continuation that reports the staleness to the agent, for an agent that acts on it.
version_labelstring | nullnoOptional tag for the config version this write archives (e.g. initial). Annotates the version only — it is not stored on the agent and is not part of the config, so labelling a change is never itself a change.

list-agents​

List agents

Arguments​

ArgumentTypeRequiredDescription
project_idstringnoProject public ID to filter by
limitnumbernoMaximum number of results to return
offsetnumbernoNumber of results to skip

get-agent​

Get an agent

Arguments​

ArgumentTypeRequiredDescription
agent_idstringyesAgent public ID

update-agent​

Update an agent

Arguments​

ArgumentTypeRequiredDescription
agent_idstringyesAgent public ID
ai_provider_idstring | nullnoPublic ID of the AI provider to pin. Mutually exclusive with model_route_id; set to null when switching to a route.
model_route_idstring | nullnoModel route in the same project. Mutually exclusive with ai_provider_id and model; set to null to clear.
namestring | nullnoDisplay name; null clears it.
instructionsstring | nullnoSystem instructions, sent as the system message of every generation; null clears them.
modelstring | nullnoModel identifier on the pinned AI provider; null falls back to the provider's default model. Cannot be combined with model_route_id.
tool_bindingsarray<object> | nullnoTools attached to the agent — the only attachment field. Replaces the whole binding list; set to null to clear. See Tool Bindings.
max_stepsnumber | nullnoMaximum agent loop steps per turn; null restores the default of 20.
tool_choiceanynoTool choice strategy. Accepts a string ("auto", "required") or an object ({ "type": "tool", "tool_name": "my_tool" }). A forcing value ("required" or the object form) forbids a final assistant message on every step of every turn, including a resumed or continued one, so it requires a has_tool_call entry in stop_conditions — otherwise the write is refused with FORCED_TOOL_CHOICE_CANNOT_STOP.
stop_conditionsarray<object> | nullnoConditions that end the agent's work early, on top of max_steps. Two scopes: {"type": "has_tool_call", "tool_name": "<resolved tool name>"} ends the turn after the step that calls the named tool. It narrows when the loop ends — it never lets it run past max_steps. {"type": "max_chain_generations", "max_generations": <n>} bounds the continuation chain instead: once the chain has spawned that many generations, further resumptions stop with chain_limit rather than extending it. It never shortens a turn. The effective ceiling is the smaller of this and the deployment's MAX_CONTINUATION_CHAIN_GENERATIONS, so an agent can be stricter than the platform but never looser. An unknown type, a has_tool_call without a tool_name, a max_chain_generations whose max_generations is not a positive integer, or a non-object entry is rejected with 400.
active_tool_idsarray<string> | nullnoPersisted tools from tool_bindings the model sees on every step. null or [] leaves every bound tool active. See Active Tools.
guardrail_idsarray<string> | nullnoGuardrails attached at the agent scope.
step_rulesarray<object> | nullnoPer-step overrides of tool_choice and active_tool_ids, numbered from the first step of the turn; null clears them. See Step Rules.
boundary_policyobject | nullnoRestricts which SOAT actions the agent may invoke. Evaluated as the intersection with the caller's own policy, so it can only narrow.
temperaturenumber | nullnoSampling temperature passed to the model; null restores the provider's default.
knowledge_configobject | nullnoKnowledge search run before every generation; its matches are prepended as reference context. null turns it off. See Knowledge Config.
output_schemaobject | nullnoJSON Schema describing the structured object the model must return. When set, non-streaming generations constrain output to this schema and the parsed value is returned as output.object. The schema is enforced on the way back, not just sent to the model: an object that violates it fails the generation with 502 OUTPUT_SCHEMA_VALIDATION_FAILED, naming the violated field. Constraints beyond required/type (minLength, enum, pattern, minItems) are honored and are what reject a structurally valid but degenerate answer. See the Structured Output section in the Agents module docs.
prompt_cachingobject | nullnoPrompt caching for this agent's turns. {"enabled": true} marks a cache breakpoint at the end of the turn's static prefix — the tool definitions and the instructions together — so a provider that caches by explicit breakpoint reads that prefix back on every later step of the turn and every later turn of the session instead of being charged for it again. Null or omitted is off: a cache write costs more than an uncached token, so an agent whose prefix is never re-read would pay for the privilege. An agent with no instructions has no block to mark and caches nothing. Cache reads are reported as cached_tokens and cache writes as cache_write_tokens on usage.
max_context_messagesnumber | nullnoMaximum number of recent messages included in the context window. Null means no limit.
single_session_per_actorboolean | nullnoWhen true, only one open session per actor_id is allowed for this agent.
trace_content_modestring | nullnoZero-retention opt-in for this agent. null inherits the project's setting; none means trace and generation content is never written. Setting full under a project whose own mode is none is refused with 400.
on_approval_expirystring | nullnoWhat happens when one of this agent's held tool calls expires un-approved. null (the default) and terminate end the chain there — the expired approval, its approvals.expired event and the auto-filed approval_expired exception are the whole record. react spawns a continuation that reports the staleness to the agent, for an agent that acts on it.
version_labelstring | nullnoOptional tag for the config version this write archives (e.g. pre-tone-change). Annotates the version only — it is not stored on the agent and is not part of the config, so labelling a change is never itself a change. Ignored when the write changes nothing, since no version is created.
expected_versionanynoRefuses the write unless the resource is at this version.

patch-agent​

Partially update an agent

Arguments​

ArgumentTypeRequiredDescription
agent_idstringyesAgent public ID
ai_provider_idstring | nullnoPublic ID of the AI provider to pin. Mutually exclusive with model_route_id; set to null when switching to a route.
model_route_idstring | nullnoModel route in the same project. Mutually exclusive with ai_provider_id and model; set to null to clear.
namestring | nullnoDisplay name; null clears it.
instructionsstring | nullnoSystem instructions, sent as the system message of every generation; null clears them.
modelstring | nullnoModel identifier on the pinned AI provider; null falls back to the provider's default model. Cannot be combined with model_route_id.
tool_bindingsarray<object> | nullnoTools attached to the agent — the only attachment field. Replaces the whole binding list; set to null to clear. See Tool Bindings.
max_stepsnumber | nullnoMaximum agent loop steps per turn; null restores the default of 20.
tool_choiceanynoTool choice strategy. Accepts a string ("auto", "required") or an object ({ "type": "tool", "tool_name": "my_tool" }). A forcing value ("required" or the object form) forbids a final assistant message on every step of every turn, including a resumed or continued one, so it requires a has_tool_call entry in stop_conditions — otherwise the write is refused with FORCED_TOOL_CHOICE_CANNOT_STOP.
stop_conditionsarray<object> | nullnoConditions that end the agent's work early, on top of max_steps. Two scopes: {"type": "has_tool_call", "tool_name": "<resolved tool name>"} ends the turn after the step that calls the named tool. It narrows when the loop ends — it never lets it run past max_steps. {"type": "max_chain_generations", "max_generations": <n>} bounds the continuation chain instead: once the chain has spawned that many generations, further resumptions stop with chain_limit rather than extending it. It never shortens a turn. The effective ceiling is the smaller of this and the deployment's MAX_CONTINUATION_CHAIN_GENERATIONS, so an agent can be stricter than the platform but never looser. An unknown type, a has_tool_call without a tool_name, a max_chain_generations whose max_generations is not a positive integer, or a non-object entry is rejected with 400.
active_tool_idsarray<string> | nullnoPersisted tools from tool_bindings the model sees on every step. null or [] leaves every bound tool active. See Active Tools.
guardrail_idsarray<string> | nullnoGuardrails attached at the agent scope.
step_rulesarray<object> | nullnoPer-step overrides of tool_choice and active_tool_ids, numbered from the first step of the turn; null clears them. See Step Rules.
boundary_policyobject | nullnoRestricts which SOAT actions the agent may invoke. Evaluated as the intersection with the caller's own policy, so it can only narrow.
temperaturenumber | nullnoSampling temperature passed to the model; null restores the provider's default.
knowledge_configobject | nullnoKnowledge search run before every generation; its matches are prepended as reference context. null turns it off. See Knowledge Config.
output_schemaobject | nullnoJSON Schema describing the structured object the model must return. When set, non-streaming generations constrain output to this schema and the parsed value is returned as output.object. The schema is enforced on the way back, not just sent to the model: an object that violates it fails the generation with 502 OUTPUT_SCHEMA_VALIDATION_FAILED, naming the violated field. Constraints beyond required/type (minLength, enum, pattern, minItems) are honored and are what reject a structurally valid but degenerate answer. See the Structured Output section in the Agents module docs.
prompt_cachingobject | nullnoPrompt caching for this agent's turns. {"enabled": true} marks a cache breakpoint at the end of the turn's static prefix — the tool definitions and the instructions together — so a provider that caches by explicit breakpoint reads that prefix back on every later step of the turn and every later turn of the session instead of being charged for it again. Null or omitted is off: a cache write costs more than an uncached token, so an agent whose prefix is never re-read would pay for the privilege. An agent with no instructions has no block to mark and caches nothing. Cache reads are reported as cached_tokens and cache writes as cache_write_tokens on usage.
max_context_messagesnumber | nullnoMaximum number of recent messages included in the context window. Null means no limit.
single_session_per_actorboolean | nullnoWhen true, only one open session per actor_id is allowed for this agent.
trace_content_modestring | nullnoZero-retention opt-in for this agent. null inherits the project's setting; none means trace and generation content is never written. Setting full under a project whose own mode is none is refused with 400.
on_approval_expirystring | nullnoWhat happens when one of this agent's held tool calls expires un-approved. null (the default) and terminate end the chain there — the expired approval, its approvals.expired event and the auto-filed approval_expired exception are the whole record. react spawns a continuation that reports the staleness to the agent, for an agent that acts on it.
version_labelstring | nullnoOptional tag for the config version this write archives (e.g. pre-tone-change). Annotates the version only — it is not stored on the agent and is not part of the config, so labelling a change is never itself a change. Ignored when the write changes nothing, since no version is created.
expected_versionanynoRefuses the write unless the resource is at this version.

delete-agent​

Delete an agent

Arguments​

ArgumentTypeRequiredDescription
agent_idstringyesAgent public ID
forcebooleannoWhen true, deletes the agent's dependent generations and traces, revokes its accepted shares and leaves its ingestion rules naming it instead of returning 409 AGENT_HAS_DEPENDENTS.

create-agent-generation​

Run an agent generation

Arguments​

ArgumentTypeRequiredDescription
agent_idstringyesAgent public ID
messagesarray<object>yesConversation turns, oldest first. Roles are user and assistant: the system prompt is the agent's instructions, so a system entry is refused with 400 SYSTEM_MESSAGE_NOT_ALLOWED.
tool_contextobject | nullnoKey-value pairs forwarded as X-Soat-Context-<key> headers on every http, mcp and builtin tool call in this generation. The header name is the deployment's configured context prefix (X-Soat-Context- by default) plus the key verbatim — no character is re-cased. Keys are never case-converted — they round-trip exactly as sent. An invalid or colliding key is rejected with 400 INVALID_TOOL_CONTEXT_KEY.
action_idstringnoLogical action label recorded on the generation's usage meter, so spend can be rolled up per action (e.g. an A/B/C/D operating action).
guardrail_contextobject | nullnoCaller-supplied guardrail context (the context.* namespace guard and class expressions read at tool-dispatch time). Free-form and never interpreted by the platform; a guardrail may combine it with a context_tool per its context_mode. See the guardrails module.
metadataanynoCaller-supplied key/value metadata attached to the generation record for per-run audit attribution (e.g. the ticket or case this action belongs to). Round-trips verbatim when the generation is fetched via the generations API. The bag is caller-owned and no key is reserved: server-owned state (usage attribution, the served agent version, the model route's record, the extraction summary, what knowledge retrieval served) lives in its own top-level generation fields and cannot be written from here. Use the request's own action_id field to set the usage-attribution label.
idempotency_keystringnoDeduplication key, unique within the project, that makes a retry of an at-least-once delivery or an ambiguous failure safe. The first request under a key runs the generation; any later request carrying it runs nothing and answers 202 with the generation the key names, whatever state it has reached — including a retry that arrives while the original is still running. The key is claimed by the generation record for as long as the record exists. Every other body field except stream is the request the key names: reusing a key with any of them changed, or on another agent of the project, is 409 IDEMPOTENCY_KEY_REUSED. stream and wait say how the caller receives the generation, not what it is, so a retry may flip them.
knowledge_configobject | nullnoPer-generation knowledge retrieval override. Array filters (memory_store_ids, document_ids, document_paths) are unioned with the agent's stored knowledge_config; tags pairs are merged with the override winning per key; scalar fields (min_score, rrf_k, recency_half_life_days, limit) use the per-generation value when present.

submit-agent-tool-outputs​

Submit tool outputs for a paused generation

Arguments​

ArgumentTypeRequiredDescription
agent_idstringyesAgent public ID
generation_idstringyesPublic ID of the generation paused at requires_action
tool_outputsarray<object>yesResults for the tool calls the paused generation is waiting on, one entry per tool_call_id.

list-agent-versions​

List an agent's config versions

Arguments​

ArgumentTypeRequiredDescription
agent_idstringyesAgent public ID
limitnumbernoMaximum number of results to return
offsetnumbernoNumber of results to skip

get-agent-version​

Get an archived agent config version

Arguments​

ArgumentTypeRequiredDescription
agent_idstringyesAgent public ID
versionnumberyesArchived config version number

restore-agent-version​

Restore an archived config as a new version

Arguments​

ArgumentTypeRequiredDescription
agent_idstringyesAgent public ID
versionnumberyesArchived config version number
labelstringnoTag for the version this restore creates. Defaults to restored from v{version}.

set-agent-release​

Set or replace a staged rollout

Arguments​

ArgumentTypeRequiredDescription
agent_idstringyesAgent public ID
stable_versionnumberyesAn existing version to serve as the baseline
canary_versionnumberyesAn existing version to trial. Must differ from stable_version.
canary_percentnumberyesPercentage of traffic to assign to canary_version
promotion_gatestring | nullnoEval to gate promotion on. It must belong to this project and evaluate this agent; anything else is a 400. Omit it, or send null, for a rollout that can be promoted at will.

promote-agent-release​

Promote the canary and end the rollout

Arguments​

ArgumentTypeRequiredDescription
agent_idstringyesAgent public ID

abort-agent-release​

Abort the rollout and roll back to stable

Arguments​

ArgumentTypeRequiredDescription
agent_idstringyesAgent public ID