← All MCP tools

MCP tool

generate_creative

Generate channel-appropriate ad creative (copy + renditions) from a brief, grounded in a persona passed directly or inherited from campaignId: e.g. a 30s audio script, DOOH copy, CTV storyboard, responsive search assets, or portable paid-social copy and asset direction. Returns the stored creative, its per-channel renditions, and an automatic clearance precheck. Then use submit_creative to send it to an adapter.

Input

Pass fields from this schema as the tool arguments. Runtime ownership, product scope and readiness checks still apply.

Input JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "personaId": {
      "description": "persona the creative should speak to; optional when campaignId resolves one",
      "type": "string"
    },
    "channel": {
      "type": "string",
      "enum": [
        "ctv",
        "audio",
        "tv",
        "cinema",
        "dooh",
        "search",
        "social"
      ],
      "description": "channel to generate for"
    },
    "product": {
      "type": "string",
      "minLength": 1,
      "description": "the product or brand being advertised"
    },
    "proposition": {
      "type": "string",
      "minLength": 3,
      "description": "the single message the ad should land, e.g. \"Ship code twice as fast\""
    },
    "tone": {
      "default": "bold",
      "description": "creative tone",
      "type": "string",
      "enum": [
        "bold",
        "premium",
        "friendly",
        "urgent",
        "witty"
      ]
    },
    "mandatories": {
      "description": "copy elements that must appear verbatim (legal lines, brand taglines); max 4 lines of 60 characters",
      "maxItems": 4,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 60
      }
    },
    "campaignId": {
      "description": "campaign to attach the creative to",
      "type": "string"
    }
  },
  "required": [
    "channel",
    "product",
    "proposition"
  ]
}

REST mapping and authority

The tool wraps this REST endpoint. The mapping identifies path/query/body transformations and approval or idempotency headers.

Request contract
{
  "method": "POST",
  "path": "/api/v1/creatives/generate",
  "pathFields": [],
  "pathSchema": {
    "type": "object",
    "properties": {},
    "additionalProperties": false
  },
  "pathEncoding": "encodeURIComponent for each path field",
  "governedAction": null,
  "headers": {},
  "bodySchema": {
    "type": "object",
    "properties": {
      "personaId": {
        "description": "persona the creative should speak to; optional when campaignId resolves one",
        "type": "string"
      },
      "channel": {
        "type": "string",
        "enum": [
          "ctv",
          "audio",
          "tv",
          "cinema",
          "dooh",
          "search",
          "social"
        ],
        "description": "channel to generate for"
      },
      "campaignId": {
        "description": "campaign to attach the creative to",
        "type": "string"
      },
      "brief": {
        "type": "object",
        "properties": {
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "the product or brand being advertised"
          },
          "proposition": {
            "type": "string",
            "minLength": 3,
            "description": "the single message the ad should land, e.g. \"Ship code twice as fast\""
          },
          "tone": {
            "default": "bold",
            "description": "creative tone",
            "type": "string",
            "enum": [
              "bold",
              "premium",
              "friendly",
              "urgent",
              "witty"
            ]
          },
          "mandatories": {
            "description": "copy elements that must appear verbatim (legal lines, brand taglines); max 4 lines of 60 characters",
            "maxItems": 4,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 60
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "product",
          "proposition",
          "tone"
        ]
      }
    },
    "additionalProperties": false,
    "required": [
      "channel",
      "brief"
    ]
  },
  "bodyMapping": {
    "passthroughOtherFields": true,
    "brief": {
      "product": "product",
      "proposition": "proposition",
      "tone": "tone",
      "mandatories": "mandatories"
    }
  },
  "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.

Output JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "creative": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "required": [
    "creative"
  ],
  "additionalProperties": {}
}

Safety annotations

MCP annotations
{
  "readOnlyHint": false,
  "destructiveHint": false,
  "idempotentHint": false,
  "openWorldHint": true
}

Annotations help a client present the tool. The API independently enforces authorization and exact action approvals. Error and retry guidance →

generate_creative | AdBuyMCP docs