Tool catalog
All 36 Andy MCP tools, generated from the v2 tool registry.
Outcome
List every tool advertised by https://app.andypartner.com/api/mcp, in the order the server returns them, with the granular Tenant Operation each one composes.
Source
- MCP surface: the v2 tool registry — 36 tools, and no others
- Granular Tenant Operations behind them: see the CLI Reference, which lists every operation including the ones that are CLI/HTTP-only
Authorization, roles, scopes, Entitlements, idempotency and stable problems stay server-side per granular operation. A merged tool takes a closed action discriminator validated before dispatch.
Tools
| # | MCP tool | Title | Composes | Scope |
|---|---|---|---|---|
| 1 | get_context | Get Andy context | get_context | — |
| 2 | select_workspace | Select Andy Workspace | select_workspace | — |
| 3 | get_agent | Get Andy Agent | agent.list, agent.inspect | — |
| 4 | configure_agent | Configure Andy Agent | agent.configure | — |
| 5 | manage_agent | Manage Andy Agent lifecycle | create → agent.create; delete → agent.delete | — |
| 6 | list_conversations | List Andy Conversations | conversation.list | agent:read |
| 7 | list_conversation_messages | List Andy Conversation Messages | conversation.message.list | agent:read |
| 8 | inspect_reply_eligibility | Inspect Conversation Reply Eligibility | conversation.reply_eligibility.inspect | agent:read |
| 9 | manage_handoff | Manage Conversation handoff | takeover → conversation.handoff.takeover; hand_back → conversation.handoff.hand_back | agent:write |
| 10 | send_message | Send Conversation Message | conversation.message.send | agent:write |
| 11 | ask_agent | Ask Andy Agent | the Agent runtime (no Tenant Operation) | — |
| 12 | list_posts | List Andy Posts | content.post.list, content.post.inspect | content:read |
| 13 | manage_post | Manage Andy Post | approve → content.post.approve; reject → content.post.reject; mark_promoted → content.post.mark_promoted; reschedule → content.post.reschedule; pause → content.post.pause; resume → content.post.resume; create → content.post.create; edit → content.post.edit; cancel → content.post.cancel | content:write |
| 14 | manage_media | Manage Andy Media | upload_bytes → content.media.upload_bytes; prepare → content.media.upload_prepare; complete → content.media.upload_complete; list → content.media.list; inspect → content.media.inspect; attach → content.media.attach | content:write, content:read |
| 15 | render_post | Request locked Post render | content.post.render_request | content:write |
| 16 | manage_generation | Manage Andy Video Generation | quote → content.generation.quote; request → content.generation.request; inspect → content.generation.inspect; recover → content.generation.recover; active → content.generation.active | content:read, content:write |
| 17 | list_connections | List Andy Platform Connections | content.connection.list | content:connections |
| 18 | manage_connection | Manage Andy Platform Connection | connect → content.connection.connect; inspect → content.connection.inspect; preflight → content.connection.preflight; disconnect → content.connection.disconnect | content:connections |
| 19 | list_routines | List Andy Routines | content.routine.list, content.routine.inspect | content:read |
| 20 | manage_routine | Manage Andy Routine | create → content.routine.create; clone → content.routine.clone; update → content.routine.update; pause → content.routine.pause; resume → content.routine.resume; run_now → content.routine.run_now | content:write |
| 21 | list_intents | List Andy Intents | content.intent.list, content.intent.inspect | content:read |
| 22 | manage_brand | Manage Andy Brand | inspect_voice → content.voice.inspect; inspect_policy → content.policy.inspect; inspect_look → content.look.inspect; set_voice → content.voice.set; set_voice_custom → content.voice.set; reset_voice → content.voice.set; set_policy_custom → content.policy.set; reset_policy → content.policy.set; set_look_custom → content.look.set; reset_look → content.look.set; create_intent → content.intent.create; update_intent → content.intent.update | content:read, content:write |
| 23 | capture_artifact | Capture content artifact | content.artifact.capture | content:write |
| 24 | list_knowledge | List Agent Knowledge | knowledge_source.list, knowledge_source.inspect | — |
| 25 | add_knowledge | Add Agent Knowledge | knowledge_source.add | — |
| 26 | replace_knowledge | Replace Agent Knowledge | knowledge_source.replace | — |
| 27 | append_journal_entry | Append personal journal entry | content.engine.append_journal_entry | content:write |
| 28 | trigger_engine_run | Trigger content engine run | content.engine.trigger_run | content:write |
| 29 | list_approval_queue | List content approval queue | content.engine.list_approval_queue | content:read |
| 30 | get_engine_run | Inspect content engine run | content.engine.get_run | content:read |
| 31 | list_context_sources | List Context Sources | context.source.list, context.source.inspect | content:read |
| 32 | manage_context_source | Manage Context Source | create → context.source.create; update → context.source.update; refresh → context.source.refresh; pause → context.source.pause; resume → context.source.resume; archive → context.source.archive | content:write |
| 33 | list_context_observations | List Context Observations | context.observation.list | content:read |
| 34 | manage_outreach_batch | Manage outreach batch | prepare → outreach.batch.prepare; inspect → outreach.batch.inspect; revise → outreach.batch.revise; approve → outreach.batch.approve; defer → outreach.batch.defer | agent:write, agent:read |
| 35 | manage_outreach_preparation | Manage outreach preparation | start → outreach.preparation.start; resume → outreach.preparation.resume; inspect → outreach.preparation.inspect | agent:write, agent:read |
| 36 | manage_outreach_outcomes | Manage outreach outcomes | inspect → outreach.outcomes.inspect; record → outreach.outcomes.record | agent:read, agent:write |
Annotations
Every tool declares all four booleans explicitly; none relies on a protocol default. An annotation describes the tool's maximum effect, not its safest call.
| MCP tool | readOnlyHint | destructiveHint | idempotentHint | openWorldHint |
|---|---|---|---|---|
get_context | yes | no | yes | no |
select_workspace | no | no | yes | no |
get_agent | yes | no | yes | no |
configure_agent | no | yes | yes | no |
manage_agent | no | yes | no | no |
list_conversations | yes | no | yes | no |
list_conversation_messages | yes | no | yes | no |
inspect_reply_eligibility | yes | no | yes | no |
manage_handoff | no | yes | yes | no |
send_message | no | yes | no | yes |
ask_agent | no | yes | no | yes |
list_posts | yes | no | yes | no |
manage_post | no | yes | no | yes |
manage_media | no | yes | no | no |
render_post | no | no | yes | no |
manage_generation | no | yes | no | yes |
list_connections | yes | no | yes | no |
manage_connection | no | yes | no | yes |
list_routines | yes | no | yes | no |
manage_routine | no | yes | no | no |
list_intents | yes | no | yes | no |
manage_brand | no | yes | no | no |
capture_artifact | no | no | yes | no |
list_knowledge | yes | no | yes | no |
add_knowledge | no | no | no | no |
replace_knowledge | no | yes | no | no |
append_journal_entry | no | no | yes | no |
trigger_engine_run | no | no | yes | no |
list_approval_queue | yes | no | yes | no |
get_engine_run | yes | no | yes | no |
list_context_sources | yes | no | yes | no |
manage_context_source | no | yes | no | no |
list_context_observations | yes | no | yes | no |
manage_outreach_batch | no | yes | yes | no |
manage_outreach_preparation | no | no | yes | no |
manage_outreach_outcomes | no | no | yes | no |
Descriptions
get_context
Return everything needed to route any Andy operation in one call: the connected identity and its capabilities, accessible Workspaces, the selected Workspace with its provenance, that Workspace's active Agents and live Entitlements, its labeled Platform Connections (the destinations a Post can publish to), availability, and ready-to-run repairs when no Workspace is selected. When agentsCompleteness.status is truncated, call this again with its nextCursor as agentsCursor to read the remaining Agents.
- Composes:
get_context - Annotations:
readOnlyHint: true,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"agentsCursor": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
}select_workspace
Bind one accessible Workspace to this MCP session and answer with the same complete context bundle as get_context, so no further orientation call is needed.
- Composes:
select_workspace - Annotations:
readOnlyHint: false,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"minLength": 1
}
},
"required": [
"workspaceId"
],
"additionalProperties": false
}get_agent
Without agentId, list the active Agents of the selected Workspace so a model can pick one by name. With agentId, inspect exactly that Agent including its behavior configuration. This is a read: it never asks for an Agent to be selected.
- Composes:
agent.list,agent.inspect - Annotations:
readOnlyHint: true,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"type": "object",
"properties": {
"cursor": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"pageSize": {
"default": 50,
"type": "integer",
"minimum": 1,
"maximum": 100
},
"agentId": {
"type": "string",
"minLength": 1
}
},
"required": [],
"additionalProperties": false,
"oneOf": [
{
"title": "list",
"required": [],
"not": {
"anyOf": [
{
"required": [
"agentId"
]
}
]
}
},
{
"title": "inspect",
"required": [
"agentId"
],
"not": {
"anyOf": [
{
"required": [
"cursor"
]
},
{
"required": [
"pageSize"
]
}
]
}
}
]
}configure_agent
Apply a partial, validated behavior configuration to one Agent and return the resulting Agent. Omitted, agentId resolves to the Workspace's sole active Agent; with several Agents the answer carries one ready-to-run call per Agent.
- Composes:
agent.configure - Annotations:
readOnlyHint: false,destructiveHint: true,idempotentHint: true,openWorldHint: false
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"agentId": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"defaultLanguage": {
"type": "string",
"enum": [
"en",
"es"
]
},
"instructions": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 20000
},
{
"type": "null"
}
]
},
"temperature": {
"type": "number",
"minimum": 0,
"maximum": 2
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
}
},
"additionalProperties": false
}manage_agent
action "create" creates an Agent in the selected Workspace under current Entitlements and Limits — it needs no existing Agent. action "delete" soft-deletes exactly one Agent: agentId is never auto-resolved, not even in a one-Agent Workspace, and confirm is still required.
- Composes:
create→agent.create;delete→agent.delete - Actions:
create,delete - Annotations:
readOnlyHint: false,destructiveHint: true,idempotentHint: false,openWorldHint: false
Input schema:
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"create",
"delete"
],
"description": "Which operation to perform. Required. Each action accepts only its own fields, listed under oneOf."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"slug": {
"type": "string",
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"defaultLanguage": {
"default": "en",
"type": "string",
"enum": [
"en",
"es"
]
},
"instructions": {
"type": "string",
"minLength": 1,
"maxLength": 20000
},
"temperature": {
"type": "number",
"minimum": 0,
"maximum": 2
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
},
"agentId": {
"type": "string",
"minLength": 1
},
"confirm": {
"type": "boolean"
}
},
"required": [
"action"
],
"additionalProperties": false,
"oneOf": [
{
"title": "action: create",
"properties": {
"action": {
"const": "create"
}
},
"required": [
"action",
"name"
],
"not": {
"anyOf": [
{
"required": [
"agentId"
]
},
{
"required": [
"confirm"
]
}
]
}
},
{
"title": "action: delete",
"properties": {
"action": {
"const": "delete"
}
},
"required": [
"action"
],
"not": {
"anyOf": [
{
"required": [
"name"
]
},
{
"required": [
"slug"
]
},
{
"required": [
"defaultLanguage"
]
},
{
"required": [
"instructions"
]
},
{
"required": [
"temperature"
]
}
]
}
}
]
}list_conversations
List Workspace Conversations as flat rows sorted by recency, aggregated across every active Agent unless agentId narrows it. Each row carries Workspace and Agent identity, customer label, channel, needs-human status, handoff state, sender-block fact, a preview of at most 160 characters, and the Message count. Production traffic only; raw provider metadata never crosses this boundary.
- Composes:
conversation.list - Annotations:
readOnlyHint: true,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"agentId": {
"type": "string",
"minLength": 1
},
"channel": {
"type": "string",
"enum": [
"whatsapp",
"instagram",
"slack",
"voice",
"widget",
"public_url"
]
},
"status": {
"type": "string",
"enum": [
"needs_human",
"waiting",
"resolved"
]
},
"since": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
"until": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
"cursor": {
"type": "string",
"minLength": 1
},
"pageSize": {
"default": 20,
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"additionalProperties": false
}list_conversation_messages
List Conversation Messages newest first, aggregated across every active Agent unless agentId narrows it. Call it with {"role":"visitor","pageSize":1} and no other context to read the newest customer Message with Workspace and Agent names on the row; add sessionId (with agentId) to read one Conversation. Content is verbatim, clamped to maxContentChars with an honest contentTruncated flag; raw provider metadata never crosses this boundary. Reads are bounded: a rare role or channel can return a short or empty page with truncated true, so keep calling with meta.nextCursor until truncated is false.
- Composes:
conversation.message.list - Annotations:
readOnlyHint: true,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"agentId": {
"type": "string",
"minLength": 1
},
"sessionId": {
"type": "string",
"minLength": 1
},
"role": {
"type": "string",
"enum": [
"visitor",
"agent"
]
},
"channel": {
"type": "string",
"enum": [
"whatsapp",
"instagram",
"slack",
"voice",
"widget",
"public_url"
]
},
"since": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
"until": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
"maxContentChars": {
"default": 300,
"type": "integer",
"minimum": 50,
"maximum": 4000
},
"cursor": {
"type": "string",
"minLength": 1
},
"pageSize": {
"default": 20,
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"additionalProperties": false
}inspect_reply_eligibility
Read the canonical, source-agnostic facts that decide whether an operator reply may be submitted. This does not enable a channel or send anything.
- Composes:
conversation.reply_eligibility.inspect - Annotations:
readOnlyHint: true,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"agentId": {
"type": "string",
"minLength": 1
},
"sessionId": {
"type": "string",
"minLength": 1
}
},
"required": [
"sessionId"
],
"additionalProperties": false
}manage_handoff
action "takeover" pauses the Agent for one Conversation so a human can reply; action "hand_back" resumes it. Both take the sessionId straight from a list_conversations row and derive the owning Agent from it. The resulting handoff state is returned.
- Composes:
takeover→conversation.handoff.takeover;hand_back→conversation.handoff.hand_back - Actions:
takeover,hand_back - Annotations:
readOnlyHint: false,destructiveHint: true,idempotentHint: true,openWorldHint: false
Input schema:
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"takeover",
"hand_back"
],
"description": "Which operation to perform. Required. Each action accepts only its own fields, listed under oneOf."
},
"agentId": {
"type": "string",
"minLength": 1
},
"sessionId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
}
},
"required": [
"action"
],
"additionalProperties": false,
"oneOf": [
{
"title": "action: takeover",
"properties": {
"action": {
"const": "takeover"
}
},
"required": [
"action",
"sessionId"
]
},
{
"title": "action: hand_back",
"properties": {
"action": {
"const": "hand_back"
}
},
"required": [
"action",
"sessionId"
],
"not": {
"anyOf": [
{
"required": [
"reason"
]
}
]
}
}
]
}send_message
Persist a human operator reply into the Conversation projection and schedule channel delivery when needed. No client-facing provider send.
- Composes:
conversation.message.send - Annotations:
readOnlyHint: false,destructiveHint: true,idempotentHint: false,openWorldHint: true
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"agentId": {
"type": "string",
"minLength": 1
},
"sessionId": {
"type": "string",
"minLength": 1
},
"content": {
"type": "string",
"minLength": 1,
"maxLength": 4000
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
}
},
"required": [
"sessionId",
"content"
],
"additionalProperties": false
}ask_agent
Ask one Andy Agent a question, answered with its reviewed Knowledge, configured behavior and enabled tools. Omitted, agentId resolves to the Workspace's sole active Agent. By default (actionMode "answer_only") the Agent's mutating tools are disabled server-side. With actionMode "allow_actions" an action that needs consent returns the stable confirmation_required problem with a single-use, short-lived confirmationToken and an exact action summary; replay the call with that token to authorize only that action.
- Composes: the Agent runtime (no Tenant Operation)
- Annotations:
readOnlyHint: false,destructiveHint: true,idempotentHint: false,openWorldHint: true
Input schema:
{
"type": "object",
"properties": {
"agentId": {
"type": "string",
"description": "Optional. Omitted, Andy resolves the Workspace's sole active Agent; with several Agents the answer is a stable agent_selection_required problem carrying one ready-to-run call per Agent, labeled by name."
},
"message": {
"type": "string",
"description": "The question or instruction for the Agent. Required unless you are replaying a confirmationToken."
},
"sessionId": {
"type": "string",
"description": "Optional id that continues an earlier ask conversation."
},
"actionMode": {
"type": "string",
"enum": [
"answer_only",
"allow_actions"
],
"default": "answer_only",
"description": "\"answer_only\" (the default) answers without performing any action: the Agent's mutating tools are disabled server-side. \"allow_actions\" lets the Agent propose one action, which still requires explicit confirmation."
},
"confirmationToken": {
"type": "string",
"description": "Opaque token returned by a confirmation_required problem. Authorizes exactly that action, once, and expires in minutes."
}
},
"required": [],
"additionalProperties": false,
"anyOf": [
{
"title": "ask a question",
"required": [
"message"
]
},
{
"title": "replay a confirmation",
"required": [
"confirmationToken"
]
}
]
}list_posts
Without postId, list Workspace Posts newest first — filter status="pending_approval" for the approval queue. With postId, inspect exactly that Post including lifecycle and publish state. Every row carries the postId manage_post takes, so approving needs no ID copying.
- Composes:
content.post.list,content.post.inspect - Annotations:
readOnlyHint: true,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"type": "object",
"properties": {
"cursor": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"pageSize": {
"default": 50,
"type": "integer",
"minimum": 1,
"maximum": 100
},
"status": {
"type": "string",
"enum": [
"pending_approval",
"approved",
"published",
"failed",
"rejected",
"superseded"
]
},
"origin": {
"type": "string",
"enum": [
"direct",
"routine"
]
},
"postId": {
"type": "string",
"minLength": 1
}
},
"required": [],
"additionalProperties": false,
"oneOf": [
{
"title": "list",
"required": [],
"not": {
"anyOf": [
{
"required": [
"postId"
]
}
]
}
},
{
"title": "inspect",
"required": [
"postId"
],
"not": {
"anyOf": [
{
"required": [
"cursor"
]
},
{
"required": [
"pageSize"
]
},
{
"required": [
"status"
]
},
{
"required": [
"origin"
]
}
]
}
}
]
}manage_post
One closed set of Post transitions chosen by action: "create" (channel, text, intent request_approval|schedule|publish_now defaulting to request_approval, optional connectionId, optional targetType personal_profile|company_page for LinkedIn only, optional scheduledAt in epoch milliseconds, optional mediaAssetId, idempotencyKey), "approve" (postId plus a required future scheduledAt in epoch milliseconds — approval always schedules, never publishes now), "reject", "reschedule", "edit", "cancel", "pause" and "resume". Pause stops queued delivery while keeping approval. Resume requires a new explicit future scheduledAt and the same grants as scheduling. Rescheduling a paused Post keeps it paused. Saving never implies publication (#2140): request_approval always files the Post as pending_approval with no dispatch, keeping an optional proposed future scheduledAt; schedule requires an explicit future scheduledAt; publish_now is explicitly immediate and rejects scheduledAt. Members may only request approval; schedule and publish_now need Owner/Admin. A Workspace API Key needs content:write, plus content:schedule for schedule, content:publish for publish_now, and content:approve plus content:schedule to approve. Each action accepts only its own fields; postId comes straight from a list_posts row and create's optional connectionId from a list_connections row or the same list_posts row. Entitlement, role, lifecycle, scheduling and idempotency gates are unchanged.
- Composes:
approve→content.post.approve;reject→content.post.reject;mark_promoted→content.post.mark_promoted;reschedule→content.post.reschedule;pause→content.post.pause;resume→content.post.resume;create→content.post.create;edit→content.post.edit;cancel→content.post.cancel - Actions:
approve,reject,mark_promoted,reschedule,pause,resume,create,edit,cancel - Annotations:
readOnlyHint: false,destructiveHint: true,idempotentHint: false,openWorldHint: true
Input schema:
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"approve",
"reject",
"mark_promoted",
"reschedule",
"pause",
"resume",
"create",
"edit",
"cancel"
],
"description": "Which operation to perform. Required. Each action accepts only its own fields, listed under oneOf."
},
"postId": {
"type": "string",
"minLength": 1
},
"scheduledAt": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
},
"note": {
"type": "string",
"maxLength": 2000
},
"reasonKind": {
"type": "string",
"enum": [
"audience",
"neverName",
"disclosure"
]
},
"ruleId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"channel": {
"type": "string",
"enum": [
"x",
"instagram",
"linkedin",
"tiktok"
]
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 10000
},
"connectionId": {
"type": "string",
"minLength": 1
},
"targetType": {
"type": "string",
"enum": [
"personal_profile",
"company_page"
]
},
"intent": {
"type": "string",
"enum": [
"request_approval",
"schedule",
"publish_now"
]
},
"mediaAssetId": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"tiktokSettings": {
"type": "object",
"properties": {
"privacyLevel": {
"type": "string",
"enum": [
"PUBLIC_TO_EVERYONE",
"MUTUAL_FOLLOW_FRIENDS",
"FOLLOWER_OF_CREATOR",
"SELF_ONLY"
]
},
"commentEnabled": {
"type": "boolean"
},
"duetEnabled": {
"type": "boolean"
},
"stitchEnabled": {
"type": "boolean"
},
"commercialContent": {
"type": "string",
"enum": [
"off",
"own_brand",
"branded",
"both"
]
},
"consentAccepted": {
"type": "boolean"
}
},
"required": [
"privacyLevel"
],
"additionalProperties": false
}
},
"required": [
"action"
],
"additionalProperties": false,
"oneOf": [
{
"title": "action: approve",
"properties": {
"action": {
"const": "approve"
}
},
"required": [
"action",
"postId",
"scheduledAt"
],
"not": {
"anyOf": [
{
"required": [
"note"
]
},
{
"required": [
"reasonKind"
]
},
{
"required": [
"ruleId"
]
},
{
"required": [
"channel"
]
},
{
"required": [
"text"
]
},
{
"required": [
"connectionId"
]
},
{
"required": [
"targetType"
]
},
{
"required": [
"intent"
]
},
{
"required": [
"mediaAssetId"
]
},
{
"required": [
"tiktokSettings"
]
}
]
}
},
{
"title": "action: reject",
"properties": {
"action": {
"const": "reject"
}
},
"required": [
"action",
"postId"
],
"not": {
"anyOf": [
{
"required": [
"scheduledAt"
]
},
{
"required": [
"ruleId"
]
},
{
"required": [
"channel"
]
},
{
"required": [
"text"
]
},
{
"required": [
"connectionId"
]
},
{
"required": [
"targetType"
]
},
{
"required": [
"intent"
]
},
{
"required": [
"mediaAssetId"
]
},
{
"required": [
"tiktokSettings"
]
}
]
}
},
{
"title": "action: mark_promoted",
"properties": {
"action": {
"const": "mark_promoted"
}
},
"required": [
"action",
"postId",
"ruleId"
],
"not": {
"anyOf": [
{
"required": [
"scheduledAt"
]
},
{
"required": [
"note"
]
},
{
"required": [
"reasonKind"
]
},
{
"required": [
"channel"
]
},
{
"required": [
"text"
]
},
{
"required": [
"connectionId"
]
},
{
"required": [
"targetType"
]
},
{
"required": [
"intent"
]
},
{
"required": [
"mediaAssetId"
]
},
{
"required": [
"tiktokSettings"
]
}
]
}
},
{
"title": "action: reschedule",
"properties": {
"action": {
"const": "reschedule"
}
},
"required": [
"action",
"postId",
"scheduledAt"
],
"not": {
"anyOf": [
{
"required": [
"note"
]
},
{
"required": [
"reasonKind"
]
},
{
"required": [
"ruleId"
]
},
{
"required": [
"channel"
]
},
{
"required": [
"text"
]
},
{
"required": [
"connectionId"
]
},
{
"required": [
"targetType"
]
},
{
"required": [
"intent"
]
},
{
"required": [
"mediaAssetId"
]
},
{
"required": [
"tiktokSettings"
]
}
]
}
},
{
"title": "action: pause",
"properties": {
"action": {
"const": "pause"
}
},
"required": [
"action",
"postId"
],
"not": {
"anyOf": [
{
"required": [
"scheduledAt"
]
},
{
"required": [
"note"
]
},
{
"required": [
"reasonKind"
]
},
{
"required": [
"ruleId"
]
},
{
"required": [
"channel"
]
},
{
"required": [
"text"
]
},
{
"required": [
"connectionId"
]
},
{
"required": [
"targetType"
]
},
{
"required": [
"intent"
]
},
{
"required": [
"mediaAssetId"
]
},
{
"required": [
"tiktokSettings"
]
}
]
}
},
{
"title": "action: resume",
"properties": {
"action": {
"const": "resume"
}
},
"required": [
"action",
"postId",
"scheduledAt"
],
"not": {
"anyOf": [
{
"required": [
"note"
]
},
{
"required": [
"reasonKind"
]
},
{
"required": [
"ruleId"
]
},
{
"required": [
"channel"
]
},
{
"required": [
"text"
]
},
{
"required": [
"connectionId"
]
},
{
"required": [
"targetType"
]
},
{
"required": [
"intent"
]
},
{
"required": [
"mediaAssetId"
]
},
{
"required": [
"tiktokSettings"
]
}
]
}
},
{
"title": "action: create",
"properties": {
"action": {
"const": "create"
}
},
"required": [
"action",
"channel",
"text"
],
"not": {
"anyOf": [
{
"required": [
"postId"
]
},
{
"required": [
"note"
]
},
{
"required": [
"reasonKind"
]
},
{
"required": [
"ruleId"
]
}
]
}
},
{
"title": "action: edit",
"properties": {
"action": {
"const": "edit"
}
},
"required": [
"action",
"postId"
],
"not": {
"anyOf": [
{
"required": [
"note"
]
},
{
"required": [
"reasonKind"
]
},
{
"required": [
"ruleId"
]
},
{
"required": [
"channel"
]
},
{
"required": [
"connectionId"
]
},
{
"required": [
"targetType"
]
},
{
"required": [
"intent"
]
},
{
"required": [
"tiktokSettings"
]
}
]
}
},
{
"title": "action: cancel",
"properties": {
"action": {
"const": "cancel"
}
},
"required": [
"action",
"postId"
],
"not": {
"anyOf": [
{
"required": [
"scheduledAt"
]
},
{
"required": [
"note"
]
},
{
"required": [
"reasonKind"
]
},
{
"required": [
"ruleId"
]
},
{
"required": [
"channel"
]
},
{
"required": [
"text"
]
},
{
"required": [
"connectionId"
]
},
{
"required": [
"targetType"
]
},
{
"required": [
"intent"
]
},
{
"required": [
"mediaAssetId"
]
},
{
"required": [
"tiktokSettings"
]
}
]
}
}
]
}manage_media
Workspace media actions: upload_bytes stores a PNG/JPEG up to 3 MB through JSON with bytesBase64, contentType, fileName and idempotencyKey. It returns a reusable photo asset; same-key same-bytes replays return that asset. Larger files use these transfer actions: "prepare" (fileName, contentType image/jpeg|image/png|video/mp4, byteSize within the 10,000,000-byte image / 100,000,000-byte video caps, sha256 hex digest of the exact file bytes, idempotencyKey) returns a preparationId, uploadUrl, partSizeBytes, partCount, and uploadToken; send the file to the session endpoint one part at a time with standard library HTTP calls — POST ?preparation=&index=<0-based part> with header X-Andy-Upload-Token and the raw byte slice as the body — then "complete" (preparationId, uploadToken, sourceType, idempotencyKey) to assemble, validate, and create the reusable asset whose kind the server derives from measured bytes. Completion takes no storage id: the server owns every stored object, so bytes sent under another session can never be claimed. Replaying prepare with the same key recovers the same live session; "list", "inspect", and "attach" (exact asset and Piece revisions) reuse assets across Posts. Video bytes never travel in model messages and no web handoff or user-copied IDs are involved. Entitlement, role, workspace ownership, idempotency, and Post approval gates are unchanged.
- Composes:
upload_bytes→content.media.upload_bytes;prepare→content.media.upload_prepare;complete→content.media.upload_complete;list→content.media.list;inspect→content.media.inspect;attach→content.media.attach - Actions:
upload_bytes,prepare,complete,list,inspect,attach - Annotations:
readOnlyHint: false,destructiveHint: true,idempotentHint: false,openWorldHint: false
Input schema:
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"upload_bytes",
"prepare",
"complete",
"list",
"inspect",
"attach"
],
"description": "Which operation to perform. Required. Each action accepts only its own fields, listed under oneOf."
},
"bytesBase64": {
"type": "string",
"minLength": 4,
"maxLength": 4000000
},
"contentType": {
"anyOf": [
{
"type": "string",
"enum": [
"image/png",
"image/jpeg"
]
},
{
"type": "string",
"enum": [
"image/jpeg",
"image/png",
"video/mp4"
]
}
]
},
"fileName": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200
},
{
"type": "string",
"minLength": 1
}
]
},
"sourceRef": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 500
},
{
"type": "string",
"minLength": 1
}
]
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
},
"byteSize": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"sha256": {
"type": "string",
"minLength": 64,
"maxLength": 64
},
"preparationId": {
"type": "string",
"minLength": 1
},
"uploadToken": {
"type": "string",
"minLength": 1
},
"sourceType": {
"type": "string",
"enum": [
"bsale_product",
"catalog_product",
"upload",
"screen_capture"
]
},
"pieceId": {
"type": "string",
"minLength": 1
},
"cursor": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"pageSize": {
"default": 50,
"type": "integer",
"minimum": 1,
"maximum": 100
},
"assetId": {
"type": "string",
"minLength": 1
},
"assetRevision": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"pieceRevision": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"action"
],
"additionalProperties": false,
"oneOf": [
{
"title": "action: upload_bytes",
"properties": {
"action": {
"const": "upload_bytes"
}
},
"required": [
"action",
"bytesBase64",
"contentType",
"fileName"
],
"not": {
"anyOf": [
{
"required": [
"byteSize"
]
},
{
"required": [
"sha256"
]
},
{
"required": [
"preparationId"
]
},
{
"required": [
"uploadToken"
]
},
{
"required": [
"sourceType"
]
},
{
"required": [
"pieceId"
]
},
{
"required": [
"cursor"
]
},
{
"required": [
"pageSize"
]
},
{
"required": [
"assetId"
]
},
{
"required": [
"assetRevision"
]
},
{
"required": [
"pieceRevision"
]
}
]
}
},
{
"title": "action: prepare",
"properties": {
"action": {
"const": "prepare"
}
},
"required": [
"action",
"fileName",
"contentType",
"byteSize",
"sha256"
],
"not": {
"anyOf": [
{
"required": [
"bytesBase64"
]
},
{
"required": [
"sourceRef"
]
},
{
"required": [
"preparationId"
]
},
{
"required": [
"uploadToken"
]
},
{
"required": [
"sourceType"
]
},
{
"required": [
"pieceId"
]
},
{
"required": [
"cursor"
]
},
{
"required": [
"pageSize"
]
},
{
"required": [
"assetId"
]
},
{
"required": [
"assetRevision"
]
},
{
"required": [
"pieceRevision"
]
}
]
}
},
{
"title": "action: complete",
"properties": {
"action": {
"const": "complete"
}
},
"required": [
"action",
"preparationId",
"uploadToken",
"sourceType"
],
"not": {
"anyOf": [
{
"required": [
"bytesBase64"
]
},
{
"required": [
"contentType"
]
},
{
"required": [
"fileName"
]
},
{
"required": [
"byteSize"
]
},
{
"required": [
"sha256"
]
},
{
"required": [
"pieceId"
]
},
{
"required": [
"cursor"
]
},
{
"required": [
"pageSize"
]
},
{
"required": [
"assetId"
]
},
{
"required": [
"assetRevision"
]
},
{
"required": [
"pieceRevision"
]
}
]
}
},
{
"title": "action: list",
"properties": {
"action": {
"const": "list"
}
},
"required": [
"action"
],
"not": {
"anyOf": [
{
"required": [
"bytesBase64"
]
},
{
"required": [
"contentType"
]
},
{
"required": [
"fileName"
]
},
{
"required": [
"sourceRef"
]
},
{
"required": [
"idempotencyKey"
]
},
{
"required": [
"byteSize"
]
},
{
"required": [
"sha256"
]
},
{
"required": [
"preparationId"
]
},
{
"required": [
"uploadToken"
]
},
{
"required": [
"sourceType"
]
},
{
"required": [
"assetId"
]
},
{
"required": [
"assetRevision"
]
},
{
"required": [
"pieceRevision"
]
}
]
}
},
{
"title": "action: inspect",
"properties": {
"action": {
"const": "inspect"
}
},
"required": [
"action",
"assetId"
],
"not": {
"anyOf": [
{
"required": [
"bytesBase64"
]
},
{
"required": [
"contentType"
]
},
{
"required": [
"fileName"
]
},
{
"required": [
"sourceRef"
]
},
{
"required": [
"idempotencyKey"
]
},
{
"required": [
"byteSize"
]
},
{
"required": [
"sha256"
]
},
{
"required": [
"preparationId"
]
},
{
"required": [
"uploadToken"
]
},
{
"required": [
"sourceType"
]
},
{
"required": [
"pieceId"
]
},
{
"required": [
"cursor"
]
},
{
"required": [
"pageSize"
]
},
{
"required": [
"assetRevision"
]
},
{
"required": [
"pieceRevision"
]
}
]
}
},
{
"title": "action: attach",
"properties": {
"action": {
"const": "attach"
}
},
"required": [
"action",
"assetId",
"assetRevision",
"pieceId",
"pieceRevision"
],
"not": {
"anyOf": [
{
"required": [
"bytesBase64"
]
},
{
"required": [
"contentType"
]
},
{
"required": [
"fileName"
]
},
{
"required": [
"sourceRef"
]
},
{
"required": [
"byteSize"
]
},
{
"required": [
"sha256"
]
},
{
"required": [
"preparationId"
]
},
{
"required": [
"uploadToken"
]
},
{
"required": [
"sourceType"
]
},
{
"required": [
"cursor"
]
},
{
"required": [
"pageSize"
]
}
]
}
}
]
}render_post
Queue one server-owned immutable PNG render for an exact pending Post revision. Template version, dimensions, provenance, workspace, and render lifecycle are server-owned.
- Composes:
content.post.render_request - Annotations:
readOnlyHint: false,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"postId": {
"type": "string",
"minLength": 1
},
"expectedRevision": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"templateSlug": {
"type": "string",
"enum": [
"news-card",
"tip-carousel-frame",
"blog-cover",
"bench-card",
"ledger",
"stat",
"census",
"mechanism",
"knockout"
]
},
"input": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 524288
},
{
"minItems": 2,
"maxItems": 4,
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"minLength": 1,
"maxLength": 28
},
"value": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000000000000
},
"display": {
"type": "string",
"minLength": 1,
"maxLength": 16
},
"highlight": {
"type": "boolean"
}
},
"required": [
"label",
"value",
"display"
]
}
},
{
"minItems": 2,
"maxItems": 4,
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string",
"minLength": 1,
"maxLength": 28
},
"before": {
"type": "string",
"minLength": 1,
"maxLength": 16
},
"after": {
"type": "string",
"minLength": 1,
"maxLength": 16
},
"delta": {
"type": "string",
"minLength": 1,
"maxLength": 10
}
},
"required": [
"label",
"before",
"after",
"delta"
],
"additionalProperties": false
}
},
{
"minItems": 2,
"maxItems": 3,
"type": "array",
"items": {
"type": "object",
"properties": {
"figure": {
"type": "string",
"minLength": 1,
"maxLength": 8
},
"unit": {
"type": "string",
"minLength": 1,
"maxLength": 8
},
"value": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000000000000
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 40
},
"receipt": {
"type": "string",
"minLength": 1,
"maxLength": 40
},
"colour": {
"type": "string",
"enum": [
"#4BC0F4",
"#616FF7",
"#F7BA44"
]
}
},
"required": [
"figure",
"unit",
"value",
"label",
"receipt",
"colour"
],
"additionalProperties": false
}
}
]
}
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
}
},
"required": [
"postId",
"expectedRevision",
"templateSlug",
"input"
],
"additionalProperties": false
}manage_generation
One closed set of bounded paid-POC generation actions: "quote" (prompt, optional referenceAssetId) shows the verified price, allowance, and any active job with no reservation and no provider call, and refuses when the price schedule is unknown or stale — no current numeric schedule is verified today, so live quotes and requests refuse until one is recorded; "request" (prompt, optional referenceAssetId of one existing Workspace 9:16 image, idempotencyKey) starts one durable Owner/Admin job — prompt-only or one-image, exactly spacexai/grok-imagine-video-1.5, six-second 720p 9:16 — and the same key always recovers that job instead of starting a second paid attempt; "inspect" (jobId) polls pending, complete, failed, or unresolved state with reservation, reconciled actual cost where the provider reports it, measured output, and the reusable result asset; "recover" (jobId) refreshes the same provider operation and retries ingestion from the same result before expiry, reopens an unresolved job with a recorded operation onto the same check, and no-ops while a live worker chain owns the job; "active" reads the one active job, if any, so a client adopts work it did not start. Unknown/stale/over-limit price, insufficient cumulative allowance, missing marketing setup, or another active job refuses before any provider call; unknown-cost reservations are never released by timeout, and reconciled actuals above the reservation are recorded loudly but cannot un-bill the provider. Generation never publishes: review video and audio through existing Post approval, including for Owner/Admin. No model fallback, no automatic regeneration.
- Composes:
quote→content.generation.quote;request→content.generation.request;inspect→content.generation.inspect;recover→content.generation.recover;active→content.generation.active - Actions:
quote,request,inspect,recover,active - Annotations:
readOnlyHint: false,destructiveHint: true,idempotentHint: false,openWorldHint: true
Input schema:
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"quote",
"request",
"inspect",
"recover",
"active"
],
"description": "Which operation to perform. Required. Each action accepts only its own fields, listed under oneOf."
},
"prompt": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"referenceAssetId": {
"type": "string",
"minLength": 1
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
},
"jobId": {
"type": "string",
"minLength": 1
}
},
"required": [
"action"
],
"additionalProperties": false,
"oneOf": [
{
"title": "action: quote",
"properties": {
"action": {
"const": "quote"
}
},
"required": [
"action",
"prompt"
],
"not": {
"anyOf": [
{
"required": [
"idempotencyKey"
]
},
{
"required": [
"jobId"
]
}
]
}
},
{
"title": "action: request",
"properties": {
"action": {
"const": "request"
}
},
"required": [
"action",
"prompt"
],
"not": {
"anyOf": [
{
"required": [
"jobId"
]
}
]
}
},
{
"title": "action: inspect",
"properties": {
"action": {
"const": "inspect"
}
},
"required": [
"action",
"jobId"
],
"not": {
"anyOf": [
{
"required": [
"prompt"
]
},
{
"required": [
"referenceAssetId"
]
},
{
"required": [
"idempotencyKey"
]
}
]
}
},
{
"title": "action: recover",
"properties": {
"action": {
"const": "recover"
}
},
"required": [
"action",
"jobId"
],
"not": {
"anyOf": [
{
"required": [
"prompt"
]
},
{
"required": [
"referenceAssetId"
]
}
]
}
},
{
"title": "action: active",
"properties": {
"action": {
"const": "active"
}
},
"required": [
"action"
],
"not": {
"anyOf": [
{
"required": [
"prompt"
]
},
{
"required": [
"referenceAssetId"
]
},
{
"required": [
"idempotencyKey"
]
},
{
"required": [
"jobId"
]
}
]
}
}
]
}list_connections
List every publish destination of the selected Workspace: one row per target, each with its human label (handle or destination name), provider, state and capabilities. The connectionId a list_posts row carries and the label here are the same destination, so a model picks by name and feeds manage_post create without a human-typed id.
- Composes:
content.connection.list - Annotations:
readOnlyHint: true,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"cursor": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"pageSize": {
"default": 50,
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"additionalProperties": false
}manage_connection
Manage one social publishing connection. "connect" prepares a browser handoff for the user to grant provider consent; it does not connect silently. Supply provider and agentId from list_connections; include connectionId to reconnect the exact account. "inspect" reads an exact connection. "preflight" checks readiness and may refresh credentials; follow state and nextAction, because connected does not always mean ready to publish. "disconnect" requires connectionId and confirm containing that same exact ID, and stops access for scheduled posts using it. Disconnect and preflight accept idempotencyKey for safe retries; connect prepares a read-only handoff and does not accept that field. Connect and disconnect require a Workspace API Key with content:connections. OAuth may inspect and preflight under the existing administrator gates.
- Composes:
connect→content.connection.connect;inspect→content.connection.inspect;preflight→content.connection.preflight;disconnect→content.connection.disconnect - Actions:
connect,inspect,preflight,disconnect - Annotations:
readOnlyHint: false,destructiveHint: true,idempotentHint: false,openWorldHint: true
Input schema:
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"connect",
"inspect",
"preflight",
"disconnect"
],
"description": "Which operation to perform. Required. Each action accepts only its own fields, listed under oneOf."
},
"provider": {
"type": "string",
"enum": [
"instagram",
"linkedin",
"tiktok",
"x"
]
},
"agentId": {
"type": "string",
"minLength": 1
},
"connectionId": {
"type": "string",
"minLength": 1
},
"targetType": {
"type": "string",
"enum": [
"personal_profile",
"company_page"
]
},
"organizationId": {
"type": "string",
"minLength": 1
},
"displayName": {
"type": "string",
"minLength": 1
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
},
"confirm": {
"type": "string",
"minLength": 1
}
},
"required": [
"action"
],
"additionalProperties": false,
"oneOf": [
{
"title": "action: connect",
"properties": {
"action": {
"const": "connect"
}
},
"required": [
"action",
"provider",
"agentId"
],
"not": {
"anyOf": [
{
"required": [
"idempotencyKey"
]
},
{
"required": [
"confirm"
]
}
]
}
},
{
"title": "action: inspect",
"properties": {
"action": {
"const": "inspect"
}
},
"required": [
"action",
"connectionId"
],
"not": {
"anyOf": [
{
"required": [
"provider"
]
},
{
"required": [
"agentId"
]
},
{
"required": [
"targetType"
]
},
{
"required": [
"organizationId"
]
},
{
"required": [
"displayName"
]
},
{
"required": [
"idempotencyKey"
]
},
{
"required": [
"confirm"
]
}
]
}
},
{
"title": "action: preflight",
"properties": {
"action": {
"const": "preflight"
}
},
"required": [
"action",
"connectionId"
],
"not": {
"anyOf": [
{
"required": [
"provider"
]
},
{
"required": [
"agentId"
]
},
{
"required": [
"targetType"
]
},
{
"required": [
"organizationId"
]
},
{
"required": [
"displayName"
]
},
{
"required": [
"confirm"
]
}
]
}
},
{
"title": "action: disconnect",
"properties": {
"action": {
"const": "disconnect"
}
},
"required": [
"action",
"connectionId",
"confirm"
],
"not": {
"anyOf": [
{
"required": [
"provider"
]
},
{
"required": [
"agentId"
]
},
{
"required": [
"targetType"
]
},
{
"required": [
"organizationId"
]
},
{
"required": [
"displayName"
]
}
]
}
}
]
}list_routines
Without routineId, list Workspace Routines (standing content asks). With routineId, inspect exactly that Routine including schedule, audience and last fire error. Every row carries the routineId manage_routine takes, so a pause or edit needs no ID copying.
- Composes:
content.routine.list,content.routine.inspect - Annotations:
readOnlyHint: true,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"type": "object",
"properties": {
"includeArchived": {
"type": "boolean"
},
"cursor": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"pageSize": {
"default": 50,
"type": "integer",
"minimum": 1,
"maximum": 100
},
"routineId": {
"type": "string",
"minLength": 1
}
},
"required": [],
"additionalProperties": false,
"oneOf": [
{
"title": "list",
"required": [],
"not": {
"anyOf": [
{
"required": [
"routineId"
]
}
]
}
},
{
"title": "inspect",
"required": [
"routineId"
],
"not": {
"anyOf": [
{
"required": [
"includeArchived"
]
},
{
"required": [
"cursor"
]
},
{
"required": [
"pageSize"
]
}
]
}
}
]
}manage_routine
One closed set of Routine writes chosen by action: "create" (name, intentId from a listed Intent, channels, language, schedule, draftsPerRun, source ask and optional URLs), "clone" (routineId plus a replacement watched X profile), "update", "pause", "resume" and "run_now" (routineId; active Routines only, one manual run at a time, Posts arrive asynchronously in pending_approval). Each action accepts only its own fields; routineId comes straight from a list_routines row. Archive is not on this tool. Every Routine draft enters pending_approval. Entitlement, role and the Intent Gate are unchanged.
- Composes:
create→content.routine.create;clone→content.routine.clone;update→content.routine.update;pause→content.routine.pause;resume→content.routine.resume;run_now→content.routine.run_now - Actions:
create,clone,update,pause,resume,run_now - Annotations:
readOnlyHint: false,destructiveHint: true,idempotentHint: false,openWorldHint: false
Input schema:
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"create",
"clone",
"update",
"pause",
"resume",
"run_now"
],
"description": "Which operation to perform. Required. Each action accepts only its own fields, listed under oneOf."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"intentId": {
"type": "string",
"minLength": 1
},
"channels": {
"minItems": 1,
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"x",
"instagram",
"linkedin"
]
}
},
"language": {
"type": "string",
"enum": [
"es",
"en"
]
},
"schedule": {
"type": "object",
"properties": {
"cadence": {
"type": "string",
"enum": [
"daily",
"weekly"
]
},
"time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):([0-5]\\d)$"
},
"weekday": {
"type": "integer",
"minimum": 0,
"maximum": 6
},
"timezone": {
"type": "string",
"minLength": 1,
"maxLength": 64
}
},
"required": [
"cadence",
"time"
],
"additionalProperties": false
},
"draftsPerRun": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"source": {
"type": "object",
"properties": {
"ask": {
"type": "string",
"minLength": 1,
"maxLength": 10000
},
"urls": {
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 2000
}
},
"contextSourceIds": {
"maxItems": 1,
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
}
},
"required": [
"ask"
],
"additionalProperties": false
},
"personal": {
"type": "boolean"
},
"recipe": {
"type": "string",
"const": "company_news"
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
},
"routineId": {
"type": "string",
"minLength": 1
},
"watchedProfile": {
"type": "object",
"properties": {
"handle": {
"type": "string",
"minLength": 1,
"maxLength": 30
},
"rollingDays": {
"type": "integer",
"minimum": 1,
"maximum": 30
}
},
"required": [
"handle",
"rollingDays"
],
"additionalProperties": false
}
},
"required": [
"action"
],
"additionalProperties": false,
"oneOf": [
{
"title": "action: create",
"properties": {
"action": {
"const": "create"
}
},
"required": [
"action",
"name",
"intentId",
"channels",
"language",
"schedule",
"draftsPerRun",
"source"
],
"not": {
"anyOf": [
{
"required": [
"routineId"
]
},
{
"required": [
"watchedProfile"
]
}
]
}
},
{
"title": "action: clone",
"properties": {
"action": {
"const": "clone"
}
},
"required": [
"action",
"routineId",
"watchedProfile"
],
"not": {
"anyOf": [
{
"required": [
"intentId"
]
},
{
"required": [
"channels"
]
},
{
"required": [
"language"
]
},
{
"required": [
"schedule"
]
},
{
"required": [
"draftsPerRun"
]
},
{
"required": [
"source"
]
},
{
"required": [
"personal"
]
},
{
"required": [
"recipe"
]
}
]
}
},
{
"title": "action: update",
"properties": {
"action": {
"const": "update"
}
},
"required": [
"action",
"routineId"
],
"not": {
"anyOf": [
{
"required": [
"personal"
]
},
{
"required": [
"recipe"
]
},
{
"required": [
"watchedProfile"
]
}
]
}
},
{
"title": "action: pause",
"properties": {
"action": {
"const": "pause"
}
},
"required": [
"action",
"routineId"
],
"not": {
"anyOf": [
{
"required": [
"name"
]
},
{
"required": [
"intentId"
]
},
{
"required": [
"channels"
]
},
{
"required": [
"language"
]
},
{
"required": [
"schedule"
]
},
{
"required": [
"draftsPerRun"
]
},
{
"required": [
"source"
]
},
{
"required": [
"personal"
]
},
{
"required": [
"recipe"
]
},
{
"required": [
"watchedProfile"
]
}
]
}
},
{
"title": "action: resume",
"properties": {
"action": {
"const": "resume"
}
},
"required": [
"action",
"routineId"
],
"not": {
"anyOf": [
{
"required": [
"name"
]
},
{
"required": [
"intentId"
]
},
{
"required": [
"channels"
]
},
{
"required": [
"language"
]
},
{
"required": [
"schedule"
]
},
{
"required": [
"draftsPerRun"
]
},
{
"required": [
"source"
]
},
{
"required": [
"personal"
]
},
{
"required": [
"recipe"
]
},
{
"required": [
"watchedProfile"
]
}
]
}
},
{
"title": "action: run_now",
"properties": {
"action": {
"const": "run_now"
}
},
"required": [
"action",
"routineId"
],
"not": {
"anyOf": [
{
"required": [
"name"
]
},
{
"required": [
"intentId"
]
},
{
"required": [
"channels"
]
},
{
"required": [
"language"
]
},
{
"required": [
"schedule"
]
},
{
"required": [
"draftsPerRun"
]
},
{
"required": [
"source"
]
},
{
"required": [
"personal"
]
},
{
"required": [
"recipe"
]
},
{
"required": [
"watchedProfile"
]
}
]
}
}
]
}list_intents
Without intentId, list Workspace Intents (audiences a Routine writes for). With intentId, inspect exactly that Intent including status. Every row carries the intentId manage_brand takes, so an edit needs no ID copying.
- Composes:
content.intent.list,content.intent.inspect - Annotations:
readOnlyHint: true,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"type": "object",
"properties": {
"includeArchived": {
"type": "boolean"
},
"cursor": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"pageSize": {
"default": 50,
"type": "integer",
"minimum": 1,
"maximum": 100
},
"intentId": {
"type": "string",
"minLength": 1
}
},
"required": [],
"additionalProperties": false,
"oneOf": [
{
"title": "list",
"required": [],
"not": {
"anyOf": [
{
"required": [
"intentId"
]
}
]
}
},
{
"title": "inspect",
"required": [
"intentId"
],
"not": {
"anyOf": [
{
"required": [
"includeArchived"
]
},
{
"required": [
"cursor"
]
},
{
"required": [
"pageSize"
]
}
]
}
}
]
}manage_brand
One closed set of Brand writes chosen by action: "inspect_voice" (the Voice singleton), "set_voice" (preset cercano/directo/experto), "set_voice_custom" (structured styleGuide plus examples: 1-40 es posts required, en and shape catalogue optional), "reset_voice" (back to the default), "inspect_policy" (the Policy singleton), "set_policy_custom" (audience reader plus judged rules, neverName supplier terms, disclosure shapes with their transform), "reset_policy" (back to the empty Policy), "inspect_look" (the Look singleton), "set_look_custom" (Look bans plus optional fields identity, character lock, palette, register catalogue with lanes and rarity), "reset_look" (back to the authored default), "create_intent" (name + description) and "update_intent". Each action accepts only its own fields; intentId comes straight from a list_intents row. Archive Intent is not on this tool. Entitlement and role are unchanged.
- Composes:
inspect_voice→content.voice.inspect;inspect_policy→content.policy.inspect;inspect_look→content.look.inspect;set_voice→content.voice.set;set_voice_custom→content.voice.set;reset_voice→content.voice.set;set_policy_custom→content.policy.set;reset_policy→content.policy.set;set_look_custom→content.look.set;reset_look→content.look.set;create_intent→content.intent.create;update_intent→content.intent.update - Actions:
inspect_voice,inspect_policy,inspect_look,set_voice,set_voice_custom,reset_voice,set_policy_custom,reset_policy,set_look_custom,reset_look,create_intent,update_intent - Annotations:
readOnlyHint: false,destructiveHint: true,idempotentHint: false,openWorldHint: false
Input schema:
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"inspect_voice",
"inspect_policy",
"inspect_look",
"set_voice",
"set_voice_custom",
"reset_voice",
"set_policy_custom",
"reset_policy",
"set_look_custom",
"reset_look",
"create_intent",
"update_intent"
],
"description": "Which operation to perform. Required. Each action accepts only its own fields, listed under oneOf."
},
"preset": {
"type": "string",
"enum": [
"cercano",
"directo",
"experto"
]
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
},
"styleGuide": {
"type": "object",
"properties": {
"bans": {
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"evidenceRule": {
"type": "string",
"maxLength": 2000
},
"register": {
"type": "string",
"maxLength": 500
},
"notes": {
"type": "string",
"minLength": 1,
"maxLength": 10000
}
},
"required": [
"notes"
],
"additionalProperties": false
},
"examples": {
"type": "object",
"properties": {
"es": {
"minItems": 1,
"maxItems": 40,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 5000
}
},
"en": {
"minItems": 1,
"maxItems": 40,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 5000
}
}
},
"required": [
"es",
"en"
],
"additionalProperties": false
},
"shapes": {
"maxItems": 12,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"trigger": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"grammar": {
"type": "string",
"minLength": 1,
"maxLength": 4000
},
"examples": {
"type": "object",
"properties": {
"es": {
"minItems": 1,
"maxItems": 40,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 5000
}
},
"en": {
"minItems": 1,
"maxItems": 40,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 5000
}
}
},
"required": [
"es",
"en"
],
"additionalProperties": false
}
},
"required": [
"id",
"name",
"trigger",
"grammar"
],
"additionalProperties": false
}
},
"reset": {
"type": "boolean",
"const": true
},
"audience": {
"type": "object",
"properties": {
"reader": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"rules": {
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 2000
}
},
"required": [
"id",
"text"
],
"additionalProperties": false
}
}
},
"required": [
"reader"
],
"additionalProperties": false
},
"neverName": {
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"term": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"note": {
"type": "string",
"maxLength": 2000
}
},
"required": [
"id",
"term"
],
"additionalProperties": false
}
},
"disclosure": {
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"forbids": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"shape": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "absolute_total_in_window"
},
"nouns": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 60
}
}
},
"required": [
"kind",
"nouns"
],
"additionalProperties": false
},
"instead": {
"type": "string",
"minLength": 1,
"maxLength": 2000
}
},
"required": [
"id",
"forbids",
"shape",
"instead"
],
"additionalProperties": false
}
},
"character": {
"anyOf": [
{
"type": "object",
"properties": {
"description": {
"type": "string",
"minLength": 1,
"maxLength": 4000
},
"expressionLock": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"styleIsolation": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"textLock": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"referenceAssetKey": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"pattern": "^[A-Za-z0-9]+(?:[-_/:;|][A-Za-z0-9]+)*$"
}
},
"required": [
"description",
"expressionLock",
"styleIsolation",
"textLock",
"referenceAssetKey"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"palette": {
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 40
},
"hex": {
"type": "string",
"pattern": "^#[0-9A-Fa-f]{6}$"
},
"role": {
"type": "string",
"minLength": 1,
"maxLength": 120
}
},
"required": [
"name",
"hex",
"role"
],
"additionalProperties": false
}
},
"fields": {
"type": "object",
"properties": {
"fieldColour": {
"type": "string",
"pattern": "^#[0-9A-Fa-f]{6}$"
},
"displayFont": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"monoFont": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"headlineAccentTokens": {
"type": "integer",
"minimum": 0,
"maximum": 10
},
"methodLineRequired": {
"type": "boolean"
},
"publishTheLosingRow": {
"type": "boolean"
}
},
"required": [
"fieldColour",
"displayFont",
"monoFont",
"headlineAccentTokens",
"methodLineRequired",
"publishTheLosingRow"
],
"additionalProperties": false
},
"bans": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"registers": {
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"trigger": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"grammar": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"typeBudget": {
"type": "integer",
"minimum": 0,
"maximum": 600
},
"mascotRole": {
"type": "string",
"minLength": 1,
"maxLength": 40
},
"aspect": {
"type": "string",
"pattern": "^(?:[0-9]{2,5}x[0-9]{2,5}|crop)$"
},
"lane": {
"type": "string",
"enum": [
"deterministic",
"captured",
"composited",
"generative"
]
},
"templateSlug": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"promptTemplate": {
"type": "string",
"minLength": 1,
"maxLength": 6000
},
"slots": {
"maxItems": 12,
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z][A-Z0-9_]*$"
}
},
"rarity": {
"type": "object",
"properties": {
"window": {
"type": "integer",
"minimum": 1,
"maximum": 90
},
"max": {
"type": "integer",
"minimum": 1,
"maximum": 30
}
},
"required": [
"window",
"max"
],
"additionalProperties": false
},
"derives": {
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
}
},
"required": [
"id",
"name",
"trigger",
"grammar",
"typeBudget",
"mascotRole",
"aspect",
"lane",
"rarity",
"derives"
],
"additionalProperties": false
}
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"description": {
"type": "string",
"minLength": 1,
"maxLength": 10000
},
"intentId": {
"type": "string",
"minLength": 1
}
},
"required": [
"action"
],
"additionalProperties": false,
"oneOf": [
{
"title": "action: inspect_voice",
"properties": {
"action": {
"const": "inspect_voice"
}
},
"required": [
"action"
],
"not": {
"anyOf": [
{
"required": [
"preset"
]
},
{
"required": [
"idempotencyKey"
]
},
{
"required": [
"styleGuide"
]
},
{
"required": [
"examples"
]
},
{
"required": [
"shapes"
]
},
{
"required": [
"reset"
]
},
{
"required": [
"audience"
]
},
{
"required": [
"neverName"
]
},
{
"required": [
"disclosure"
]
},
{
"required": [
"character"
]
},
{
"required": [
"palette"
]
},
{
"required": [
"fields"
]
},
{
"required": [
"bans"
]
},
{
"required": [
"registers"
]
},
{
"required": [
"name"
]
},
{
"required": [
"description"
]
},
{
"required": [
"intentId"
]
}
]
}
},
{
"title": "action: inspect_policy",
"properties": {
"action": {
"const": "inspect_policy"
}
},
"required": [
"action"
],
"not": {
"anyOf": [
{
"required": [
"preset"
]
},
{
"required": [
"idempotencyKey"
]
},
{
"required": [
"styleGuide"
]
},
{
"required": [
"examples"
]
},
{
"required": [
"shapes"
]
},
{
"required": [
"reset"
]
},
{
"required": [
"audience"
]
},
{
"required": [
"neverName"
]
},
{
"required": [
"disclosure"
]
},
{
"required": [
"character"
]
},
{
"required": [
"palette"
]
},
{
"required": [
"fields"
]
},
{
"required": [
"bans"
]
},
{
"required": [
"registers"
]
},
{
"required": [
"name"
]
},
{
"required": [
"description"
]
},
{
"required": [
"intentId"
]
}
]
}
},
{
"title": "action: inspect_look",
"properties": {
"action": {
"const": "inspect_look"
}
},
"required": [
"action"
],
"not": {
"anyOf": [
{
"required": [
"preset"
]
},
{
"required": [
"idempotencyKey"
]
},
{
"required": [
"styleGuide"
]
},
{
"required": [
"examples"
]
},
{
"required": [
"shapes"
]
},
{
"required": [
"reset"
]
},
{
"required": [
"audience"
]
},
{
"required": [
"neverName"
]
},
{
"required": [
"disclosure"
]
},
{
"required": [
"character"
]
},
{
"required": [
"palette"
]
},
{
"required": [
"fields"
]
},
{
"required": [
"bans"
]
},
{
"required": [
"registers"
]
},
{
"required": [
"name"
]
},
{
"required": [
"description"
]
},
{
"required": [
"intentId"
]
}
]
}
},
{
"title": "action: set_voice",
"properties": {
"action": {
"const": "set_voice"
}
},
"required": [
"action",
"preset"
],
"not": {
"anyOf": [
{
"required": [
"styleGuide"
]
},
{
"required": [
"examples"
]
},
{
"required": [
"shapes"
]
},
{
"required": [
"reset"
]
},
{
"required": [
"audience"
]
},
{
"required": [
"neverName"
]
},
{
"required": [
"disclosure"
]
},
{
"required": [
"character"
]
},
{
"required": [
"palette"
]
},
{
"required": [
"fields"
]
},
{
"required": [
"bans"
]
},
{
"required": [
"registers"
]
},
{
"required": [
"name"
]
},
{
"required": [
"description"
]
},
{
"required": [
"intentId"
]
}
]
}
},
{
"title": "action: set_voice_custom",
"properties": {
"action": {
"const": "set_voice_custom"
}
},
"required": [
"action",
"styleGuide",
"examples"
],
"not": {
"anyOf": [
{
"required": [
"preset"
]
},
{
"required": [
"reset"
]
},
{
"required": [
"audience"
]
},
{
"required": [
"neverName"
]
},
{
"required": [
"disclosure"
]
},
{
"required": [
"character"
]
},
{
"required": [
"palette"
]
},
{
"required": [
"fields"
]
},
{
"required": [
"bans"
]
},
{
"required": [
"registers"
]
},
{
"required": [
"name"
]
},
{
"required": [
"description"
]
},
{
"required": [
"intentId"
]
}
]
}
},
{
"title": "action: reset_voice",
"properties": {
"action": {
"const": "reset_voice"
}
},
"required": [
"action",
"reset"
],
"not": {
"anyOf": [
{
"required": [
"preset"
]
},
{
"required": [
"styleGuide"
]
},
{
"required": [
"examples"
]
},
{
"required": [
"shapes"
]
},
{
"required": [
"audience"
]
},
{
"required": [
"neverName"
]
},
{
"required": [
"disclosure"
]
},
{
"required": [
"character"
]
},
{
"required": [
"palette"
]
},
{
"required": [
"fields"
]
},
{
"required": [
"bans"
]
},
{
"required": [
"registers"
]
},
{
"required": [
"name"
]
},
{
"required": [
"description"
]
},
{
"required": [
"intentId"
]
}
]
}
},
{
"title": "action: set_policy_custom",
"properties": {
"action": {
"const": "set_policy_custom"
}
},
"required": [
"action",
"audience"
],
"not": {
"anyOf": [
{
"required": [
"preset"
]
},
{
"required": [
"styleGuide"
]
},
{
"required": [
"examples"
]
},
{
"required": [
"shapes"
]
},
{
"required": [
"reset"
]
},
{
"required": [
"character"
]
},
{
"required": [
"palette"
]
},
{
"required": [
"fields"
]
},
{
"required": [
"bans"
]
},
{
"required": [
"registers"
]
},
{
"required": [
"name"
]
},
{
"required": [
"description"
]
},
{
"required": [
"intentId"
]
}
]
}
},
{
"title": "action: reset_policy",
"properties": {
"action": {
"const": "reset_policy"
}
},
"required": [
"action",
"reset"
],
"not": {
"anyOf": [
{
"required": [
"preset"
]
},
{
"required": [
"styleGuide"
]
},
{
"required": [
"examples"
]
},
{
"required": [
"shapes"
]
},
{
"required": [
"audience"
]
},
{
"required": [
"neverName"
]
},
{
"required": [
"disclosure"
]
},
{
"required": [
"character"
]
},
{
"required": [
"palette"
]
},
{
"required": [
"fields"
]
},
{
"required": [
"bans"
]
},
{
"required": [
"registers"
]
},
{
"required": [
"name"
]
},
{
"required": [
"description"
]
},
{
"required": [
"intentId"
]
}
]
}
},
{
"title": "action: set_look_custom",
"properties": {
"action": {
"const": "set_look_custom"
}
},
"required": [
"action",
"bans"
],
"not": {
"anyOf": [
{
"required": [
"preset"
]
},
{
"required": [
"styleGuide"
]
},
{
"required": [
"examples"
]
},
{
"required": [
"shapes"
]
},
{
"required": [
"reset"
]
},
{
"required": [
"audience"
]
},
{
"required": [
"neverName"
]
},
{
"required": [
"disclosure"
]
},
{
"required": [
"name"
]
},
{
"required": [
"description"
]
},
{
"required": [
"intentId"
]
}
]
}
},
{
"title": "action: reset_look",
"properties": {
"action": {
"const": "reset_look"
}
},
"required": [
"action",
"reset"
],
"not": {
"anyOf": [
{
"required": [
"preset"
]
},
{
"required": [
"styleGuide"
]
},
{
"required": [
"examples"
]
},
{
"required": [
"shapes"
]
},
{
"required": [
"audience"
]
},
{
"required": [
"neverName"
]
},
{
"required": [
"disclosure"
]
},
{
"required": [
"character"
]
},
{
"required": [
"palette"
]
},
{
"required": [
"fields"
]
},
{
"required": [
"bans"
]
},
{
"required": [
"registers"
]
},
{
"required": [
"name"
]
},
{
"required": [
"description"
]
},
{
"required": [
"intentId"
]
}
]
}
},
{
"title": "action: create_intent",
"properties": {
"action": {
"const": "create_intent"
}
},
"required": [
"action",
"name",
"description"
],
"not": {
"anyOf": [
{
"required": [
"preset"
]
},
{
"required": [
"styleGuide"
]
},
{
"required": [
"examples"
]
},
{
"required": [
"shapes"
]
},
{
"required": [
"reset"
]
},
{
"required": [
"audience"
]
},
{
"required": [
"neverName"
]
},
{
"required": [
"disclosure"
]
},
{
"required": [
"character"
]
},
{
"required": [
"palette"
]
},
{
"required": [
"fields"
]
},
{
"required": [
"bans"
]
},
{
"required": [
"registers"
]
},
{
"required": [
"intentId"
]
}
]
}
},
{
"title": "action: update_intent",
"properties": {
"action": {
"const": "update_intent"
}
},
"required": [
"action",
"intentId"
],
"not": {
"anyOf": [
{
"required": [
"preset"
]
},
{
"required": [
"styleGuide"
]
},
{
"required": [
"examples"
]
},
{
"required": [
"shapes"
]
},
{
"required": [
"reset"
]
},
{
"required": [
"audience"
]
},
{
"required": [
"neverName"
]
},
{
"required": [
"disclosure"
]
},
{
"required": [
"character"
]
},
{
"required": [
"palette"
]
},
{
"required": [
"fields"
]
},
{
"required": [
"bans"
]
},
{
"required": [
"registers"
]
}
]
}
}
]
}capture_artifact
Upload a real screen capture as bytesBase64 with contentType (PNG or JPEG, max 3 MB; no preparation or storage IDs) with its label and the evidence URL it proves. The door stores the Media Asset and the capture row together; the image agent may then choose the artifact register for runs whose evidence links match, within 7 days.
- Composes:
content.artifact.capture - Annotations:
readOnlyHint: false,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"bytesBase64": {
"type": "string",
"minLength": 4,
"maxLength": 4000000
},
"contentType": {
"type": "string",
"enum": [
"image/png",
"image/jpeg"
]
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"evidenceUrl": {
"type": "string",
"minLength": 1,
"format": "uri"
},
"source": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
}
},
"required": [
"bytesBase64",
"contentType",
"label",
"evidenceUrl"
],
"additionalProperties": false
}list_knowledge
Without sourceId, list an Agent's current Knowledge Sources with their processing state. With sourceId, inspect exactly that Source, its active and pending revisions and its current processing state — call it again to observe processing finish. Omitted, agentId is resolved server-side: from the Source's own owning Agent when sourceId is given, otherwise from the Workspace's sole active Agent.
- Composes:
knowledge_source.list,knowledge_source.inspect - Annotations:
readOnlyHint: true,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"type": "object",
"properties": {
"agentId": {
"type": "string",
"minLength": 1
},
"cursor": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"pageSize": {
"default": 50,
"type": "integer",
"minimum": 1,
"maximum": 100
},
"sourceId": {
"type": "string",
"minLength": 1
}
},
"required": [],
"additionalProperties": false,
"oneOf": [
{
"title": "list",
"required": [],
"not": {
"anyOf": [
{
"required": [
"sourceId"
]
}
]
}
},
{
"title": "inspect",
"required": [
"sourceId"
],
"not": {
"anyOf": [
{
"required": [
"cursor"
]
},
{
"required": [
"pageSize"
]
}
]
}
}
]
}add_knowledge
Add one reviewed, content-addressed Knowledge Source to an Agent and return its current processing state. Omitted, agentId resolves to the Workspace's sole active Agent. Adding never overwrites live Knowledge: a key already in use is refused.
- Composes:
knowledge_source.add - Annotations:
readOnlyHint: false,destructiveHint: false,idempotentHint: false,openWorldHint: false
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"key": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 240
},
"provenance": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"repository",
"url",
"manual"
]
},
"uri": {
"type": "string",
"minLength": 1,
"maxLength": 2000
}
},
"required": [
"kind",
"uri"
]
},
"revision": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"digest": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$"
},
"required": {
"default": true,
"type": "boolean"
},
"content": {
"type": "string",
"minLength": 1
},
"agentId": {
"type": "string",
"minLength": 1
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
}
},
"required": [
"key",
"title",
"provenance",
"revision",
"digest",
"content"
],
"additionalProperties": false
}replace_knowledge
Privately process a replacement revision while retaining last-good Knowledge.
- Composes:
knowledge_source.replace - Annotations:
readOnlyHint: false,destructiveHint: true,idempotentHint: false,openWorldHint: false
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"maxLength": 240
},
"provenance": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"repository",
"url",
"manual"
]
},
"uri": {
"type": "string",
"minLength": 1,
"maxLength": 2000
}
},
"required": [
"kind",
"uri"
]
},
"revision": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"digest": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$"
},
"required": {
"default": true,
"type": "boolean"
},
"content": {
"type": "string",
"minLength": 1
},
"agentId": {
"type": "string",
"minLength": 1
},
"sourceId": {
"type": "string",
"minLength": 1
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
}
},
"required": [
"title",
"provenance",
"revision",
"digest",
"content",
"sourceId"
],
"additionalProperties": false
}append_journal_entry
Append one first-party journal Activity. Optional logMaterial carries actual command output (800+ nonblank lines, 55 substantive lines, at most 512 KiB) and an evidenceUrl also present in links; it is allowed only on public entries. The bound run may use it for knockout. Replay of externalKey is idempotent and cannot replace material. This never creates a Source or a Post.
- Composes:
content.engine.append_journal_entry - Annotations:
readOnlyHint: false,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"text": {
"type": "string",
"minLength": 1,
"maxLength": 20000
},
"occurredAt": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"externalKey": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"links": {
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"format": "uri"
}
},
"private": {
"type": "boolean"
},
"logMaterial": {
"type": "object",
"properties": {
"evidenceUrl": {
"type": "string",
"format": "uri",
"pattern": "^https:\\/\\/.*"
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 524288
}
},
"required": [
"evidenceUrl",
"text"
],
"additionalProperties": false
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
}
},
"required": [
"text",
"occurredAt",
"externalKey"
],
"additionalProperties": false
}trigger_engine_run
Start one active Recipe-bound Routine with the existing claim and lease machinery. No overrides are accepted.
- Composes:
content.engine.trigger_run - Annotations:
readOnlyHint: false,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"routineId": {
"type": "string",
"minLength": 1
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
}
},
"required": [
"routineId"
],
"additionalProperties": false
}list_approval_queue
Read pending engine Posts with pipeline and immutable provenance. This operation has no approval, edit, scheduling, or publication authority.
- Composes:
content.engine.list_approval_queue - Annotations:
readOnlyHint: true,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"pageSize": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"cursor": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
}get_engine_run
Inspect safe run status, counts, lint facts, and terminal failure only, plus what the two voices did: judged-lane counters, the image decision, and chooser/renderer cost accounting. calls.generation counts composition plus policy-judge plus image-chooser plus image-judge model calls on the Recipe path (renderer attempts stay separate under imageRenderAttempts); legacy profile-radar rows keep generationModelCallCount. Missing Recipe count components make generation null. Counts measure SDK invocations including explicit authoring retries, not underlying transport retries. Every cost is a known subtotal: imageCostCompleteness carries unknown chooser/total completeness and nullable rendererUnknownCharges; never infer complete billing from a numeric sum.
- Composes:
content.engine.get_run - Annotations:
readOnlyHint: true,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"runId": {
"type": "string",
"minLength": 1
}
},
"required": [
"runId"
],
"additionalProperties": false
}list_context_sources
Without sourceId, list Workspace Context Sources. With sourceId, inspect one Source including refresh state and coverage. Use sourceId also to list observations.
- Composes:
context.source.list,context.source.inspect - Annotations:
readOnlyHint: true,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"type": "object",
"properties": {
"includeArchived": {
"type": "boolean"
},
"cursor": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"pageSize": {
"default": 50,
"type": "integer",
"minimum": 1,
"maximum": 100
},
"sourceId": {
"type": "string",
"minLength": 1
}
},
"required": [],
"additionalProperties": false,
"oneOf": [
{
"title": "list",
"required": [],
"not": {
"anyOf": [
{
"required": [
"sourceId"
]
}
]
}
},
{
"title": "inspect",
"required": [
"sourceId"
],
"not": {
"anyOf": [
{
"required": [
"includeArchived"
]
},
{
"required": [
"cursor"
]
},
{
"required": [
"pageSize"
]
}
]
}
}
]
}manage_context_source
One closed set of Context Source writes chosen by action: "create" (x_profile handle + rollingDays), "update", "refresh", "pause", "resume", "archive". Observations are immutable and provider_bounded.
- Composes:
create→context.source.create;update→context.source.update;refresh→context.source.refresh;pause→context.source.pause;resume→context.source.resume;archive→context.source.archive - Actions:
create,update,refresh,pause,resume,archive - Annotations:
readOnlyHint: false,destructiveHint: true,idempotentHint: false,openWorldHint: false
Input schema:
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"create",
"update",
"refresh",
"pause",
"resume",
"archive"
],
"description": "Which operation to perform. Required. Each action accepts only its own fields, listed under oneOf."
},
"kind": {
"type": "string",
"enum": [
"x_profile",
"github_repository"
]
},
"selector": {
"anyOf": [
{
"type": "object",
"properties": {
"handle": {
"type": "string",
"minLength": 1,
"maxLength": 30
},
"rollingDays": {
"type": "integer",
"minimum": 1,
"maximum": 30
}
},
"required": [
"handle",
"rollingDays"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"repositories": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"owner": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1
},
"defaultBranch": {
"type": "string",
"minLength": 1
}
},
"required": [
"owner",
"name",
"defaultBranch"
],
"additionalProperties": false
}
},
"activities": {
"minItems": 1,
"type": "array",
"items": {
"type": "string",
"enum": [
"merged_pull_requests",
"releases",
"commits"
]
}
}
},
"required": [
"repositories",
"activities"
],
"additionalProperties": false
}
]
},
"authorizationRef": {
"type": "string",
"minLength": 1
},
"freshnessMinutes": {
"type": "integer",
"minimum": 1,
"maximum": 1440
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
},
"sourceId": {
"type": "string",
"minLength": 1
},
"requestId": {
"type": "string",
"minLength": 1
}
},
"required": [
"action"
],
"additionalProperties": false,
"oneOf": [
{
"title": "action: create",
"properties": {
"action": {
"const": "create"
}
},
"required": [
"action",
"selector"
],
"not": {
"anyOf": [
{
"required": [
"sourceId"
]
},
{
"required": [
"requestId"
]
}
]
}
},
{
"title": "action: update",
"properties": {
"action": {
"const": "update"
}
},
"required": [
"action",
"sourceId"
],
"not": {
"anyOf": [
{
"required": [
"kind"
]
},
{
"required": [
"authorizationRef"
]
},
{
"required": [
"requestId"
]
}
]
}
},
{
"title": "action: refresh",
"properties": {
"action": {
"const": "refresh"
}
},
"required": [
"action",
"sourceId"
],
"not": {
"anyOf": [
{
"required": [
"kind"
]
},
{
"required": [
"selector"
]
},
{
"required": [
"authorizationRef"
]
},
{
"required": [
"freshnessMinutes"
]
}
]
}
},
{
"title": "action: pause",
"properties": {
"action": {
"const": "pause"
}
},
"required": [
"action",
"sourceId"
],
"not": {
"anyOf": [
{
"required": [
"kind"
]
},
{
"required": [
"selector"
]
},
{
"required": [
"authorizationRef"
]
},
{
"required": [
"freshnessMinutes"
]
},
{
"required": [
"requestId"
]
}
]
}
},
{
"title": "action: resume",
"properties": {
"action": {
"const": "resume"
}
},
"required": [
"action",
"sourceId"
],
"not": {
"anyOf": [
{
"required": [
"kind"
]
},
{
"required": [
"selector"
]
},
{
"required": [
"authorizationRef"
]
},
{
"required": [
"freshnessMinutes"
]
},
{
"required": [
"requestId"
]
}
]
}
},
{
"title": "action: archive",
"properties": {
"action": {
"const": "archive"
}
},
"required": [
"action",
"sourceId"
],
"not": {
"anyOf": [
{
"required": [
"kind"
]
},
{
"required": [
"selector"
]
},
{
"required": [
"authorizationRef"
]
},
{
"required": [
"freshnessMinutes"
]
},
{
"required": [
"requestId"
]
}
]
}
}
]
}list_context_observations
List immutable observations for one Context Source (Workspace-isolated, retention-bounded).
- Composes:
context.observation.list - Annotations:
readOnlyHint: true,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"sourceId": {
"type": "string",
"minLength": 1
},
"cursor": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"pageSize": {
"default": 50,
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"required": [
"sourceId"
],
"additionalProperties": false
}manage_outreach_batch
One closed set of simplified outreach batch actions (Andesphere only) chosen by action: "prepare" (campaignId + target sending day YYYY-MM-DD — snapshots eligible review rows without accepting anything), "inspect" (campaignId + batchId — every row carries the rowId and rowRevision revise and approve take), "revise" (rowId + expected row revision + optional subject/body/selected — edits bump the row revision with explicit edit provenance), "approve" (batchId + batch revision + row revisions + a stable requestKey — the single Owner/Admin decision; replaying the same key returns the original receipts, a changed payload under it is refused) and "defer" (parks an open batch with nothing approved). A Workspace API Key needs agent:write for writes and agent:read for inspect; User callers need Owner/Admin for writes.
- Composes:
prepare→outreach.batch.prepare;inspect→outreach.batch.inspect;revise→outreach.batch.revise;approve→outreach.batch.approve;defer→outreach.batch.defer - Actions:
prepare,inspect,revise,approve,defer - Annotations:
readOnlyHint: false,destructiveHint: true,idempotentHint: true,openWorldHint: false
Input schema:
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"prepare",
"inspect",
"revise",
"approve",
"defer"
],
"description": "Which operation to perform. Required. Each action accepts only its own fields, listed under oneOf."
},
"campaignId": {
"type": "string",
"minLength": 1
},
"targetSendingDay": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
},
"batchId": {
"type": "string",
"minLength": 1
},
"rowId": {
"type": "string",
"minLength": 1
},
"expectedRowRevision": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"subject": {
"type": "string",
"minLength": 2,
"maxLength": 80
},
"body": {
"type": "string",
"minLength": 10,
"maxLength": 5000
},
"followupSubject": {
"type": "string",
"maxLength": 80
},
"followupBody": {
"type": "string",
"maxLength": 5000
},
"selected": {
"type": "boolean"
},
"batchRevision": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"rows": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"rowId": {
"type": "string",
"minLength": 1
},
"rowRevision": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
}
},
"required": [
"rowId",
"rowRevision"
],
"additionalProperties": false
}
},
"requestKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
}
},
"required": [
"action"
],
"additionalProperties": false,
"oneOf": [
{
"title": "action: prepare",
"properties": {
"action": {
"const": "prepare"
}
},
"required": [
"action",
"campaignId",
"targetSendingDay"
],
"not": {
"anyOf": [
{
"required": [
"batchId"
]
},
{
"required": [
"rowId"
]
},
{
"required": [
"expectedRowRevision"
]
},
{
"required": [
"subject"
]
},
{
"required": [
"body"
]
},
{
"required": [
"followupSubject"
]
},
{
"required": [
"followupBody"
]
},
{
"required": [
"selected"
]
},
{
"required": [
"batchRevision"
]
},
{
"required": [
"rows"
]
},
{
"required": [
"requestKey"
]
}
]
}
},
{
"title": "action: inspect",
"properties": {
"action": {
"const": "inspect"
}
},
"required": [
"action",
"campaignId",
"batchId"
],
"not": {
"anyOf": [
{
"required": [
"targetSendingDay"
]
},
{
"required": [
"idempotencyKey"
]
},
{
"required": [
"rowId"
]
},
{
"required": [
"expectedRowRevision"
]
},
{
"required": [
"subject"
]
},
{
"required": [
"body"
]
},
{
"required": [
"followupSubject"
]
},
{
"required": [
"followupBody"
]
},
{
"required": [
"selected"
]
},
{
"required": [
"batchRevision"
]
},
{
"required": [
"rows"
]
},
{
"required": [
"requestKey"
]
}
]
}
},
{
"title": "action: revise",
"properties": {
"action": {
"const": "revise"
}
},
"required": [
"action",
"campaignId",
"batchId",
"rowId",
"expectedRowRevision"
],
"not": {
"anyOf": [
{
"required": [
"targetSendingDay"
]
},
{
"required": [
"batchRevision"
]
},
{
"required": [
"rows"
]
},
{
"required": [
"requestKey"
]
}
]
}
},
{
"title": "action: approve",
"properties": {
"action": {
"const": "approve"
}
},
"required": [
"action",
"campaignId",
"batchId",
"batchRevision",
"rows",
"requestKey"
],
"not": {
"anyOf": [
{
"required": [
"targetSendingDay"
]
},
{
"required": [
"rowId"
]
},
{
"required": [
"expectedRowRevision"
]
},
{
"required": [
"subject"
]
},
{
"required": [
"body"
]
},
{
"required": [
"followupSubject"
]
},
{
"required": [
"followupBody"
]
},
{
"required": [
"selected"
]
}
]
}
},
{
"title": "action: defer",
"properties": {
"action": {
"const": "defer"
}
},
"required": [
"action",
"campaignId",
"batchId"
],
"not": {
"anyOf": [
{
"required": [
"rowId"
]
},
{
"required": [
"expectedRowRevision"
]
},
{
"required": [
"subject"
]
},
{
"required": [
"body"
]
},
{
"required": [
"followupSubject"
]
},
{
"required": [
"followupBody"
]
},
{
"required": [
"selected"
]
},
{
"required": [
"batchRevision"
]
},
{
"required": [
"rows"
]
},
{
"required": [
"requestKey"
]
}
]
}
}
]
}manage_outreach_preparation
One closed set of suitable preparation actions (Andesphere only) chosen by action: "start" (campaignId + optional target sending day YYYY-MM-DD — creates or recovers the day's run within 16 inspection and 16 verifier calls bounded by confirmed free allowance; capacity is checked before any external call), "resume" (campaignId + optional preparation day — continues persisted work without new spend) and "inspect" (campaignId + optional preparation day — status, ready inventory pointer and concise shortage reasons). Preparation can never approve or send. A Workspace API Key needs agent:write for start/resume and agent:read for inspect; User callers need Owner/Admin for writes.
- Composes:
start→outreach.preparation.start;resume→outreach.preparation.resume;inspect→outreach.preparation.inspect - Actions:
start,resume,inspect - Annotations:
readOnlyHint: false,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"start",
"resume",
"inspect"
],
"description": "Which operation to perform. Required. Each action accepts only its own fields, listed under oneOf."
},
"campaignId": {
"type": "string",
"minLength": 1
},
"targetSendingDay": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
},
"preparationDay": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
}
},
"required": [
"action"
],
"additionalProperties": false,
"oneOf": [
{
"title": "action: start",
"properties": {
"action": {
"const": "start"
}
},
"required": [
"action",
"campaignId"
],
"not": {
"anyOf": [
{
"required": [
"preparationDay"
]
}
]
}
},
{
"title": "action: resume",
"properties": {
"action": {
"const": "resume"
}
},
"required": [
"action",
"campaignId"
],
"not": {
"anyOf": [
{
"required": [
"targetSendingDay"
]
}
]
}
},
{
"title": "action: inspect",
"properties": {
"action": {
"const": "inspect"
}
},
"required": [
"action",
"campaignId"
],
"not": {
"anyOf": [
{
"required": [
"targetSendingDay"
]
},
{
"required": [
"idempotencyKey"
]
}
]
}
}
]
}manage_outreach_outcomes
One closed set of genuine-reply and outcome actions (Andesphere only) chosen by action: "inspect" (campaignId — business-level contacted/replied/demo/customer/unknown counts with evidence semantics; only authenticated genuine human replies count, synthetic fixture rows are excluded from real counts) and "record" (campaignId + contacted businessIdentity + kind demo|customer|unknown — a demo needs its booked/delivered kind plus who/when/evidence, a customer needs payment evidence or an explicitly labeled operator assertion; corrections reuse it and keep the audit trail). The record never approves or sends. A Workspace API Key needs agent:write for record and agent:read for inspect; User callers need Owner/Admin for the record.
- Composes:
inspect→outreach.outcomes.inspect;record→outreach.outcomes.record - Actions:
inspect,record - Annotations:
readOnlyHint: false,destructiveHint: false,idempotentHint: true,openWorldHint: false
Input schema:
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"inspect",
"record"
],
"description": "Which operation to perform. Required. Each action accepts only its own fields, listed under oneOf."
},
"campaignId": {
"type": "string",
"minLength": 1
},
"businessIdentity": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"outcomeId": {
"type": "string",
"minLength": 1
},
"expectedRevision": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"kind": {
"type": "string",
"enum": [
"demo",
"customer",
"unknown"
]
},
"demoKind": {
"type": "string",
"enum": [
"booked",
"delivered"
]
},
"contactName": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"occurredAt": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"evidence": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"paymentEvidence": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"operatorAsserted": {
"type": "boolean"
},
"assertionNote": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"idempotencyKey": {
"type": "string",
"minLength": 8,
"maxLength": 200
}
},
"required": [
"action"
],
"additionalProperties": false,
"oneOf": [
{
"title": "action: inspect",
"properties": {
"action": {
"const": "inspect"
}
},
"required": [
"action",
"campaignId"
],
"not": {
"anyOf": [
{
"required": [
"businessIdentity"
]
},
{
"required": [
"outcomeId"
]
},
{
"required": [
"expectedRevision"
]
},
{
"required": [
"kind"
]
},
{
"required": [
"demoKind"
]
},
{
"required": [
"contactName"
]
},
{
"required": [
"occurredAt"
]
},
{
"required": [
"evidence"
]
},
{
"required": [
"paymentEvidence"
]
},
{
"required": [
"operatorAsserted"
]
},
{
"required": [
"assertionNote"
]
},
{
"required": [
"idempotencyKey"
]
}
]
}
},
{
"title": "action: record",
"properties": {
"action": {
"const": "record"
}
},
"required": [
"action",
"campaignId",
"businessIdentity",
"kind"
]
}
]
}Machine-readable verification
Call tools/list and require exactly these 36 names, in this order:
[
"get_context",
"select_workspace",
"get_agent",
"configure_agent",
"manage_agent",
"list_conversations",
"list_conversation_messages",
"inspect_reply_eligibility",
"manage_handoff",
"send_message",
"ask_agent",
"list_posts",
"manage_post",
"manage_media",
"render_post",
"manage_generation",
"list_connections",
"manage_connection",
"list_routines",
"manage_routine",
"list_intents",
"manage_brand",
"capture_artifact",
"list_knowledge",
"add_knowledge",
"replace_knowledge",
"append_journal_entry",
"trigger_engine_run",
"list_approval_queue",
"get_engine_run",
"list_context_sources",
"manage_context_source",
"list_context_observations",
"manage_outreach_batch",
"manage_outreach_preparation",
"manage_outreach_outcomes"
]Then invoke get_context and require a data.selection block and a meta.requestId.