Skip to main content
Glama

Manage Google Ads Keywords

adsap_google_manage_keywords

Manage Google Ads Search keywords AFTER creation. op 'add': add up to 100 keywords (and/or ad-group negatives via negative: true) to an EXISTING ad group — atomic batch, per-keyword optional cpc_bid. op 'add_negative': add campaign-LEVEL negative keywords (block queries across every ad group in the campaign). op 'replace': change one keyword's text and/or match type ATOMICALLY (Google keyword text/match type are immutable, so this is remove + re-add in one request — the keyword gets a NEW id and its performance history restarts; status and bid carry over). op 'remove': remove one ad-group keyword/negative (keyword_id) or one campaign negative (campaign_negative_id). Ids are composite ":" — ad-group keyword ids come from adsap_google_get_insights level keyword; created ids are returned by the add ops. Always dry_run: true first. For pause/enable use adsap_google_set_entity_status; for per-keyword bid changes alone use adsap_google_update_entity with updates.cpc_bid.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
opYes
dry_runNo
keywordsNoops 'add' / 'add_negative': the keywords to create. For add_negative, cpc_bid/negative are not allowed (campaign keywords are negative by definition).
keyword_idNoops 'replace' / 'remove': the ad-group keyword as "<ad_group_id>:<criterion_id>".
ad_group_idNoop 'add' only: the EXISTING ad group to add keywords/negatives to.
campaign_idNoop 'add_negative' only: the campaign to add campaign-level negatives to.
replace_withNoop 'replace' only: the replacement keyword.
ad_account_idYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.
campaign_negative_idNoop 'remove' only: a campaign-level negative as "<campaign_id>:<criterion_id>" (ids returned by op 'add_negative').

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.9/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden, and it discloses high-impact behavior: atomic batch adds, atomic replace because Google text/match type are immutable, new id and performance-history reset on replace, status/bid carryover, and campaign-level negative scope. It also explains the composite ID format and where IDs come from.

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?

Dense but well structured; each sentence covers an operation, a constraint, or a sibling-routing decision. The op labels make it scannable, and there is 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?

Despite no annotations and no output schema, the description gives enough to invoke correctly: per-op semantics, parameter applicability, ID provenance, side effects, and alternatives. It even tells the agent to run dry_run first, which compensates for the absent safety annotations.

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 high (78%) and the schema already documents fields such as cpc_bid currency and match-type enum. The description adds operation-level meaning beyond the schema: it specifies which parameters apply per op, explains that add is atomic, and tells the agent where keyword IDs come from and that add ops return created IDs. A small gap remains for the dry_run return behavior despite the 'always dry_run first' instruction.

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 the exact resource (Google Ads Search keywords) and operation family ('Manage ... AFTER creation'), then enumerates four explicit operations (add, add_negative, replace, remove) with concrete effects. It differentiates from siblings by naming the tools for pause/enable and bid-only changes, so an agent can select it correctly.

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?

It gives explicit routing: use this for keyword lifecycle operations after creation; pause/enable should go to adsap_google_set_entity_status and standalone bid changes to adsap_google_update_entity. It also tells the agent to 'Always dry_run: true first' and ties each operation to its required parameter (ad_group_id, campaign_id, keyword_id, campaign_negative_id).

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