Skip to main content
Glama
kLOsk

AdLoop: Google Ads, Reddit Ads & GA4

Draft a promotion asset

draft_promotion

Create a preview of a promotion asset, link it to an ad group, campaign or account, and validate the landing URL before publishing.

Instructions

Draft a promotion asset ("20% off winter tyres") — returns a PREVIEW.

Creates the promotion and links it where the id points: ad_group_id links to that ad group, campaign_id to that campaign. Account-wide linking needs scope="account" and no id. The final_url is checked for reachability. Returns a preview with a plan_id.

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

Input Schema

NameRequiredDescriptionDefault
scopeNoEmpty (follows the id), "campaign", "ad_group" or "account".
end_dateNoLast day the promotion shows, YYYY-MM-DD.
occasionNoOptional occasion such as BLACK_FRIDAY, CHRISTMAS or SUMMER_SALE.
final_urlYesLanding page of the promotion.
money_offNoFixed discount, in the account currency unless currency_code says otherwise. Pass this or percent_off.
start_dateNoFirst day the promotion shows, YYYY-MM-DD.
ad_group_idNoNumeric ID of the ad group to link it to, instead of a campaign.
ad_scheduleNoOptional windows when the promotion shows, each {day_of_week: MONDAY..SUNDAY, start_hour: 0-23, end_hour: 0-24, start_minute/end_minute: 0, 15, 30 or 45}. Hours are in the account time zone.
campaign_idNoNumeric ID of the campaign to link the promotion to.
customer_idNoGoogle Ads customer ID (digits, dashes optional). Defaults to the configured account.
percent_offNoPercentage discount, greater than 0 and at most 100 (15.5 for 15.5%). Pass this or money_off.
currency_codeNoISO 4217 code for money_off and orders_over_amount. Empty uses the account currency (shown in the preview).
language_codeYesLanguage of the promotion's text ("de", "en"). Required: Google shows the promotion in that language.
promotion_codeNoOptional coupon code (at most 15 characters). Pass this or orders_over_amount, not both.
promotion_targetYesWhat the promotion is for, shown in the ad (at most 20 characters).
discount_modifierNo"UP_TO" shows "Up to 20% off"; empty for none.
orders_over_amountNoOptional minimum order value that unlocks the promotion.
redemption_end_dateNoLast day the offer can be redeemed, YYYY-MM-DD.
redemption_start_dateNoFirst day the offer can be redeemed, YYYY-MM-DD.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.35.1

TDQS

A3.8/5.0
Behavior3/5

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

The description adds real value beyond the annotations: it discloses that final_url is checked for reachability (a live network call, consistent with openWorldHint=true) and that the result is a preview carrying a plan_id rather than an applied change. However, "Creates the promotion and links it where the id points" sits in mild tension with the preview framing — it is unclear whether anything is persisted before confirm_and_apply, and no permission or quota constraints are mentioned.

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?

The preview promise and the linking rule are front-loaded, and the paragraph is dense with usable information. The trailing Google Ads API documentation link is low-value filler for an agent that already has the schema.

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 19-parameter creation tool this covers the essential decisions — how the promotion attaches to the account hierarchy, that a URL check occurs, and that a plan_id comes back (which the output schema can then elaborate). The remaining gap is the lifecycle after the preview, i.e. which tool applies the plan.

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?

With 100% schema coverage the baseline is 3, but the description goes beyond the schema by explaining the interaction between scope, ad_group_id and campaign_id, which the per-field descriptions do not tie together. The final_url reachability note also adds behavior the schema only labels as "Landing page of the promotion."

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 gives a specific verb+resource with a concrete example ("20% off winter tyres") and immediately flags that the output is a PREVIEW with a plan_id. That preview framing implicitly separates it from the mutating update_promotion sibling, though it never names that sibling explicitly.

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?

It spells out the linking rules precisely: ad_group_id links to an ad group, campaign_id to a campaign, and account-wide linking requires scope="account" with no id. What is missing is the downstream step — an agent is not told that confirm_and_apply is what actually commits the drafted plan.

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