Skip to main content
Glama
kLOsk

AdLoop: Google Ads, Reddit Ads & GA4

Draft a campaign

draft_campaign

Generate a full Search campaign preview with budget, paused campaign, ad group, optional keywords, and geo/language targeting; returns a plan_id, creating nothing until confirmed.

Instructions

Draft a full campaign structure — returns a PREVIEW, does NOT create anything.

Creates: CampaignBudget + Campaign (PAUSED) + AdGroup + optional Keywords

  • geo targeting + language targeting. Ads are NOT included — draft_responsive_search_ad adds them once the campaign exists. Only SEARCH campaigns can be created: Performance Max needs an asset group with all its assets in one request, and DISPLAY, SHOPPING and VIDEO need channel-specific settings and ad group types, so the draft refuses them.

Returns a preview with a plan_id plus any warnings (e.g. a daily budget below 5x target CPA, MANUAL_CPC); nothing changes until confirm_and_apply applies the returned plan_id.

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

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
max_cpcNoIn the account's currency: the manual CPC bid for the initial ad group when bidding_strategy is MANUAL_CPC, or the Maximize Clicks CPC cap when bidding_strategy is TARGET_SPEND. Not allowed with other strategies; 0 means none.
keywordsNoOptional list of {"text": "keyword", "match_type": "EXACT|PHRASE|BROAD"} added to the initial ad group.
target_cpaNoTarget cost per acquisition in the account's currency; required if bidding_strategy is TARGET_CPA, optional target for MAXIMIZE_CONVERSIONS. 0 means none.
customer_idNoGoogle Ads customer ID (digits, e.g. "1234567890"). Empty uses the configured default account.
target_roasNoTarget return on ad spend as a ratio (e.g. 4.0 = 400%); required if bidding_strategy is TARGET_ROAS, optional target for MAXIMIZE_CONVERSION_VALUE. 0 means none.
channel_typeNoSEARCH (default). DISPLAY, SHOPPING, VIDEO and PERFORMANCE_MAX are refused with the reason (see above).SEARCH
daily_budgetYesDaily budget in the account's currency (not micros); must be greater than 0 and at most the config's max_daily_budget.
language_idsYesREQUIRED list of language constant IDs. Common: "1001" German, "1000" English, "1002" French, "1003" Spanish, "1004" Italian, "1014" Portuguese. Full list: Google Ads API language constants.
ad_group_nameNoName of the initial ad group. Empty uses campaign_name.
campaign_nameYesName of the new campaign.
geo_target_idsYesREQUIRED list of geo target constant IDs. Common: "2276" Germany, "2040" Austria, "2756" Switzerland, "2840" USA, "2826" UK, "2250" France. Full list: Google Ads API geo target constants.
bidding_strategyYesMAXIMIZE_CONVERSIONS | TARGET_CPA | TARGET_ROAS | MAXIMIZE_CONVERSION_VALUE | TARGET_SPEND | MANUAL_CPC. BROAD keywords require a Smart Bidding strategy (MAXIMIZE_CONVERSIONS, MAXIMIZE_CONVERSION_VALUE, TARGET_CPA, TARGET_ROAS).
display_network_enabledNoEnable Search campaign display expansion (SEARCH campaigns only). Defaults to off.
search_partners_enabledNoInclude ads on Search partners (SEARCH campaigns only).
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. Changed15 schema fields changedv0.27.1
    • addedInput schema / properties / ad_group_name / description
      Added value: +"Name of the initial ad group. Empty uses campaign_name."
    • addedInput schema / properties / bidding_strategy / description
      Added value: +"MAXIMIZE_CONVERSIONS | TARGET_CPA | TARGET_ROAS |\nMAXIMIZE_CONVERSION_VALUE | TARGET_SPEND | MANUAL_CPC. BROAD\nkeywords require a Smart Bidding strategy (MAXIMIZE_CONVERSIONS,\nMAXIMIZE_CONVERSION_VALUE, TARGET_CPA, TARGET_ROAS)."
    • addedInput schema / properties / campaign_name / description
      Added value: +"Name of the new campaign."
    • addedInput schema / properties / channel_type / description
      Added value: +"SEARCH (default). DISPLAY, SHOPPING, VIDEO and\nPERFORMANCE_MAX are refused with the reason (see above)."
    • 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: +"Daily budget in the account's currency (not micros);\nmust be greater than 0 and at most the config's max_daily_budget."
    • 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\n(SEARCH campaigns only). Defaults to off."
    • addedInput schema / properties / geo_target_ids / description
      Added value: +"REQUIRED list of geo target constant IDs.\nCommon: \"2276\" Germany, \"2040\" Austria, \"2756\" Switzerland, \"2840\" USA,\n\"2826\" UK, \"2250\" France. Full list: Google Ads API geo target constants."
    • addedInput schema / properties / keywords / description
      Added value: +"Optional list of {\"text\": \"keyword\", \"match_type\":\n\"EXACT|PHRASE|BROAD\"} added to the initial ad group."
    • addedInput schema / properties / language_ids / description
      Added value: +"REQUIRED list of language constant IDs.\nCommon: \"1001\" German, \"1000\" English, \"1002\" French, \"1003\" Spanish,\n\"1004\" Italian, \"1014\" Portuguese. Full list: Google Ads API\nlanguage constants."
    • addedInput schema / properties / max_cpc / description
      Added value: +"In the account's currency: the manual CPC bid for the initial\nad group when bidding_strategy is MANUAL_CPC, or the Maximize Clicks\nCPC cap when bidding_strategy is TARGET_SPEND. Not allowed with\nother strategies; 0 means none."
    • addedInput schema / properties / search_partners_enabled / description
      Added value: +"Include ads on Search partners (SEARCH\ncampaigns only)."
    • addedInput schema / properties / target_cpa / description
      Added value: +"Target cost per acquisition in the account's currency;\nrequired if bidding_strategy is TARGET_CPA, optional target for\nMAXIMIZE_CONVERSIONS. 0 means none."
    • addedInput schema / properties / target_roas / description
      Added value: +"Target return on ad spend as a ratio (e.g. 4.0 = 400%);\nrequired if bidding_strategy is TARGET_ROAS, optional target for\nMAXIMIZE_CONVERSION_VALUE. 0 means none."
  2. Addedv0.13.2
  3. Removedv0.13.0
  4. 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: explains that nothing mutates until confirm_and_apply, that the campaign is created PAUSED, that the return is a preview with a plan_id and warnings (e.g. budget below 5x target CPA, MANUAL_CPC). This is rich side-effect disclosure that the readOnlyHint/destructiveHint flags alone cannot convey.

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?

Front-loads the most important fact (preview, no creation) in the first sentence, then layers created entities, exclusions, and the return/apply flow in tight, purposeful sentences. No filler.

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?

For a 15-parameter drafting tool with an output schema, the description covers everything needed to call it correctly: scope, channel restrictions, downstream dependencies, and the apply workflow, while the output schema handles return-value detail.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 15 parameters in detail; the description adds mostly structural context rather than new per-parameter meaning. Baseline 3 is appropriate when the schema does the heavy lifting.

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 (draft) and resource (campaign) and immediately clarifies it returns a PREVIEW and creates nothing, which distinguishes it from real mutation tools like confirm_and_apply. The enumeration of what gets drafted (budget, paused campaign, ad group, keywords, geo/language) makes the output scope unambiguous.

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

Usage Guidelines5/5

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

Explicit when-to-use (SEARCH campaigns only) and when-not (PMax/DISPLAY/SHOPPING/VIDEO refused, with reasons). Names the alternative for ads (draft_responsive_search_ad) and the follow-up tool (confirm_and_apply), leaving nothing to inference.

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