Skip to main content
Glama
kLOsk

AdLoop: Google Ads, Reddit Ads & GA4

Draft campaign changes

update_campaign

Preview changes to an existing Google Ads campaign without applying them; confirm later to apply only the specified budget, bid, targeting, or setting edits.

Instructions

Draft an update to an existing campaign — returns a PREVIEW, does NOT apply.

Only the parameters passed are changed; omitted ones stay as they are, and at least one change is required. Replacing geo targets keeps the campaign's negative geo exclusions (the preview lists them).

Returns a preview with a plan_id plus any warnings; nothing changes until confirm_and_apply applies it.

Google Ads API: https://developers.google.com/google-ads/api/docs/start

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
max_cpcNoMaximize Clicks CPC cap in the account's currency when bidding_strategy is TARGET_SPEND, or when the existing campaign already uses TARGET_SPEND. Increases are limited by the config's max_bid_increase_pct. 0 leaves it unchanged.
target_cpaNoTarget CPA in the account's currency; required if bidding_strategy is TARGET_CPA. 0 leaves it unchanged.
campaign_idYesThe numeric ID of the campaign to update (required).
customer_idNoGoogle Ads customer ID (digits, e.g. "1234567890"). Empty uses the configured default account.
target_roasNoTarget ROAS as a ratio (e.g. 4.0 = 400%); required if bidding_strategy is TARGET_ROAS. 0 leaves it unchanged.
daily_budgetNoNew daily budget in the account's currency (not micros), at most the config's max_daily_budget. 0 leaves it unchanged.
language_idsNoREPLACES all language targets; must not be empty when given. Common IDs: "1001" German, "1000" English, "1002" French, "1003" Spanish, "1004" Italian.
geo_target_idsNoREPLACES all positive geo targets; must not be empty when given. Common IDs: "2276" Germany, "2040" Austria, "2756" Switzerland, "2840" USA, "2826" UK.
bidding_strategyNoMAXIMIZE_CONVERSIONS | TARGET_CPA | TARGET_ROAS | MAXIMIZE_CONVERSION_VALUE | TARGET_SPEND | MANUAL_CPC. Empty leaves the strategy unchanged.
display_network_enabledNoEnable Search campaign display expansion. Omitted leaves the setting unchanged.
search_partners_enabledNoInclude ads on Search partners. Omitted leaves the setting unchanged.
display_expansion_enabledNoAlias for display_network_enabled; both must match when both are given.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed12 schema fields changedv0.27.1
    • addedInput schema / properties / bidding_strategy / description
      Added value: +"MAXIMIZE_CONVERSIONS | TARGET_CPA | TARGET_ROAS |\nMAXIMIZE_CONVERSION_VALUE | TARGET_SPEND | MANUAL_CPC. Empty leaves\nthe strategy unchanged."
    • addedInput schema / properties / campaign_id / description
      Added value: +"The numeric ID of the campaign to update (required)."
    • addedInput schema / properties / customer_id / description
      Added value: +"Google Ads customer ID (digits, e.g. \"1234567890\"). Empty\nuses the configured default account."
    • addedInput schema / properties / daily_budget / description
      Added value: +"New daily budget in the account's currency (not micros),\nat most the config's max_daily_budget. 0 leaves it unchanged."
    • addedInput schema / properties / display_expansion_enabled / description
      Added value: +"Alias for display_network_enabled; both must\nmatch when both are given."
    • addedInput schema / properties / display_network_enabled / description
      Added value: +"Enable Search campaign display expansion.\nOmitted leaves the setting unchanged."
    • addedInput schema / properties / geo_target_ids / description
      Added value: +"REPLACES all positive geo targets; must not be empty\nwhen given. Common IDs: \"2276\" Germany, \"2040\" Austria, \"2756\"\nSwitzerland, \"2840\" USA, \"2826\" UK."
    • addedInput schema / properties / language_ids / description
      Added value: +"REPLACES all language targets; must not be empty when\ngiven. Common IDs: \"1001\" German, \"1000\" English, \"1002\" French,\n\"1003\" Spanish, \"1004\" Italian."
    • addedInput schema / properties / max_cpc / description
      Added value: +"Maximize Clicks CPC cap in the account's currency when\nbidding_strategy is TARGET_SPEND, or when the existing campaign\nalready uses TARGET_SPEND. Increases are limited by the config's\nmax_bid_increase_pct. 0 leaves it unchanged."
    • addedInput schema / properties / search_partners_enabled / description
      Added value: +"Include ads on Search partners. Omitted leaves\nthe setting unchanged."
    • addedInput schema / properties / target_cpa / description
      Added value: +"Target CPA in the account's currency; required if\nbidding_strategy is TARGET_CPA. 0 leaves it unchanged."
    • addedInput schema / properties / target_roas / description
      Added value: +"Target ROAS as a ratio (e.g. 4.0 = 400%); required if\nbidding_strategy is TARGET_ROAS. 0 leaves it unchanged."
  2. First observedv0.9.0

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations: partial-update semantics ('only parameters passed are changed; omitted ones stay'), the at-least-one-change rule, non-destructive preview behavior, and the non-obvious side effect that replacing geo targets preserves negative geo exclusions (surfaced in the preview). The readOnlyHint=false / destructiveHint=false pair is consistent with a draft that stores a plan_id without applying changes.

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, each earning its place, with the most decision-critical fact (preview, does not apply) front-loaded. The trailing API doc link is the only mild filler but does not dilute the structure.

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

Completeness5/5

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

An output schema exists, but the description still usefully summarizes the return (plan_id plus warnings) and clarifies the confirm step. Combined with 100% schema coverage and annotations, an agent has everything needed to invoke it correctly.

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?

Schema coverage is 100%, so the schema carries the per-parameter detail (defaults, 0-leaves-unchanged, ID examples), setting the baseline at 3. The description adds a genuine cross-parameter rule ('only the parameters passed are changed') and the geo-replacement/negative-exclusion interaction that the schema does not state, lifting it above baseline.

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?

States a specific verb and resource ('Draft an update to an existing campaign') and immediately front-loads the critical scope fact that it returns a PREVIEW and does NOT apply. This clearly distinguishes it from confirm_and_apply and from the draft_campaign creation siblings.

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 names the alternative that completes the workflow ('nothing changes until confirm_and_apply applies it'), which routes the agent correctly. It also states the at-least-one-change requirement. It stops short of naming the opposite case (creating a new campaign via draft_campaign) as a when-not-to-use, so it's not a full 5.

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

Deploy Server

Other Tools