Skip to main content
Glama

Create ad

create_ad

Create a new ad inside an ad group. A search ad reads headlinePart1–3 and description/description2. A single-image card (type OPENAI_CHAT_CARD, a chat card) reads headlinePart1 as its title (3–50 characters) and description as its body (up to 100) — or _native[platformId].postTitle / postBody when you want the card to read differently — finalUrl as its destination, and needs one image of at least 640 × 640: upload_asset, then attach_asset_to_ad with role MARKETING_IMAGE (or set creative.imageUrl). headlinePart2 is not needed for a card. validate_export names anything a platform would refuse; preview_campaign shows the card as it will be sent. Returns the full updated/created object. Scoped to the active Space — see set_active_space to switch, or pass space_id to override for this one call.

Input Schema

NameRequiredDescriptionDefault
bodyYesRequest body matching the AdCreate schema. Fields below; see the OpenAPI spec for nested object shapes.
space_idNoOverride the active Space for this one call. Defaults to the active Space set via set_active_space (or GROWOMAT_SPACE_ID on the server). Pass to read/write a different Space without changing the session binding.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • addedInput schema / properties / body / properties / _native
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "Platform-only settings, keyed by platform id (for example {\"openai-ads\": {\"budgetKind\": \"LIFETIME\"}}). Each value is stored and returned as sent. The NativeExtensions schema in the OpenAPI spec lists every key each platform reads and where (campaign, ad group or ad) — a lifetime budget, a bidding type, delivery surfaces, the words and image on a card. On update, send the whole object for a platform: it replaces that platform's settings.",
      +  "type": "object"
      +}
    • addedInput schema / properties / body / properties / angleId
      Added value: +{
      +  "description": "The angle (claim) this ad argues. Results are reported per angle.",
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / body / properties / angleProvenance
      Added value: +{
      +  "description": "Where the angle stamp came from: written by Growomat, set by you, or inferred from the copy. Defaults to `user` when you set `angleId` yourself.",
      +  "enum": [
      +    "generated",
      +    "user",
      +    "inferred"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / body / properties / competitorSimilarityAck
      Added value: +{
      +  "description": "Save manual copy that the competitor similarity check flagged. Only honoured when the refusal said `overridable: true`; the decision is recorded on the ad.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / body / properties / conceptId
      Added value: +{
      +  "description": "The concept (way of making the claim) this ad is a rendition of.",
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / body / properties / creative
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "Format-specific creative. For a single-image card, creative.imageUrl is the card's own image (it wins over an image attached with attach_asset_to_ad).",
      +  "type": "object"
      +}
    • addedInput schema / properties / body / properties / type
      Added value: +{
      +  "description": "Ad format. Defaults from the campaign type per platform; ads imported from a platform record the format that actually serves.",
      +  "enum": [
      +    "RESPONSIVE_SEARCH_AD",
      +    "RESPONSIVE_DISPLAY_AD",
      +    "PERFORMANCE_MAX_ASSET_GROUP",
      +    "VIDEO_AD",
      +    "REDDIT_TEXT_POST",
      +    "REDDIT_IMAGE_POST",
      +    "REDDIT_VIDEO_POST",
      +    "REDDIT_CAROUSEL_POST",
      +    "META_LINK_AD",
      +    "META_IMAGE_AD",
      +    "META_VIDEO_AD",
      +    "META_CAROUSEL_AD",
      +    "OPENAI_CHAT_CARD",
      +    "OPENAI_PRODUCT_AD_TEMPLATE",
      +    "LINKEDIN_SINGLE_IMAGE",
      +    "LINKEDIN_TEXT_AD",
      +    "LINKEDIN_VIDEO",
      +    "LINKEDIN_CAROUSEL",
      +    "LINKEDIN_DOCUMENT"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / body / required
      Previous value: -[
      -  "adGroupId",
      -  "campaignId",
      -  "headlinePart1",
      -  "headlinePart2",
      -  "description",
      -  "finalUrl"
      -]New value: +[
      +  "adGroupId",
      +  "campaignId",
      +  "headlinePart1",
      +  "description",
      +  "finalUrl"
      +]
  2. First observed

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-read-only but non-destructive mutation. The description adds meaningful behavior beyond that: the image must be at least 640 × 640, an image can come from attach_asset_to_ad or creative.imageUrl, validate_export surfaces platform refusals, and the tool returns the full created object. It does not cover permissions, rate limits, or duplicate-ad behavior, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and the dense paragraph conveys a lot without obvious filler. However, the card-format rules are packed into a long em-dash-heavy run-on, and a short structured breakdown by format would be more scannable for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex nested-schema mutation with no output schema, the description covers return values, required image workflow, validation/preview, and active-Space scoping. It only documents search ads and OPENAI_CHAT_CARD in detail despite an enum of 19 ad formats, leaving agents to infer handling for VIDEO_AD, REDDIT_*, META_*, LINKEDIN_*, etc.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description substantially exceeds that by explaining which fields each format reads: search ads consume headlinePart1–3 and description/description2; OPENAI_CHAT_CARD uses headlinePart1 as a 3–50 character title, description as a body up to 100, and _native[platformId].postTitle/postBody as an alternate copy path. That is real semantic meaning not present in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: 'Create a new ad inside an ad group.' This clearly distinguishes it from update_ad and create_ad_group, and the agent knows exactly what operation is being performed without reading the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent to upload_asset + attach_asset_to_ad before creating a card, and tells it to use validate_export to catch platform refusals and preview_campaign to see the card as sent. It gives clear workflow context and alternatives, though it does not state when-not to use this tool (e.g., use update_ad for existing ads).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources