Skip to main content
Glama

Update campaign

update_campaign

Partial update of a campaign — body fields are merged into the existing record. 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 CampaignUpdate 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.
campaign_idYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 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 / adScheduleUseSearcherTimeZone
      Added value: +{
      +  "description": "Interpret the ad schedule in the searcher's local time zone instead of the account time zone, on platforms that support it (Microsoft Advertising). Ignored elsewhere.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / body / properties / biddingStrategy / description
      Previous value: -"Nested BiddingStrategy; see the OpenAPI spec for the field list."New value: +"How the platforms bid. MANUAL_CPC bids biddingStrategy.cpcBid per click (an ad group's own cpcBid wins); the target strategies read their target from the matching field."
    • addedInput schema / properties / body / properties / biddingStrategy / properties
      Added value: +{
      +  "cpcBid": {
      +    "description": "The click bid for MANUAL_CPC, in the account currency. Every ad group without its own cpcBid bids this.",
      +    "type": "number"
      +  },
      +  "maxCpcBidCeiling": {
      +    "description": "Never bid more than this per click.",
      +    "type": "number"
      +  },
      +  "targetCpa": {
      +    "description": "Target cost per acquisition, for TARGET_CPA.",
      +    "type": "number"
      +  },
      +  "targetImpressionShare": {
      +    "description": "Target impression share in percent, for TARGET_IMPRESSION_SHARE.",
      +    "type": "number"
      +  },
      +  "targetRoas": {
      +    "description": "Target return on ad spend as a ratio (2.5 means 250%), for TARGET_ROAS.",
      +    "type": "number"
      +  },
      +  "type": {
      +    "enum": [
      +      "MANUAL_CPC",
      +      "ENHANCED_CPC",
      +      "MAXIMIZE_CLICKS",
      +      "MAXIMIZE_CONVERSIONS",
      +      "MAXIMIZE_CONVERSION_VALUE",
      +      "TARGET_CPA",
      +      "TARGET_ROAS",
      +      "TARGET_IMPRESSION_SHARE"
      +    ],
      +    "type": "string"
      +  }
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / body / properties / _platformBudgets
      Added value: +{
      +  "additionalProperties": {
      +    "properties": {
      +      "amount": {
      +        "minimum": 0,
      +        "type": "number"
      +      },
      +      "enabled": {
      +        "type": "boolean"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "description": "Replaces where the campaign runs (same shape as on create_campaign). Omit it to keep the current platforms. At least one platform must stay switched on; removing one the campaign is live on pauses it there at the next sync.",
      +  "type": "object"
      +}
  3. First observed

TDQS

A3.9/5.0
Behavior4/5

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

With annotations already declaring readOnlyHint=false and destructiveHint=false, the description adds meaningful behavior: body fields are merged rather than replaced, and the full updated/created object is returned. It does not cover permissions, sync timing, or destructive edge cases at the top level, but it discloses the key mutation semantics.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the operation semantics, then return behavior, then Space scoping. There is no redundant filler.

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 mutation tool with no output schema, the description explains the merge behavior, return value, and Space targeting context. It is largely complete, though it leaves specialized update tools unmentioned at the top level and does not describe campaign_id semantics.

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

Parameters4/5

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

The schema has 67% description coverage and already documents many nested body fields in detail. The top-level description adds useful semantics for body merging and space_id override, though campaign_id is not described beyond its name and required status.

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

Purpose4/5

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

The description clearly states a specific verb and resource: partial update of a campaign, with merge semantics and the return shape. It does not explicitly distinguish this from create_campaign or specialized update helpers such as set_budget and set_geo_targeting, though the 'partial update' and 'existing record' wording implies the distinction.

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

Usage Guidelines3/5

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

It gives precise guidance for Space scoping: use set_active_space to switch or pass space_id for this one call. However, it does not say when to use update_campaign instead of create_campaign, set_budget, set_geo_targeting, set_ad_schedule, or other sibling tools, so core usage guidance is mostly implied.

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