google-ads-write-mcp
Provides write-side management for Google Ads, including creating search campaigns, ad groups, responsive search ads, keywords, assets, sitelinks, and callouts; setting budgets, target CPA, CPC ceilings, final URLs, and bid modifiers; updating or removing entities under a managed label; and retrieving Keyword Planner ideas.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@google-ads-write-mcpCreate a paused search campaign named 'CLAUDE - Spring Sale' with a $50 daily budget"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
google-ads-write-mcp
A small, allow-listed write-side MCP server for Google Ads, plus a read-only
Keyword Planner tool. It is the companion to Google's official
google-ads-mcp, which is
read-only by design: use that one to look things up, and this one to change them.
Works with Claude Code (and any MCP client over stdio).
Safety model
Dry run by default. Every mutating tool sends its request with
validate_only=true— Google checks auth and payload and changes nothing. Passconfirm=trueto apply.Atomic. Each call is one
MutateGoogleAdsRequestwith partial failure off: either everything in it is created, or nothing is.Additive. Tools add ads, keywords, assets, ad groups and campaigns, or toggle ENABLED/PAUSED, or tune budget and target CPA. Nothing edits existing ad text. New campaigns are created PAUSED.
One guarded delete.
remove_entityrefuses anything that does not sit under a campaign carrying the managed label (defaultclaude-managed, whichcreate_search_campaignattaches to every campaign it creates), and verifies that with a read query first. Removal in Google Ads is permanent; there is no restore.Audited. Every call — dry run or applied, success or rejection — is appended to a local JSONL audit log with timestamp, tool, customer, payload and API result. No secrets are written.
Local limits. RSA headline/description counts and lengths, sitelink, callout and snippet lengths, image size and aspect ratio are checked before anything is sent.
Related MCP server: Google Ads MCP Admin
Tools
Tool | Purpose |
| Build a complete Search campaign in one atomic mutate: budget, campaign, location and language criteria, campaign negatives, the managed label, every ad group with its keywords, optional ad-group negatives, optional final URL suffix (UTMs) and one responsive search ad. Created PAUSED; Google Search only; Maximize conversions (optional target CPA) or Maximize clicks |
| Add one ad group with keywords, optional negatives, optional final URL suffix and one RSA to an existing campaign |
| Add a new RSA to an ad group (existing ads untouched) |
| Add positive keywords to an ad group |
| Add negatives at campaign or ad-group level |
| Create the assets and attach them to a campaign; |
| Upload PNG/JPEG files and attach them to a Search campaign ( |
| Attach a business name (TEXT asset, |
| ENABLED / PAUSED on a campaign, ad group, ad or keyword |
| Change a campaign's non-shared daily budget |
| Set tCPA on a Maximize-conversions campaign |
| Set (or remove with 0) the max-CPC ceiling on a Maximize-Clicks campaign ( |
| Update final URLs (ads, assets) and final URL suffixes (ad groups, ads) in one atomic mutate — e.g. move UTMs into the final URL itself |
| Edit an existing RSA in place (same ad id and history; re-review, asset labels reset): replace headlines/descriptions, paths, final URL. Any argument left out is unchanged |
| Campaign-level final URL suffix (ValueTrack, e.g. |
| Campaign-level device bid adjustments in percent; −100 excludes a device (mobile-only = desktop −100, tablet −100). Call it after |
| Campaign-level location bid adjustments in percent (−90 to +900) on locations the campaign already targets, keyed by geo target constant id ( |
| Permanently remove a campaign, ad group, ad, keyword, campaign criterion (e.g. a campaign negative) or an asset link (campaign/ad-group asset) — one resource name or a list of the same kind, atomically — only under a campaign carrying the managed label |
| Keyword Planner ideas with monthly volume and bid ranges (read-only, 1 request/second) |
| Last N audit-log entries |
Customer ids may contain dashes. Use the read-only MCP first to look up campaign and ad-group ids and resource names.
Prerequisites
You need the same three things the official read-only server needs — this package creates none of them:
A Google Ads API developer token (from a manager account's API Center).
An OAuth client in a Google Cloud project, and an Ads ADC file produced by
gcloud auth application-default login --scopes=https://www.googleapis.com/auth/adwords(anauthorized_userJSON with client id, client secret and refresh token).Edit access on the Google Ads accounts you intend to change. Read-only users can query but every mutate is rejected.
Keep the token and the ADC file out of any repository.
Install
pipx install "git+https://github.com/Luxand/google-ads-write-mcp@v0.5.2"
google-ads-write-mcp --check # shows which credential files it found; no secrets printed
google-ads-write-mcp --list-toolsThe install is pinned to a tag, so pipx upgrade will not move it; upgrade
with pipx install --force "git+https://github.com/Luxand/google-ads-write-mcp@<new tag>".
Configuration
Everything is optional if the defaults fit:
Variable | Meaning | Default |
| the token itself | — |
| file holding the token |
|
| Ads ADC JSON |
|
| manager (MCC) id when the target account sits under one; | none |
| audit log path |
|
| Google Ads label that marks campaigns |
|
A login customer id applies to the whole client, so register one server entry per manager context you need.
Register in Claude Code
# direct accounts
claude mcp add --scope user google-ads-write -- "$(command -v google-ads-write-mcp)"
# accounts under a manager
claude mcp add --scope user google-ads-write-luxand \
--env GOOGLE_ADS_LOGIN_CUSTOMER_ID=1234567890 \
-- "$(command -v google-ads-write-mcp)"Then in Claude Code, /mcp should list the server and its tools. A safe first
call is audit_log_tail, then any tool without confirm (a dry run).
Scripted use
--call TOOL ARGS.json runs one tool from a JSON file through the same code
path, same dry-run default and same audit log:
google-ads-write-mcp --call create_search_campaign /abs/path/campaign.jsonUseful for pushing a large campaign generated from a spreadsheet, where passing
hundreds of keywords as chat tool arguments is impractical. Add "confirm": true
to the JSON to apply.
Things the API taught us
Search campaigns accept image assets only as
AD_IMAGE;MARKETING_IMAGE/SQUARE_MARKETING_IMAGEare Performance Max and Display field types and are rejected withFIELD_TYPE_INCOMPATIBLE_WITH_CAMPAIGN_TYPE.contains_eu_political_advertisingis required on campaign creation in current API versions; this server sets it to "does not contain".Geo and language criteria are plain resource names (
geoTargetConstants/2840,languageConstants/1000).GenerateKeywordIdeasis limited to 1 request per second per customer id and returnsRESOURCE_EXHAUSTEDabove that;keyword_ideasspaces and retries.A mutate request may hold at most 10,000 operations; a 20-ad-group Search campaign with ~250 keywords is about 370.
Device criteria (desktop 30000, mobile 30001, tablet 30002) exist implicitly on every campaign; set a bid modifier by updating
campaignCriteria/<campaign>~<id>. Namebid_modifierin the update mask explicitly: a field mask built by comparing against defaults drops a 0.0 (−100%) value and the request succeeds while changing nothing.
License
MIT.
Available Tools
22 toolsadd_ad_groupA
Add one ad group - with its keywords, optional ad-group negatives, optional final URL suffix and one responsive search ad - to an EXISTING campaign, atomically. Same argument shapes as create_search_campaign's ad_groups entries. Dry run unless confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| path1 | No | ||
| path2 | No | ||
| status | No | ENABLED | |
| confirm | No | ||
| keywords | Yes | ||
| final_url | Yes | ||
| headlines | Yes | ||
| campaign_id | Yes | ||
| customer_id | Yes | ||
| descriptions | Yes | ||
| final_url_suffix | No | ||
| negative_keywords | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It adds valuable behavior context: the operation is atomic, it is a dry run unless confirm=true, and it targets an existing campaign. It does not mention return values, error cases, or rate limits, but the presence of an output schema lessens that need.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences with no filler. It front-loads the primary action, packs the key input components into one clause, and adds two critical clarifications: the shape reference and the dry-run behavior. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 13-parameter tool with 0% schema coverage, the description is reasonably complete: it states the atomic create behavior, the dry-run safeguard, the existing-campaign constraint, and the relationship to create_search_campaign. It could be more explicit about what the dry-run response contains or what happens after confirm=true, but the output schema likely covers return details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter meaning. It identifies categories such as keywords, optional ad-group negatives, optional final URL suffix, and one responsive search ad, and points to create_search_campaign for exact argument shapes. However, individual parameters like status, path1, path2, and confirm are only partially explained, and several fields rely on self-explanatory names rather than explicit semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Add one ad group' with its keywords, optional negatives, optional final URL suffix, and one responsive search ad. It explicitly targets an EXISTING campaign, which distinguishes this tool from create_search_campaign and other sibling tools. The action and scope are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly limits usage to existing campaigns ('to an EXISTING campaign') and references create_search_campaign's ad_groups shape, implicitly routing the agent to that sibling for whole-campaign creation. It also gives an important execution guideline: 'Dry run unless confirm=true.' However, it does not explicitly state when to prefer this tool over add_keywords or create_responsive_search_ad for partial updates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_business_assetsA
Attach a business name and/or business logo to a Search campaign.
business_name (<=25 chars, Google's limit) is created as a TEXT asset and linked as BUSINESS_NAME. For the logo pass logo_path (absolute PNG/JPEG, square within 2%,
=128x128, <=5 MB; 1200x1200 recommended) to upload a new asset, or logo_asset_resource_name to re-link an image asset the account already holds; either is linked as BUSINESS_LOGO. At least one input is required. Dry run unless confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| logo_path | No | ||
| campaign_id | Yes | ||
| customer_id | Yes | ||
| business_name | No | ||
| logo_asset_resource_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so admirably. It discloses that business_name becomes a TEXT asset, logo_path uploads a new asset while logo_asset_resource_name re-links an existing one, at least one input is required, and the operation is a dry run unless confirm=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact yet information-dense, with the purpose front-loaded. Every sentence contributes distinct value: purpose, business name behavior, logo options and constraints, input requirement, and dry-run semantics. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters and no annotations, the description provides all essential behavioral details needed to call it correctly: options, constraints, required input condition, and confirmation behavior. An output schema exists, so return values do not need to be explained in the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must add meaning beyond parameter names. It thoroughly explains business_name, logo_path, logo_asset_resource_name, and confirm, including constraints and interplay. customer_id and campaign_id are not elaborated, but their roles are reasonably self-evident from their names and context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Attach a business name and/or business logo to a Search campaign.' It clearly distinguishes this from siblings like add_keywords or add_image_assets by focusing on the two business asset types and their Google Ads linkage roles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: this tool is for adding business name and/or logo specifically to a Search campaign. It does not explicitly name alternative tools or state when-not-to-use, but the scope is concrete enough for an agent to select it appropriately among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_calloutsA
Create callout assets (each <=25 chars) and attach them to a campaign. Dry run unless confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| callouts | Yes | ||
| campaign_id | Yes | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It excellently discloses the safety-critical dry-run behavior ('Dry run unless confirm=true') and the character limit. It does not describe edge cases or side effects beyond creation, but the core mutation behavior is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core action is front-loaded, the key constraint is embedded parenthetically, and the safety-critical dry-run caveat is stated directly. Excellent conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with an output schema and a relatively simple parameter set, the description covers the essential behavior: what it creates, the constraint, the target, and the confirmation gate. It is slightly incomplete because customer_id's role is not explained and sibling-tool routing is absent, but it remains sufficient for correct invocation in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies 'callouts' (<=25 chars) and 'confirm' (controls dry-run vs actual creation), but it does not explain 'customer_id' or add meaningful detail about 'campaign_id' beyond the obvious campaign attachment context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action and resource: create callout assets and attach them to a campaign. It also adds the constraint of <=25 chars per callout, which helps distinguish it from generic asset creation. Although sibling tools are not explicitly named, the resource type 'callouts' is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when callout assets need to be created and attached to a campaign, giving clear context. However, it does not mention when to avoid this tool or choose an alternative sibling like add_sitelinks or add_structured_snippet.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_image_assetsA
Upload image files as image assets and attach them to a Search campaign as AD_IMAGE.
images: [{"path": "/absolute/file.png", "field_type": "SQUARE_MARKETING_IMAGE"|"MARKETING_IMAGE", "name": optional asset name}, ...] field_type here declares the SHAPE (1:1 or 1.91:1) and drives local validation; the link itself is always AD_IMAGE, which is the only image field type Search campaigns accept (MARKETING_IMAGE / SQUARE_MARKETING_IMAGE are Performance Max and Display field types). or, to attach an image already in the account: {"asset_resource_name": "customers/../assets/..", "field_type": ...}. PNG or JPEG, <=5 MB, 1:1 >=300x300 or 1.91:1 >=600x314; the file's aspect ratio must match the field_type. Google rejects an image identical to an existing asset (DUPLICATE_ASSET) - pass its asset_resource_name instead. Dry run unless confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| images | Yes | ||
| confirm | No | ||
| campaign_id | Yes | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and handles it well. It discloses the dry-run behavior unless confirm=true, local validation based on field_type, size and aspect-ratio constraints, and Google's DUPLICATE_ASSET rejection behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but information-dense, with every sentence earning its place. It front-loads the core purpose, then provides precise format examples, validation requirements, duplicate handling, and the confirmation flag without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no schema-level descriptions, this definition is complete: it covers input shapes, accepted file types and dimensions, field_type semantics, duplicate-asset handling, and dry-run behavior. An output schema exists, so return-value details are not required from the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description substantially compensates by documenting the exact images array structure, valid field_type values, optional name, and the asset_resource_name alternative. It also explains confirm as dry-run unless true; customer_id and campaign_id are left to their self-explanatory names and the surrounding campaign context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource: 'Upload image files as image assets and attach them to a Search campaign as AD_IMAGE.' It also distinguishes Search's AD_IMAGE link type from Performance Max and Display field types, which helps separate this tool from sibling asset tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly establishes the Search-campaign context and explains when to use an existing asset_resource_name versus uploading a file, including the duplicate-asset case. It does not explicitly name sibling tools as alternatives, but it gives enough contextual guidance to route usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_keywordsA
Add positive keywords to an ad group. keywords: [{"text": "photo to pdf", "match_type": "PHRASE|EXACT|BROAD"}]. Dry run unless confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ENABLED | |
| confirm | No | ||
| keywords | Yes | ||
| ad_group_id | Yes | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it delivers the key safety trait: 'Dry run unless confirm=true.' This makes the default non-destructive behavior explicit, which is critical for a mutation tool. Less-critical details like permission requirements or duplicate handling are omitted, but the most important behavior is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: purpose first, then the keyword payload format, then the safety warning. There is zero filler, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and 0% schema coverage, the description covers the essential ground: what it does, the keyword payload format, and the dry-run safety valve. Return values are handled by the output schema, and the remaining parameters are self-evident from their names, leaving only minor gaps such as batch limits or deduplication behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description compensates for the most complex parameter by showing the keyword payload shape, including the required text field and the match_type enum values ('PHRASE|EXACT|BROAD'). It also clarifies the effect of confirm, though customer_id, ad_group_id, and status are left to inference from their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource: 'Add positive keywords to an ad group.' The word 'positive' clearly distinguishes this tool from its sibling add_negative_keywords, so an agent can tell them apart without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by the phrasing 'positive keywords' — an agent can infer when to choose this over add_negative_keywords — but there is no explicit statement of when to use it versus alternatives, nor any exclusions or prerequisites. The guidance is present only by implication, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_negative_keywordsA
Add NEGATIVE keywords at campaign level (campaign_id) or ad-group level (ad_group_id). match_type: PHRASE (default) | EXACT | BROAD. Dry run unless confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| keywords | Yes | ||
| match_type | No | PHRASE | |
| ad_group_id | No | ||
| campaign_id | No | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does disclose the most important trait: 'Dry run unless confirm=true.' It also reveals the default match type. It does not cover permissions, idempotency, or error conditions, but it gives the safety-critical behavior upfront.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with no filler. The purpose and placement are first, then match type, then the critical dry-run behavior; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is mostly complete for a moderately complex tool: it identifies placement, match type, and default dry-run mode. The main gap is that it never explicitly states that one of campaign_id/ad_group_id should be supplied or what happens if both/neither are set, though 'or' implies the intended exclusivity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates by explaining match_type values/default, tying campaign_id and ad_group_id to placement levels, and defining confirm's dry-run semantics. customer_id and the exact format/syntax of keywords are not described, but the main disambiguating parameter details are present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Add NEGATIVE keywords') on a defined resource with placement levels (campaign_id / ad_group_id). The capitalized 'NEGATIVE' distinguishes it from the sibling add_keywords tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly scopes when to use this tool: adding negative keywords at campaign or ad-group level, with match-type control and dry-run by default. It does not explicitly call out alternatives or exclusions, but the negative-keyword framing and sibling list make the choice clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_sitelinksA
Create sitelink assets and attach them to a campaign, or to one ad group when ad_group_id is given (ad-group sitelinks override the campaign's for that ad group). sitelinks: [{"link_text": <=25 chars, "final_url": "https://...", "description1": <=35, "description2": <=35}, ...] Link text must be unique and URLs should differ (Google will not serve two sitelinks with the same URL together). Dry run unless confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| sitelinks | Yes | ||
| ad_group_id | No | ||
| campaign_id | Yes | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does it well: it discloses the safety-critical dry-run behavior ('Dry run unless confirm=true'), the ad-group override behavior, and Google's constraint about serving sitelinks with duplicate URLs. It could add more detail about what the dry run returns or auth requirements, but the most important behavioral traits are surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, then adds the parameter example, constraints, and safety behavior. Every sentence contributes meaningful information, though the dry-run and uniqueness rules could arguably be placed earlier for maximum emphasis.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description sufficiently covers the main operations, parameter semantics, important constraints, and the confirm/dry-run safety mechanism. An output schema is present, so return-value documentation is not expected here. Minor gaps such as error conditions and broader account-level requirements prevent a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the sitelinks array item structure with field-level limits (link_text <=25, final_url, description1/2 <=35), clarifies confirm semantics and the optional ad_group_id behavior. customer_id and campaign_id are not elaborated, but their names and required status make them self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb and resource: 'Create sitelink assets and attach them to a campaign, or to one ad group.' It clearly distinguishes the two target attachment modes and the ad-group override behavior, making the tool's function unambiguous and distinguishable from sibling asset tools like add_callouts or add_image_assets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear contextual usage for campaign-level versus ad-group-level attachment ('when ad_group_id is given') and explains the dry-run/confirm workflow. However, it does not explicitly state when to prefer this tool over sibling tools or when not to use it, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_structured_snippetA
Create one structured-snippet asset (header e.g. "Types", "Services"; 3-10 values, each <=25 chars) and attach it to a campaign. Dry run unless confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| header | Yes | ||
| values | Yes | ||
| confirm | No | ||
| campaign_id | Yes | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It prominently reveals the dry-run behavior ('Dry run unless confirm=true') and includes validation constraints (3-10 values, each <=25 chars). This goes well beyond the schema, though it does not cover permissions or post-creation effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence conveys the core action, validation rules, examples, and the confirmation behavior. Every element earns its place and the critical dry-run note comes at the end, keeping the main purpose front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameter-rich creation tool with no annotations, the description covers the essential operational details: what is created, where it is attached, validation limits, and the confirmation requirement. It does not discuss alternative tools or error scenarios, but an output schema exists and the description is otherwise sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must add meaning. It explains header with examples, constrains values by count and length, clarifies confirm as a dry-run gate, and indicates campaign_id via 'attach it to a campaign.' customer_id is left to inference, but overall it compensates well for the schema's lack of documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create one structured-snippet asset' and says it 'attach[es] it to a campaign.' This clearly distinguishes it from sibling tools like add_sitelinks and add_callouts, even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by the resource type: use this when you need a structured-snippet asset. However, it does not explicitly state when to prefer this over a sibling asset tool or mention any exclusions, so the guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_log_tailA
Return the last n entries of this server's local audit log (dry runs and applied changes).
| Name | Required | Description | Default |
|---|---|---|---|
| n | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It clearly implies a read-only operation ('Return') and identifies exactly what data is exposed (local audit log, dry runs, applied changes). It does not explicitly state that it makes no modifications, but the wording leaves little ambiguity for this kind of tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence carries all necessary information with no filler. It states the action, the object, the count parameter, and the log scope efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tail operation, the description is complete: it states what is returned, from where, and in what quantity. An output schema exists to cover return-value structure, and the sibling tools are unrelated, so no additional routing context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. It does so by defining 'n' as the number of entries returned ('last n entries'), giving the single parameter meaningful semantics despite the schema providing only a name and default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Return') and resource ('last n entries of this server's local audit log'), and clarifies content scope with '(dry runs and applied changes)'. It is clearly distinguishable from all sibling tools, which concern campaign and ad management rather than server diagnostics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is for retrieving recent audit log entries, and it names the log scope. There are no similar sibling tools to contrast with, so explicit alternatives are unnecessary; however, it does not state situational when-to-use guidance or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_responsive_search_adA
Create a NEW responsive search ad in an ad group (existing ads are untouched).
headlines: 3-15 items, each <=30 chars; descriptions: 2-4 items, each <=90 chars. An item may be a string or {"text": "...", "pin": "HEADLINE_1|HEADLINE_2|HEADLINE_3|DESCRIPTION_1|DESCRIPTION_2"}. status: ENABLED or PAUSED. Dry run unless confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| path1 | No | ||
| path2 | No | ||
| status | No | ENABLED | |
| confirm | No | ||
| final_url | Yes | ||
| headlines | Yes | ||
| ad_group_id | Yes | ||
| customer_id | Yes | ||
| descriptions | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It discloses the dry-run behavior ('Dry run unless confirm=true'), the mutation semantics, and that existing ads are unaffected. It does not cover authorization needs or post-confirm effects, but the core safety-relevant behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-sentence purpose, then brief parameter constraints. Each line adds necessary information, with no filler or repetition of schema titles.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, return values need not be explained. The description covers the complex nested item formats, limits, status, and dry-run behavior. Minor gaps remain around path1/path2 semantics and explicit guidance on when to choose the update sibling, but the core invocation context is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaningful detail for headlines and descriptions: item counts, character limits, allowed string/object shapes, and pin values. It also clarifies status and confirm semantics. However, path1, path2, final_url, and ID fields are left to their names and schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: create a NEW responsive search ad in an ad group. It explicitly notes existing ads are untouched, which differentiates it from update_responsive_search_ad without needing to inspect sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly communicates this tool is for creating new ads, not modifying existing ones ('existing ads are untouched'). It does not explicitly name update_responsive_search_ad as the alternative for updates, but the creation-focused wording makes the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_search_campaignA
Create a complete Search campaign in ONE atomic mutate: budget, campaign, location and language criteria, campaign negatives, and every ad group with its keywords and one RSA.
The campaign gets the managed label (default "claude-managed"; created in the account on first use) so remove_entity can later act on it. It is created PAUSED; enable it with set_status. locations: geo target constant ids (United States = 2840); location targeting is created presence-only (positive and negative geo_target_type = PRESENCE). languages: language constant ids (English = 1000); an empty list means "all languages" (no language criterion is created). bidding: MAXIMIZE_CONVERSIONS (optional target_cpa) or MAXIMIZE_CLICKS (optional cpc_bid_ceiling in account currency; omitted = uncapped). Headlines/descriptions accept plain strings or {"text", "pin": "H1".."H3" | "D1" | "D2"}. Network: Google Search only (no partners, no Display). ad_groups: [{"name", "final_url", "keywords": [{"text","match_type"}], "headlines": [...], "descriptions": [...], "path1", "path2", "status", "final_url_suffix", "negative_keywords": [...]}, ...] negative_keywords: [{"text", "match_type"}] at campaign level. Device bid adjustments (e.g. mobile-only) are a follow-up call to set_device_bid_modifiers with the returned campaign id: the device criteria only exist once the campaign does. Extensions (sitelinks, callouts, snippets, images) are separate tools - call them with the returned campaign id. Dry run unless confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| bidding | No | MAXIMIZE_CONVERSIONS | |
| confirm | No | ||
| ad_groups | Yes | ||
| languages | Yes | ||
| locations | Yes | ||
| target_cpa | No | ||
| customer_id | Yes | ||
| daily_budget | Yes | ||
| cpc_bid_ceiling | No | ||
| negative_keywords | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and delivers: the operation is atomic, the campaign is created PAUSED, a managed label is attached for later removal, location targeting is presence-only, an empty language list means 'all languages', and critically 'Dry run unless confirm=true' discloses the safety default. Network scope ('Google Search only (no partners, no Display)') and bidding behavior are also disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but earned: 0% schema coverage and 11 parameters require this density. It is front-loaded with a one-sentence summary of scope and atomicity, then organized topically (label/paused state, locations, languages, bidding, network, structures, follow-ups, dry-run). Every sentence adds value, and the ad_groups/negative_keywords format specifications are presented compactly as inline JSON shapes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity - 11 parameters, 6 required, zero schema descriptions, and no annotations - this description is essentially complete. All parameter semantics, side effects (label, paused state), safety control (dry run), and follow-up tool routing are covered. An output schema exists, so the description's decision not to explain return values is appropriate per the rubric.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully compensate - and it does. It documents locations with concrete constant IDs (2840 = US), languages with IDs and empty-list semantics, bidding strategy combinations for target_cpa and cpc_bid_ceiling including currency and cap behavior, the complete ad_groups object structure, campaign-level negative_keywords structure, and the headline/description pin format. Nearly every schema parameter gains meaning beyond its bare name and type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: 'Create a complete Search campaign in ONE atomic mutate' and enumerates exactly what is included (budget, campaign, location/language criteria, negatives, ad groups, keywords, one RSA). It clearly distinguishes itself from piecemeal siblings like add_ad_group, add_keywords, and create_responsive_search_ad by positioning itself as the all-in-one atomic creation tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes follow-up work: device bid adjustments go to set_device_bid_modifiers ('the device criteria only exist once the campaign does'), extensions are 'separate tools - call them with the returned campaign id', and activation goes to set_status ('It is created PAUSED; enable it with set_status'). It also ties the managed label to remove_entity, giving the agent clear when-to-use-this-vs-sibling guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_ideasA
Keyword Planner ideas with US-style monthly search volume and bid ranges. READ-ONLY: creates nothing, so there is no confirm flag. Costs one API operation per call, rate-limited to 1/second.
seeds: up to 20 seed keywords; url: a landing page to seed from (either or both).
geo_target_ids: geo target constant ids (default [2840] = United States); language_id: language
constant id (default 1000 = English). Google Search network only (no partners).
Returns ideas sorted by avg_monthly_searches desc, up to limit. Volumes are rounded 12-month
averages and close variants share one aggregated number.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| limit | No | ||
| seeds | No | ||
| customer_id | Yes | ||
| language_id | No | ||
| geo_target_ids | No | ||
| include_zero_volume | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses that the tool creates nothing, has no confirm flag, costs one API operation, is rate-limited, sorts results by avg_monthly_searches descending, rounds volumes, and aggregates close variants. This is rich, useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the most important facts: purpose, read-only nature, and cost. Parameter details are grouped logically, and return-behavior notes come last. Every sentence earns its place and the line breaks improve scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so re-explaining return fields would be redundant. The description covers side effects, rate limiting, ordering, aggregation behavior, defaults, and network scope, which is complete for a 7-parameter tool with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description explains seeds/url constraints, the 20-keyword cap, geo and language defaults, and the meaning of limit. It omits include_zero_volume behavior and does not define customer_id, but those are largely inferable from their titles and defaults, so this is a strong partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States clearly that it returns Keyword Planner ideas with monthly search volume and bid ranges, a specific read-only resource. The READ-ONLY framing actively distinguishes it from the mutating sibling tools like add_keywords and add_callouts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context: seeds and url can be used either or both, Google Search network only, no partners, one API operation per call, and a rate limit. It does not explicitly name an alternative tool, but the read-only scope and defaults make the intended use unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_entityA
PERMANENTLY remove a campaign, ad group, ad (adGroupAds/...), keyword (adGroupCriteria/...), campaign criterion such as a campaign negative keyword (campaignCriteria/...), or an asset LINK (campaignAssets/..., adGroupAssets/... - the asset itself stays in the account's asset library).
resource_name may be one resource name or a list of names of the SAME kind; a list is removed in one atomic mutate. Refuses unless every entity sits under a campaign carrying the managed label (default "claude-managed") - i.e. one created by this server. Google Ads has no restore for removed entities; historical data stays in reports but the entity cannot be re-enabled. Dry run unless confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| customer_id | Yes | ||
| resource_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does exceptionally well: it discloses permanence ('no restore'), the atomic-mutate behavior for lists, the managed-label guardrail, the dry-run default, and the subtle distinction between removing an asset link versus the asset itself. An agent can predict exactly what side effects will occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence delivers critical operational information: scope, resource_name semantics, label requirement, permanence, and dry-run behavior. The most important warning ('PERMANENTLY remove') is front-loaded, and the length is justified for a destructive, irreversible operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all essential aspects: allowable entity types, resource name formats, batch behavior, mutation atomicity, the managed-label prerequisite, irreversibility, and confirmation/dry-run semantics. Because an output schema exists, not describing return values is acceptable. Nothing an agent needs to invoke this tool safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It meaningfully explains that resource_name accepts one name or a list of names of the SAME kind, and that confirm gates the dry-run. It does not explain customer_id, but its purpose is self-evident from the name and Google Ads context. This is strong compensation for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'PERMANENTLY remove' and explicitly enumerates the exact entity types (campaign, ad group, ad, keyword, campaign criterion, asset LINK). It clearly distinguishes the destructive remove operation from the mutation and creation siblings, and clarifies that asset links are removed while the asset itself remains in the library.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong usage context: removal is atomic for a list of the same kind, requires the managed label, and is irreversible. It also states the dry-run behavior unless confirm=true. It does not name an alternative for non-destructive changes, but given the sibling set contains no other remove tool, the intended use is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_campaign_cpc_ceilingA
Set the max CPC bid ceiling (account currency, e.g. 5.0) of a campaign that uses Maximize Clicks (Campaign.target_spend). Pass 0 to remove the ceiling. Dry run unless confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| campaign_id | Yes | ||
| customer_id | Yes | ||
| cpc_bid_ceiling | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses that the operation is a dry run unless confirm=true, which is a critical safety behavior, and explains the effect of passing 0. It could add permission requirements or reversibility notes, but the dry-run and removal semantics are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences deliver the core action, parameter nuance, and confirmation requirement with no filler. The most important behavioral note (dry run unless confirm=true) is placed at the end but is clearly readable and well separated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential context: target campaign type, parameter semantics, and mutation safety via dry-run. An output schema exists, so return-value details are not required here. Minor gaps like expected value range or whether the ceiling persists across updates do not prevent correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It meaningfully defines cpc_bid_ceiling with currency and zero-removal semantics, and confirm is explained by the dry-run sentence. customer_id and campaign_id are left implicit, but their purpose is self-evident from their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action (setting a max CPC bid ceiling), the resource (a campaign using Maximize Clicks / Campaign.target_spend), and the currency context with an example. This distinguishes it from sibling tools like set_campaign_target_cpa and set_campaign_daily_budget.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the specific campaign type this applies to (Maximize Clicks), which is a clear usage condition. It also explains the special case of passing 0 to remove the ceiling. It does not explicitly name alternatives or state when not to use it, but the target_spend constraint is strong guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_campaign_daily_budgetA
Set a campaign's daily budget (account currency). Refuses if the budget is shared with other campaigns. Dry run unless confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| campaign_id | Yes | ||
| customer_id | Yes | ||
| daily_budget | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It reveals two important non-obvious behaviors: the tool refuses when the budget is shared, and it runs as a dry run unless confirm=true. It does not detail error responses or permission requirements, but the core safety semantics are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with no filler. The primary action is stated first, followed by the two most decision-relevant caveats: shared-budget refusal and the confirm-required dry-run flow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and no annotations, the description covers the essential behavioral context: operation, currency, refusal condition, and confirmation requirement. Minor gaps remain around explicit sibling differentiation and ID parameter meaning, but the tool is callable correctly with the provided information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies daily_budget is in account currency and confirm controls dry-run vs. execution. However, customer_id and campaign_id are left unexplained beyond their names, which are self-evident but still undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Set a campaign's daily budget', and adds 'account currency' for precision. This clearly distinguishes it from sibling tools like set_campaign_target_cpa and set_campaign_cpc_ceiling, which deal with bids rather than budgets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context: this tool sets a daily budget, requires confirmation for execution, and refuses shared-budget scenarios. It does not explicitly name sibling alternatives or state when not to use it, but the scope is unambiguous enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_campaign_final_url_suffixA
Set the CAMPAIGN-level final URL suffix, or clear it with "". Google appends the suffix to every final URL in the campaign at click time and substitutes ValueTrack tokens, e.g. "utm_term={keyword}&kw_match={matchtype}&device={device}". An ad-group or ad suffix overrides the campaign's, so keep the suffix at one level. Ads, their text and history are untouched. Dry run unless confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| campaign_id | Yes | ||
| customer_id | Yes | ||
| final_url_suffix | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the dry-run behavior ('Dry run unless confirm=true'), the side-effect scope ('Ads, their text and history are untouched'), and the precedence behavior with ad-group/ad suffixes. This goes well beyond what the schema alone would tell an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence adds distinct value: the action, the URL-appending behavior, the override precedence, the no-side-effects guarantee, and the dry-run condition. The description is front-loaded with the primary action and remains compact despite covering multiple behavioral aspects.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a single-purpose mutation with a simple schema. The description covers what the tool does, when to use it, parameter behavior, side effects, and the confirmation gate. An output schema exists, so return-value documentation is not required. No critical information for correctly invoking this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the final_url_suffix value format with ValueTrack tokens and the empty-string clearing behavior, and it clarifies the confirm parameter's dry-run effect. Customer_id and campaign_id are not elaborated, but their purpose is unambiguous from the tool name and context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'Set the CAMPAIGN-level final URL suffix, or clear it with ""'. It explicitly scopes the tool to campaign level, which distinguishes it from sibling set_final_urls and other campaign-level setters. The ValueTrack token example further clarifies what the suffix is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by explaining when the suffix applies ('at click time'), how it interacts with ad-group/ad suffixes ('An ad-group or ad suffix overrides the campaign's'), and advises keeping the suffix at one level. However, it does not explicitly name alternative tools or state when-not-to-use, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_campaign_target_cpaA
Set the target CPA (in account currency, e.g. 9.5) of a campaign that uses Maximize Conversions. Dry run unless confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| target_cpa | Yes | ||
| campaign_id | Yes | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals a critical safety behavior: 'Dry run unless confirm=true.' This tells the agent that the operation is non-destructive by default and requires explicit confirmation to actually apply changes. It does not describe permissions or reversibility, but the dry-run warning is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler. The primary action is front-loaded, and the critical dry-run behavior is stated immediately after. Every sentence adds functional value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential context: what is set, the unit, the required bidding strategy, and the safety default. An output schema exists, so return-value documentation is not the description's responsibility. It could mention that this modifies an existing campaign rather than creating one, but the tool name and parameters make that clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needs to compensate. It explains target_cpa's unit and format ('in account currency, e.g. 9.5') and clarifies the confirm parameter's effect via the dry-run statement. customer_id and campaign_id are not explicitly described, but their purpose is self-evident from the parameter names and the tool name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Set the target CPA') on a specific resource ('a campaign'), with the exact unit (account currency) and an example value. It also scopes the tool to campaigns using Maximize Conversions, distinguishing it from sibling tools like set_campaign_cpc_ceiling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly identifies the applicable context: campaigns that use Maximize Conversions. It does not explicitly list when not to use it or point to alternatives, but the context is clear enough for an agent to select it appropriately among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_device_bid_modifiersA
Set campaign-level device bid adjustments in percent (-100 to +900). -100 excludes the device: a mobile-only Search campaign is desktop=-100, tablet=-100. Smart Bidding strategies honour only the -100 case; other values are advisory under Maximize conversions / tCPA. Leave a device None to keep it unchanged. Dry run unless confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| mobile | No | ||
| tablet | No | ||
| confirm | No | ||
| desktop | No | ||
| campaign_id | Yes | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it delivers: it discloses the allowed range, the exclusion semantics, Smart Bidding's limited honoring of values, the 'None keeps unchanged' behavior, and the dry-run default unless confirm=true. This is rich, non-obvious behavior that an agent needs before invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, well-structured, and front-loaded with the core operation. Every sentence adds distinct value: range semantics, exclusion behavior, Smart Bidding nuance, None handling, and confirmation/dry-run behavior. There is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation tool with no annotations, the description covers the essential operational details: what can be set, valid values, how to leave fields unchanged, and how to actually execute instead of dry-run. The output schema exists, so return-value details are not required. No critical gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the meaning of device values (percent range, -100 exclusion), the None behavior, and the confirm flag's dry-run semantics. customer_id and campaign_id are not explicitly explained, but their names and required status make their roles self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Set campaign-level device bid adjustments in percent (-100 to +900).' It also clarifies the exclusions semantics and distinguishes device adjustments from the sibling location-based tool through the word 'device.' The purpose is unambiguous and immediately actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when the tool is appropriate: adjusting device bids, using -100 for exclusions, and understanding behavior under Smart Bidding. It does not explicitly name alternative tools or say 'use this instead of X,' but the context is clear enough for correct tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_final_urlsA
Update final URLs and/or final URL suffixes in one atomic mutate.
targets: [{"resource_name": <ad (adGroupAds/..~..) | ad group (adGroups/..) | asset (assets/..)>, "final_url": "https://..." (ads and assets), "final_url_suffix": "utm_..." or "" to clear (ad groups and ads)}, ...] Ads keep their text and history: Google allows changing an ad's final URLs in place. Typical use: move UTMs from an ad-group suffix into the final URL itself, or retag a campaign. Dry run unless confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| targets | Yes | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it delivers: it discloses atomicity, that ads keep text and history, that changes happen in place, and that the operation is a dry run unless confirm=true. This is exactly the safety-critical behavioral context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact yet information-dense, with the main purpose front-loaded, followed by a structured target example, a behavioral note, and the dry-run warning. Every sentence adds necessary value without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with three parameters and an output schema, the description covers the essential invocation details: target types, field applicability, atomicity, in-place preservation, typical use, and confirmation behavior. Nothing critical is missing for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description thoroughly compensates by documenting the targets array structure, allowed resource_name values, which fields apply to which entity types, and how to clear final_url_suffix. It also explains the confirm parameter's dry-run behavior; customer_id is self-explanatory from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Update') and resource ('final URLs and/or final URL suffixes') and clarifies the atomic, multi-entity scope by naming ads, ad groups, and assets. This clearly distinguishes it from sibling tools like set_campaign_final_url_suffix, which is narrower in scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit typical use cases: moving UTMs from an ad-group suffix into the final URL, or retagging a campaign. It does not explicitly state when not to use this tool versus alternatives, but the target scope and examples make the intended context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_location_bid_modifiersA
Set campaign-level LOCATION bid adjustments in percent (-90 to +900) on locations the campaign already targets. modifiers maps a geo target constant id (2840 = US, 2344 = Hong Kong; also accepts "geoTargetConstants/2840") to the adjustment: {"2840": 30, "2344": -30}. 0 removes an adjustment. Honoured by Manual CPC and Maximize clicks; Smart Bidding (tCPA / Maximize conversions) ignores location adjustments. Targeting is never changed: a geo the campaign does not target is rejected. One atomic mutate; dry run unless confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| modifiers | Yes | ||
| campaign_id | Yes | ||
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden and does so thoroughly. It discloses the allowed percent range, zero-removes semantics, bidding-strategy limitations, rejection of untargeted geos, atomic mutation, and the dry-run-before-confirm behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but fully front-loaded: core action and constraints come first, followed by parameter format, behavioral caveats, and confirmation semantics. Every sentence adds necessary operational detail without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex mutation tool with no annotations, the description covers all critical decision factors: range, target constraints, bidding-strategy compatibility, atomicity, and dry-run behavior. An output schema exists, so return-value details are not required here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters, and it does. It details the modifiers map format with concrete examples, accepts both raw IDs and geoTargetConstants/ prefixed IDs, explains that 0 removes an adjustment, and clarifies confirm's dry-run default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Set campaign-level LOCATION bid adjustments'. It clearly distinguishes this from sibling tools like set_device_bid_modifiers by explicitly naming the campaign-level location scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It specifies when the tool is effective by stating location adjustments are honored by Manual CPC and Maximize clicks but ignored by Smart Bidding, giving clear guidance on when not to use it. It also clarifies that targeting is never changed and only already-targeted locations are accepted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_statusA
Set ENABLED or PAUSED on a campaign, ad group, ad (adGroupAds/......) or keyword (adGroupCriteria/......).
resource_name must be the full resource name from the read MCP, e.g. customers/123/campaigns/456.
Dry run unless confirm=true. (REMOVED is intentionally not supported.)
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| confirm | No | ||
| customer_id | Yes | ||
| resource_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It discloses a dry-run default unless confirm=true, which is critical safety-relevant behavior, and states that REMOVED is not supported. This gives the agent actionable knowledge about side effects and limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences with no filler. The core action is front-loaded, and each sentence adds meaningful guidance: allowed values/resource types, resource_name requirement, and safety/constraint behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and sparse schema, the description covers the most important operational details: valid statuses, supported resource types, resource_name format, dry-run behavior, and the unsupported REMOVED state. It does not describe customer_id, but that parameter is self-explanatory. The output schema exists, so return values need not be described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains resource_name format with an example, enumerates valid status values, and explains the confirm parameter's dry-run semantics. customer_id is not elaborated, but it is self-evident from the name and example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Set'), exact allowed values ('ENABLED or PAUSED'), and a clear list of target resources (campaign, ad group, ad, keyword). It also distinguishes itself from other mutation tools by focusing on status transitions and explicitly excluding REMOVED.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the prerequisite that resource_name must be the full resource name from the read MCP, gives an example, and clarifies that REMOVED is intentionally not supported, implying the alternative is remove_entity. It does not explicitly name sibling alternatives, but the guidance is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_responsive_search_adA
Edit an EXISTING responsive search ad in place (AdService update): the ad keeps its id and reporting history, goes back through policy review, and its asset performance labels / Ad Strength reset. Every argument left None is unchanged. headlines / descriptions, when given, REPLACE the whole list (3-15 headlines <=30 chars, 2-4 descriptions <=90 chars; items are strings or {"text", "pin": "HEADLINE_1|HEADLINE_2|HEADLINE_3|DESCRIPTION_1|DESCRIPTION_2"}). path1 / path2: "" clears. ad_id: the numeric ad id or an adGroupAds/~ resource name. Dry run unless confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| path1 | No | ||
| path2 | No | ||
| confirm | No | ||
| final_url | No | ||
| headlines | No | ||
| customer_id | Yes | ||
| descriptions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so thoroughly. It discloses that the ad goes back through policy review, that asset performance labels and Ad Strength reset, that lists are replaced wholesale, that empty strings clear path fields, and that the operation is a dry run unless confirm=true. These are meaningful side effects beyond what the schema alone could communicate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every clause carries operational value. It front-loads the core purpose before diving into parameter-level rules. The single-paragraph format with long parentheticals is not as scannable as bulleted rules, but there is no filler, redundancy, or irrelevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation tool with no annotations, the description is unusually complete. It covers the in-place update behavior, resulting side effects, list constraints, item shapes, resource-name format, clearing behavior, and the dry-run confirmation gate. Since an output schema exists, not describing return values in prose is acceptable, and nothing essential is left to dangerous inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds valuable semantics for ad_id, headlines, descriptions, path1, path2, and confirm. final_url and customer_id are not elaborated in the description, but 'Every argument left None is unchanged' provides a useful default semantic for all optional parameters, and final_url/customer_id are reasonably self-explanatory from their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Edit an EXISTING responsive search ad in place') on a concrete resource and distinguishes itself from create functionality by emphasizing that the ad keeps its id and reporting history. This is far from a tautology and makes the tool's scope unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'EXISTING' plus the detail that the ad keeps its id and reporting history clearly implies this tool is for modifying an already-created ad rather than creating a new one. The dry-run/confirm behavior also tells the agent when a real change will be committed. It does not explicitly name create_responsive_search_ad as the alternative, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
22 tool updates
v0.8.0- First observed
add_ad_group - First observed
add_business_assets - First observed
add_callouts - First observed
add_image_assets - First observed
add_keywords - First observed
add_negative_keywords - First observed
add_sitelinks - First observed
add_structured_snippet - First observed
audit_log_tail - First observed
create_responsive_search_ad - First observed
create_search_campaign - First observed
keyword_ideas - First observed
remove_entity - First observed
set_campaign_cpc_ceiling - First observed
set_campaign_daily_budget - First observed
set_campaign_final_url_suffix - First observed
set_campaign_target_cpa - First observed
set_device_bid_modifiers - First observed
set_final_urls - First observed
set_location_bid_modifiers - First observed
set_status - First observed
update_responsive_search_ad
TDQS
Each tool clearly targets a distinct Google Ads entity or lifecycle action: campaign creation, ad group addition, keyword/negative keyword management, RSA create/update, asset extensions, bid/budget settings, and removal. The only near-overlap, set_campaign_final_url_suffix versus set_final_urls, is clearly separated by campaign-level vs ad/ad-group/asset-level scope.
The majority of tools follow a clear snake_case verb_noun pattern using create_, add_, set_, update_, and remove_. The exceptions are keyword_ideas and audit_log_tail, which are noun-phrase read/utility tools, and the create_/ add_ distinction is subtle, so the set is mostly consistent but not perfectly uniform.
At 22 tools, the server sits in the heavy range and feels larger than the typical well-scoped toolset. However, the count is understandable given the breadth of Google Ads write operations, and most tools cover distinct, non-redundant actions.
The surface covers the core Search campaign lifecycle: create campaign/ad group/RSA, manage keywords and negatives, attach sitelinks/callouts/snippets/image/business assets, update budget/bids/status/final URLs, and remove entities. Minor gaps remain, such as keyword bid updates and in-place extension edits, but they can be worked around with remove/re-add.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Google Ads MCP server — manage campaigns, keywords, and metrics.
Google Ads MCP with 20,000+ account peer context and staged approve-then-execute writes.
Hosted Google Ads MCP with OAuth, bounded reads, and prepare/confirm writes.
Google Ads, Meta Ads & GA4 MCP server - 250+ tools for campaigns, creatives, audiences & reports.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server that exposes write operations on Google Ads, enabling management of campaigns, ad groups, keywords, RSA ads, sitelinks, images, Customer Match audiences, and recommendations.MIT
- AlicenseAqualityBmaintenanceAn MCP server that extends the official Google Ads MCP with safe, confirmed campaign administration across manager accounts, featuring immutable mutation plans, multi-step approvals, and post-write verification.8Apache 2.0
- AlicenseNot gradedqualityAmaintenanceA Google Ads MCP server that enables safe, auditable management of ad accounts through natural language, including proposing, reviewing, applying, and rolling back changes with guardrails and dry-runs.MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for managing Google Ads campaigns through the official Google Ads API, covering accounts, campaigns, budgets, keywords, search terms, and keyword ideas. It provides tools for both reading and mutating live ads data, such as pausing campaigns, updating budgets, and adding keywords.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Luxand/google-ads-write-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server