MCP tool
set_campaign_creatives
Replace a pending campaign’s creative selection with existing reusable creatives. Every selected creative must belong to the advertiser and match a channel in the campaign plan. Do this before activation; launch_campaign requires at least one same-channel creative with a completed, non-failing policy precheck for every campaign line. The selection locks once activation starts.
Input
Pass fields from this schema as the tool arguments. Runtime ownership, product scope and readiness checks still apply.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"campaignId": {
"type": "string",
"minLength": 1,
"description": "pending campaign whose creative selection is replaced"
},
"agentStepId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "pending execute-step id that consumed the exact approved action"
},
"expectedActionDigest": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "SHA-256 digest returned for the exact approved action"
},
"creativeIds": {
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"description": "reusable creative ids; pass an empty array to clear the prelaunch selection"
}
},
"required": [
"campaignId",
"agentStepId",
"expectedActionDigest",
"creativeIds"
]
}REST mapping and authority
The tool wraps this REST endpoint. The mapping identifies path/query/body transformations and approval or idempotency headers.
{
"method": "PATCH",
"path": "/api/v1/campaigns/{campaignId}/creatives",
"pathFields": [
"campaignId"
],
"pathSchema": {
"type": "object",
"properties": {
"campaignId": {
"type": "string",
"minLength": 1,
"description": "pending campaign whose creative selection is replaced"
}
},
"additionalProperties": false,
"required": [
"campaignId"
]
},
"pathEncoding": "encodeURIComponent for each path field",
"governedAction": "campaign.creatives.update",
"headers": {
"x-chorus-agent-step-id": "agentStepId",
"x-chorus-agent-action-digest": "expectedActionDigest"
},
"bodySchema": {
"type": "object",
"properties": {
"creativeIds": {
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"description": "reusable creative ids; pass an empty array to clear the prelaunch selection"
}
},
"additionalProperties": false,
"required": [
"creativeIds"
]
},
"responseMapping": "REST JSON is returned as MCP structuredContent and a compatibility text block; privacy-sensitive tools validate their output schema."
}Output
This is the registered MCP output envelope. Nested fields are only modeled where the schema explicitly defines them.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"campaign": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"campaign"
],
"additionalProperties": {}
}Safety annotations
{
"readOnlyHint": false,
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": false
}Annotations help a client present the tool. The API independently enforces authorization and exact action approvals. Error and retry guidance →