Andy Developer Docs
MCP

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 toolTitleComposesScope
1get_contextGet Andy contextget_context
2select_workspaceSelect Andy Workspaceselect_workspace
3get_agentGet Andy Agentagent.list, agent.inspect
4configure_agentConfigure Andy Agentagent.configure
5manage_agentManage Andy Agent lifecyclecreateagent.create; deleteagent.delete
6list_conversationsList Andy Conversationsconversation.listagent:read
7list_conversation_messagesList Andy Conversation Messagesconversation.message.listagent:read
8inspect_reply_eligibilityInspect Conversation Reply Eligibilityconversation.reply_eligibility.inspectagent:read
9manage_handoffManage Conversation handofftakeoverconversation.handoff.takeover; hand_backconversation.handoff.hand_backagent:write
10send_messageSend Conversation Messageconversation.message.sendagent:write
11ask_agentAsk Andy Agentthe Agent runtime (no Tenant Operation)
12list_postsList Andy Postscontent.post.list, content.post.inspectcontent:read
13manage_postManage Andy Postapprovecontent.post.approve; rejectcontent.post.reject; mark_promotedcontent.post.mark_promoted; reschedulecontent.post.reschedule; pausecontent.post.pause; resumecontent.post.resume; createcontent.post.create; editcontent.post.edit; cancelcontent.post.cancelcontent:write
14manage_mediaManage Andy Mediaupload_bytescontent.media.upload_bytes; preparecontent.media.upload_prepare; completecontent.media.upload_complete; listcontent.media.list; inspectcontent.media.inspect; attachcontent.media.attachcontent:write, content:read
15render_postRequest locked Post rendercontent.post.render_requestcontent:write
16manage_generationManage Andy Video Generationquotecontent.generation.quote; requestcontent.generation.request; inspectcontent.generation.inspect; recovercontent.generation.recover; activecontent.generation.activecontent:read, content:write
17list_connectionsList Andy Platform Connectionscontent.connection.listcontent:connections
18manage_connectionManage Andy Platform Connectionconnectcontent.connection.connect; inspectcontent.connection.inspect; preflightcontent.connection.preflight; disconnectcontent.connection.disconnectcontent:connections
19list_routinesList Andy Routinescontent.routine.list, content.routine.inspectcontent:read
20manage_routineManage Andy Routinecreatecontent.routine.create; clonecontent.routine.clone; updatecontent.routine.update; pausecontent.routine.pause; resumecontent.routine.resume; run_nowcontent.routine.run_nowcontent:write
21list_intentsList Andy Intentscontent.intent.list, content.intent.inspectcontent:read
22manage_brandManage Andy Brandinspect_voicecontent.voice.inspect; inspect_policycontent.policy.inspect; inspect_lookcontent.look.inspect; set_voicecontent.voice.set; set_voice_customcontent.voice.set; reset_voicecontent.voice.set; set_policy_customcontent.policy.set; reset_policycontent.policy.set; set_look_customcontent.look.set; reset_lookcontent.look.set; create_intentcontent.intent.create; update_intentcontent.intent.updatecontent:read, content:write
23capture_artifactCapture content artifactcontent.artifact.capturecontent:write
24list_knowledgeList Agent Knowledgeknowledge_source.list, knowledge_source.inspect
25add_knowledgeAdd Agent Knowledgeknowledge_source.add
26replace_knowledgeReplace Agent Knowledgeknowledge_source.replace
27append_journal_entryAppend personal journal entrycontent.engine.append_journal_entrycontent:write
28trigger_engine_runTrigger content engine runcontent.engine.trigger_runcontent:write
29list_approval_queueList content approval queuecontent.engine.list_approval_queuecontent:read
30get_engine_runInspect content engine runcontent.engine.get_runcontent:read
31list_context_sourcesList Context Sourcescontext.source.list, context.source.inspectcontent:read
32manage_context_sourceManage Context Sourcecreatecontext.source.create; updatecontext.source.update; refreshcontext.source.refresh; pausecontext.source.pause; resumecontext.source.resume; archivecontext.source.archivecontent:write
33list_context_observationsList Context Observationscontext.observation.listcontent:read
34manage_outreach_batchManage outreach batchprepareoutreach.batch.prepare; inspectoutreach.batch.inspect; reviseoutreach.batch.revise; approveoutreach.batch.approve; deferoutreach.batch.deferagent:write, agent:read
35manage_outreach_preparationManage outreach preparationstartoutreach.preparation.start; resumeoutreach.preparation.resume; inspectoutreach.preparation.inspectagent:write, agent:read
36manage_outreach_outcomesManage outreach outcomesinspectoutreach.outcomes.inspect; recordoutreach.outcomes.recordagent: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 toolreadOnlyHintdestructiveHintidempotentHintopenWorldHint
get_contextyesnoyesno
select_workspacenonoyesno
get_agentyesnoyesno
configure_agentnoyesyesno
manage_agentnoyesnono
list_conversationsyesnoyesno
list_conversation_messagesyesnoyesno
inspect_reply_eligibilityyesnoyesno
manage_handoffnoyesyesno
send_messagenoyesnoyes
ask_agentnoyesnoyes
list_postsyesnoyesno
manage_postnoyesnoyes
manage_medianoyesnono
render_postnonoyesno
manage_generationnoyesnoyes
list_connectionsyesnoyesno
manage_connectionnoyesnoyes
list_routinesyesnoyesno
manage_routinenoyesnono
list_intentsyesnoyesno
manage_brandnoyesnono
capture_artifactnonoyesno
list_knowledgeyesnoyesno
add_knowledgenononono
replace_knowledgenoyesnono
append_journal_entrynonoyesno
trigger_engine_runnonoyesno
list_approval_queueyesnoyesno
get_engine_runyesnoyesno
list_context_sourcesyesnoyesno
manage_context_sourcenoyesnono
list_context_observationsyesnoyesno
manage_outreach_batchnoyesyesno
manage_outreach_preparationnonoyesno
manage_outreach_outcomesnonoyesno

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: createagent.create; deleteagent.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: takeoverconversation.handoff.takeover; hand_backconversation.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: approvecontent.post.approve; rejectcontent.post.reject; mark_promotedcontent.post.mark_promoted; reschedulecontent.post.reschedule; pausecontent.post.pause; resumecontent.post.resume; createcontent.post.create; editcontent.post.edit; cancelcontent.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_bytescontent.media.upload_bytes; preparecontent.media.upload_prepare; completecontent.media.upload_complete; listcontent.media.list; inspectcontent.media.inspect; attachcontent.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: quotecontent.generation.quote; requestcontent.generation.request; inspectcontent.generation.inspect; recovercontent.generation.recover; activecontent.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: connectcontent.connection.connect; inspectcontent.connection.inspect; preflightcontent.connection.preflight; disconnectcontent.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: createcontent.routine.create; clonecontent.routine.clone; updatecontent.routine.update; pausecontent.routine.pause; resumecontent.routine.resume; run_nowcontent.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_voicecontent.voice.inspect; inspect_policycontent.policy.inspect; inspect_lookcontent.look.inspect; set_voicecontent.voice.set; set_voice_customcontent.voice.set; reset_voicecontent.voice.set; set_policy_customcontent.policy.set; reset_policycontent.policy.set; set_look_customcontent.look.set; reset_lookcontent.look.set; create_intentcontent.intent.create; update_intentcontent.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: createcontext.source.create; updatecontext.source.update; refreshcontext.source.refresh; pausecontext.source.pause; resumecontext.source.resume; archivecontext.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: prepareoutreach.batch.prepare; inspectoutreach.batch.inspect; reviseoutreach.batch.revise; approveoutreach.batch.approve; deferoutreach.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: startoutreach.preparation.start; resumeoutreach.preparation.resume; inspectoutreach.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: inspectoutreach.outcomes.inspect; recordoutreach.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.

On this page