Skip to main content
Glama

Manage Google Ads Extensions

adsap_google_manage_extension

Manage Google Ads extensions (sitelinks, callouts, structured snippets, call, promotion, price) at CAMPAIGN level (default) or ACCOUNT level (level: 'account' — the link serves with ALL eligible campaigns; all six types accepted, probe-confirmed). Ops: 'create_and_link' creates new extension assets and links them to a campaign in one atomic call (max 20); 'link' attaches EXISTING assets to a campaign; 'unlink' detaches them from that campaign — this is how you stop an extension serving there, because Google Ads assets cannot be deleted; 'update_asset' edits an existing asset — WARNING: assets are account-scoped, so an update changes the extension EVERYWHERE it is linked, not just one campaign. Image extensions: bytes go through adsap_google_upload_asset first, then op 'link' with field_type AD_IMAGE — BUT Google allowlist-gates AD_IMAGE links via API (most accounts get UNSUPPORTED_FIELD_TYPE; not something ADSAP can fix), and image assets are never content-mutable. Promotion/price also link to PMax campaigns; AD_IMAGE does not. Use adsap_google_list_extensions first to see what exists (asset ids, field types). Use dry_run: true first for create — Google validates everything without changing anything. All-or-nothing: on error nothing is applied. ad_account_id is the bare 10-digit Google Ads customer ID. Meta has no extensions analog.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
opYes
typeNoupdate_asset only: the asset's extension type — selects which of the flat per-type fields below apply. Image assets are NOT updatable.
levelNoWhere the link lives: 'campaign' (default, requires campaign_id) or 'account' (no campaign_id — the extension serves with all eligible campaigns; unlink at the same level to stop it). Ignored for update_asset.campaign
linksNolink / unlink only: 1-20 existing (asset_id, field_type) pairs to attach to / detach from the campaign.
headerNoupdate_asset (structured_snippet): new header (fixed Google vocabulary).
valuesNoupdate_asset (structured_snippet): new full set of 3-10 values (replaces the existing set).
dry_runNo
asset_idNoupdate_asset only: the existing asset to edit (from adsap_google_list_extensions).
end_dateNoupdate_asset (promotion): new serving end date.
occasionNoupdate_asset (promotion): new occasion.
final_urlNoupdate_asset (sitelink/promotion): new destination URL.
link_textNoupdate_asset (sitelink): new display text (1-25 chars).
extensionsNocreate_and_link only: 1-20 new extensions to create and link to the campaign, discriminated on `type`.
price_typeNoupdate_asset (price): new price table type.
start_dateNoupdate_asset (promotion): new serving start date.
campaign_idNoNumeric Google Ads campaign id. Required for create_and_link / link / unlink at level 'campaign'; must be OMITTED at level 'account'; ignored for update_asset.
percent_offNoupdate_asset (promotion): new percent discount (20 = 20% off). Mutually exclusive with money_amount_off.
callout_textNoupdate_asset (callout): new callout text (1-25 chars).
country_codeNoupdate_asset (call): new 2-letter country code.
description1Noupdate_asset (sitelink): new first description (set BOTH descriptions or NEITHER).
description2Noupdate_asset (sitelink): new second description (set BOTH descriptions or NEITHER).
phone_numberNoupdate_asset (call): new phone number.
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.
language_codeNoupdate_asset (promotion/price): new BCP 47 language tag.
promotion_codeNoupdate_asset (promotion): new promo code. Mutually exclusive with orders_over_amount.
price_offeringsNoupdate_asset (price): new FULL set of 3-8 rows (replaces the existing set).
price_qualifierNoupdate_asset (price): new qualifier (FROM / UP_TO / AVERAGE).
final_mobile_urlNoupdate_asset (sitelink/promotion): new mobile destination URL.
money_amount_offNoupdate_asset (promotion): new fixed discount. Mutually exclusive with percent_off.
promotion_targetNoupdate_asset (promotion): new promotion target.
orders_over_amountNoupdate_asset (promotion): new minimum order value. Mutually exclusive with promotion_code.
redemption_end_dateNoupdate_asset (promotion): new redemption window end.
redemption_start_dateNoupdate_asset (promotion): new redemption window start.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries full disclosure burden and does so exceptionally: atomic create_and_link, account-scoped update side effects, Google's AD_IMAGE allowlist gate, non-mutability of image assets, and all-or-nothing error semantics are all stated explicitly. This goes far beyond a generic 'manage' statement.

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?

Long but information-dense; every sentence earns its place, and the most decision-relevant facts (scope, ops, account-scoped update warning, AD_IMAGE gating) are front-loaded. The length is proportionate to the tool's complexity.

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?

Covers operations, levels, prerequisites, constraints, and failure modes thoroughly. The only notable omission is the response/return format, and there is no output schema to fill that gap — minor for a mutation tool against otherwise excellent coverage.

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 94%, so the schema already documents most fields. The description adds genuine meaning beyond it by explaining op behavior, the level distinction, the 20-item cap, asset-id provenance, and the bare 10-digit ad_account_id format — slightly redundant with schema in places but clearly additive.

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?

The description names a specific resource (Google Ads extensions), enumerates all six supported types, the campaign/account scope, and the four operations. It clearly distinguishes itself from sibling tools like adsap_google_list_extensions and adsap_google_upload_asset without merely restating the title.

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?

Explicitly instructs the agent to call adsap_google_list_extensions first, route image bytes through adsap_google_upload_asset, and use dry_run:true before create. It also explains that unlink is the only way to stop an extension serving since assets cannot be deleted — strong when-to-use and prerequisite guidance.

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