AdCopilot
Server Details
Google Ads, GA4, Search Console and Tag Manager for AI assistants. Every change is proposed first.
- Status
- Healthy
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 121 tools
Most tools have a distinct resource-and-action purpose, and the descriptions explicitly differentiate similar areas. The main overlaps are among audit/summary tools (account_health_score, full_audit, analyze_waste, specific audits) and the six negative-keyword tools at account, campaign, and shared-list levels, but those boundaries are usually stated clearly.
Tool names are consistently snake_case, with clear product prefixes such as ga4_, gsc_, gtm_, and lsa_. Most are verb_noun, though several are noun-led (full_audit, change_history, keyword_opportunities); the overall pattern is still predictable.
121 tools is far beyond the 3-15 well-scoped range and creates a severe selection and context burden for an agent. Even for a multi-product Google Ads/analytics copilot, this surface is excessive and would benefit from consolidation.
The set covers audits, campaign/ad group/keyword creation and updates, assets, negative keywords, GA4 admin/reporting, Search Console, GTM staging, and LSA lead handling. Gaps are mostly intentional or workaroundable (no deletes, no shared-list detach, no GA4 unlink, no GTM publish, limited ad types), so the surface is broad but not exhaustive.
Available Tools
121 toolsaccount_health_scoreGoogle Ads: account health scoreBRead-onlyIdempotentInspect
Return one number: the weighted 0-100 health score, graded over those of the audit's 74 checks that apply to this account, its letter grade, the per-category breakdown, and how many checks could actually be evaluated. No findings, no evidence — the cheapest way to ask how the account is doing.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| detail | No | summary | |
| render | No | both | |
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the lower bar applies, yet the description still adds real substance: the score is weighted, it covers only the checks applicable to this account, and it reports how many checks could actually be evaluated (a key caveat for trusting the number). It does not explain cost, latency, or what happens with a too-short lookback window.
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, front-loaded with the return value and immediately followed by the scope caveat; nothing is padded. Minor density cost from the embedded clause about the audit's 74 checks.
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?
Output schema exists, so return values need no prose, and annotations cover the safety profile. But for a tool with four undocumented parameters (including a lookback window defaulting to 30 days) the description leaves too much for the agent to guess about how to configure the call.
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% across four parameters, so the description must compensate and it does not: days, detail, render and customer_id are never mentioned. In particular the summary/full detail enum is ambiguous — it is unclear whether 'full' reintroduces findings, which directly conflicts with the 'no findings' promise.
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?
Names a specific artifact (weighted 0-100 health score with letter grade and per-category breakdown) computed over the audit's applicable checks, and states what it does NOT return (findings, evidence). That scope statement implicitly separates it from full_audit-style siblings, though it never names the alternative tool outright.
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 'the cheapest way to ask how the account is doing' implies a quick-glance use case versus deeper audit tools, but there is no explicit 'use this when X, use full_audit when Y' routing. An agent must infer the boundary from the 'no findings, no evidence' caveat.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_account_negativesGoogle Ads: add account-level negative keywordsAInspect
Adds account-level negative keywords: words blocked in every campaign.
Use for words the business never wants to show for anywhere (e.g.
brand-safety terms, "free", "jobs"). In the Google Ads API these live in
the account's single account-level negative keyword list (a shared set
of type ACCOUNT_LEVEL_NEGATIVE_KEYWORDS, linked to the account by a
CustomerNegativeCriterion). This tool adds the words to that list if the
account already has one, and otherwise creates the list, adds the words
and links it to the account. remove_account_negatives takes words back
out.
Limits (Google's): an account has at most one account-level list, of up
to 1,000 keywords. Google applies it to the search and shopping
inventory of Search, Shopping, Performance Max, App, Smart and Local
campaigns — not to Display or Video placements.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
keywords: List of keyword objects, each with:
- text: The keyword text (e.g., "free").
- match_type: One of: EXACT, PHRASE, BROAD. Default: BROAD.
Exact duplicates are dropped.
Returns:
Dictionary with the account-level list's shared_set_id, whether it
was created now, and the keywords added.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | 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?
Beyond the annotations, it discloses the create-if-missing behavior ('adds the words to that list if the account already has one, and otherwise creates the list'), Google's one-list/1,000-keyword caps, duplicate dropping, and which campaign types the list applies to vs. which it doesn't. That is substantive operational context an agent could not infer from readOnlyHint/destructiveHint alone.
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 structure is excellent — purpose, when-to-use, API mechanics, limits, args, returns — and it is front-loaded. It is on the long side, with some Google Ads internals (CustomerNegativeCriterion, shared set type) that a calling agent does not strictly need, though they do support the behavior claims.
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 two-parameter mutation with no schema descriptions, the definition covers everything: preconditions, side effects, hard limits, default match type, and a described return payload (shared_set_id, created flag, keywords added). Combined with the existing output schema, an agent has sufficient information to invoke 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 description coverage is 0%, so the description must carry the parameter burden, and it does: customer_id is documented as digits only with no hyphens, and keywords is documented down to the nested text and match_type fields, the EXACT/PHRASE/BROAD enum, the BROAD default, and duplicate suppression. Nothing in the args is left undefined.
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 names a specific verb and resource ('adds account-level negative keywords') and immediately defines the scope as 'words blocked in every campaign,' which separates it from campaign-, ad-group-, and shared-list-level siblings. The explicit contrast with remove_account_negatives and the account-level list framing leave no ambiguity about what this tool does.
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 states exactly when to use it ('words the business never wants to show for anywhere') with concrete examples like brand-safety terms, 'free', and 'jobs'. It names the inverse tool (remove_account_negatives) and, through the account-level scoping, implicitly rules out the per-campaign and per-ad-group negative keyword tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_assets_to_asset_groupGoogle Ads: add assets to asset groupAInspect
Adds assets to an existing asset group.
Use this to add more assets to an asset group after it's been created.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
asset_group_resource_name: The resource name of the asset group.
assets: List of asset objects, each with:
- asset_resource_name: The resource name of the asset.
- field_type: One of: HEADLINE, DESCRIPTION, LONG_HEADLINE,
MARKETING_IMAGE, SQUARE_MARKETING_IMAGE, LOGO,
LANDSCAPE_LOGO, YOUTUBE_VIDEO, CALL_TO_ACTION_SELECTION.
Returns:
Dictionary with the count of assets added.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| assets | Yes | ||
| customer_id | Yes | ||
| asset_group_resource_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds that the return is a count of assets added, but says nothing about what happens with duplicate assets, partial failures, or whether previously attached assets are affected — notable for a non-idempotent mutation.
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 purpose is front-loaded in one line, followed by a usage line and a compact Args/Returns block; every section maps to something the agent needs. The Returns block is partly redundant given an output schema exists, costing a little space.
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 3-parameter mutation with an output schema and full annotation coverage, the description supplies the missing parameter semantics and the usage context. Remaining gaps are error/partial-success behavior and whether referenced assets must already exist, which an agent would likely need.
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%, so the description carries the full burden and mostly does: it specifies customer_id must be numbers only with no hyphens, names the asset group resource name, and enumerates the per-asset fields including the nine allowed field_type values. It does not reconcile this with the schema, which types assets loosely as free-form string maps, leaving the exact item shape slightly ambiguous.
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 and resource ("Adds assets to an existing asset group") and the second sentence clarifies the lifecycle position — after creation — which separates it from create_asset_group. It does not explicitly name the close siblings link_asset_to_campaign or link_assets_to_customer, so an agent must still infer the distinction.
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?
"Use this to add more assets to an asset group after it's been created" gives a clear usage condition and implicitly excludes the create path. There are no explicit when-not conditions (e.g., when to use link_asset_to_ad_group instead) or stated prerequisites such as the asset already existing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_keywordsGoogle Ads: add keywordsAInspect
Adds keywords to an ad group.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
ad_group_id: The ID of the ad group to add keywords to.
keywords: List of keyword objects, each with:
- text: The keyword text (e.g., "buy shoes online").
- match_type: One of: EXACT, PHRASE, BROAD. Default: BROAD.
- cpc_bid_micros: Optional CPC bid in micros of the account's currency for this keyword.
Returns:
Dictionary with created keyword resource names and count.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| 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?
Annotations already declare this is a non-read-only, non-destructive, non-idempotent mutation, so the safety profile is covered. The description adds useful behavior — it names the return payload ('created keyword resource names and count') and documents the default match type — but omits what many agents need most for a non-idempotent add: what happens with duplicate keywords, whether validation fails the whole batch or partially succeeds, and what errors look like.
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?
One front-loaded sentence states the action, followed by tightly structured Args and Returns blocks with no filler. The Returns block is somewhat redundant given an output schema exists, but it is short and does not bloat the definition.
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 3-parameter mutation with annotations and an output schema, the description supplies the field-level detail the schema lacks and confirms the return shape. The remaining gap is failure/duplicate semantics for a non-idempotent write, which an agent calling this repeatedly would want to know.
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 keywords array is an untyped object in the schema, so the description is the sole source of parameter meaning — and it delivers. It specifies the customer_id format ('numbers only, no hyphens'), the purpose of ad_group_id, and the three sub-fields of each keyword object including the EXACT/PHRASE/BROAD enum, the BROAD default, and the micros unit for CPC bids.
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: 'Adds keywords to an ad group.' An agent knows exactly what entity is created and where. It does not, however, distinguish itself from close siblings like add_negative_keywords, add_to_negative_keyword_list, or update_keyword, so the agent must infer the boundary from the names alone.
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?
There is no statement of when to use this tool versus alternatives such as add_negative_keywords (for exclusions) or update_keyword (for changing existing bids/match types), nor any prerequisites about the ad group or customer account. Usage is only inferable from the name and the parameter list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_negative_keywordsGoogle Ads: add negative keywordsAInspect
Adds negative keywords to a campaign to block irrelevant traffic.
Negative keywords prevent your ads from showing for specific search terms.
remove_negative_keywords takes them back out, given the same keywords.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
campaign_id: The ID of the campaign to add negative keywords to.
keywords: List of keyword objects, each with:
- text: The keyword text (e.g., "free LMS").
- match_type: One of: EXACT, PHRASE, BROAD. Default: BROAD.
Returns:
Dictionary with created negative keyword resource names.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | 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?
Annotations already cover the mutation/safety profile, and the description adds meaningful context: negative keywords suppress ads for specific searches, removal is handled by a sibling, and creation returns resource names. It does not discuss duplicate handling or limits, but the added behavioral context is solid beyond annotations.
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 purpose and structured with Args/Returns, making it easy to scan. It is slightly less concise than ideal because the Returns line partly duplicates output-schema information, but there is little wasted text.
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 three-parameter mutation tool with an output schema and annotations covering safety, the description is complete enough to invoke correctly. It documents the nested keyword object format that the input schema leaves ambiguous and explains the operation's effect and return.
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%, so the description carries the full burden and does so effectively: customer_id format is specified, campaign_id is identified, and keywords are explained as objects with text and match_type. It also gives allowed match types and the default, which the schema does not provide.
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/resource/scope: adding negative keywords to a campaign to block irrelevant traffic. It clearly distinguishes the operation from remove_negative_keywords and implies campaign-level scope versus sibling account/list variants.
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 gives useful context and names the inverse operation, remove_negative_keywords, but does not explicitly compare against sibling add tools such as add_account_negatives, add_to_negative_keyword_list, or attach_negative_keyword_list. The campaign scope is clear, but when-not guidance is limited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_to_negative_keyword_listGoogle Ads: add to negative keyword listAInspect
Adds negative keywords to an existing shared negative keyword list.
Every campaign the list is attached to picks the new words up at once.
remove_from_negative_keyword_list takes words back out. Find existing
lists with the search tool, e.g.
SELECT shared_set.id, shared_set.name, shared_set.member_count
FROM shared_set WHERE shared_set.type = 'NEGATIVE_KEYWORDS'
AND shared_set.status = 'ENABLED'.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
shared_set_id: The ID of the negative keyword list.
keywords: List of keyword objects, each with:
- text: The keyword text (e.g., "jobs").
- match_type: One of: EXACT, PHRASE, BROAD. Default: BROAD.
Exact duplicates are dropped; large lists are sent in batches.
Returns:
Dictionary with the created keyword resource names and count.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | Yes | ||
| customer_id | Yes | ||
| shared_set_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (not read-only, not destructive, not idempotent, closed-world), and the description adds behavior they don't: changes propagate to every attached campaign immediately, exact duplicates are silently dropped, and large input lists are batched. The immediate-propagation warning is exactly the kind of side effect an agent needs before writing.
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?
Front-loaded with the one-line purpose and the propagation warning, then cleanly split into Args and Returns. The embedded multi-line SQL block is useful but heavy relative to the rest, and the trailing 'Tools revision' tag is noise rather than content.
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, yet the description still telegraphs the return (resource names and count), so the caller knows what to report back. Combined with dedup, batching, and default match type, nothing material is missing for a three-param write tool.
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 item schema is a bare additionalProperties:string object, so the description carries the full burden — and does: customer_id is numbers only with no hyphens, shared_set_id identifies the list, and each keyword object needs text plus a match_type restricted to EXACT/PHRASE/BROAD with BROAD as default. This documents constraints the schema cannot.
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 and resource: adds negative keywords to an *existing shared* negative keyword list. That scope word 'existing' implicitly separates it from create_negative_keyword_list, and the explicit pointer to remove_from_negative_keyword_list separates it from the removal sibling.
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 the operative context (the list must already exist and be attached to campaigns), names the inverse tool, and supplies a concrete SQL query against the search tool to locate shared_set_id when the caller doesn't have one. That is actionable routing guidance rather than inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_search_termsGoogle Ads: find negative keywords in search termsARead-onlyIdempotentInspect
Group the last 30 days of search terms into negative-keyword candidates by theme: informational, job-seeker, free-intent, competitor, this workspace's never-show-for list, and searches in a language other than the saved profile language (none saved: a writing system other than their campaign's, no call). Returns one ready-to-run add_negative_keywords call per theme. Never proposes broad-match negatives. Read-only.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| detail | No | summary | |
| render | No | both | |
| themes | No | ||
| min_clicks | No | ||
| customer_id | Yes | ||
| max_findings | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond annotations: it never proposes broad-match negatives, it emits pre-built add_negative_keywords calls per theme, and it details the language-detection fallback (writing system vs campaign language, no call when unavailable). The restated 'Read-only' duplicates readOnlyHint=true but does not contradict it.
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?
Front-loaded with the core action and themes, then the output contract. The middle sentence about language detection is dense and parenthetical but still earns its space; overall only minor tightening is possible.
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 return values need no explanation, and the analysis purpose is well covered. However, for a 7-parameter tool with no schema field descriptions, the missing parameter guidance (filters, output format, caps) leaves the definition only marginally 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 carry the parameter burden. It covers the theme list and implies the 30-day window, but says nothing about detail, render, min_clicks, max_findings, or how to override days — four of seven parameters are undocumented anywhere.
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 and resource ('Group the last 30 days of search terms into negative-keyword candidates') and enumerates the exact themes it detects. An agent can distinguish it from siblings like analyze_waste or add_negative_keywords without opening any schema.
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?
Makes the workflow clear: it returns 'one ready-to-run add_negative_keywords call per theme,' which routes the agent to the follow-up tool. 'Never proposes broad-match negatives' and 'Read-only' set boundaries, but there is no explicit when-not-to-use or comparison against analyzer siblings like analyze_waste.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_wasteGoogle Ads: find wasted spendARead-onlyIdempotentInspect
Find where money is going with nothing to show for it: zero-converting search terms and keywords, broad match on manual bidding, campaigns under 1.0 ROAS. Returns typed findings with the cost of each and the exact negative-keyword or pause call that fixes it. Read-only.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| detail | No | summary | |
| render | No | both | |
| min_clicks | No | ||
| customer_id | Yes | ||
| max_findings | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so the trailing 'Read-only' is redundant, but the description adds genuine value by describing the shape of the response (typed findings, per-finding cost, paired remediation call). It doesn't cover cost/rate characteristics or how thresholds interact, but it exceeds what the annotations convey.
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 tight sentences, front-loaded with the diagnostic scope before the return shape. The trailing 'Tools revision: 5c9bea8f.' is versioning noise that doesn't help tool selection.
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 the return contract is covered and the description's summary of findings is a bonus. The real gap is that a 6-parameter analysis tool ships with zero parameter documentation anywhere, leaving the agent to guess at window length, sensitivity thresholds, and output volume.
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% across all 6 parameters, so the description is the only place meaning could be added — and it adds none. Nothing explains what `days`, `min_clicks`, `max_findings`, `detail`, or `render` do or how they change the findings; the two enums are the only self-documenting signals.
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+resource in concrete terms: zero-converting search terms/keywords, broad match on manual bidding, campaigns under 1.0 ROAS. An agent can tell this apart from the broad diagnostic siblings (full_audit, bidding_audit, analyze_search_terms) because the scope is explicitly 'spend with nothing to show for it' and the outputs are enumerated.
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 gives clear context for when to reach for this tool (wasted spend diagnosis with a remediation attached), and the 'exact negative-keyword or pause call that fixes it' tells the agent what to do next. It stops short of naming alternatives or exclusions, e.g. when to prefer analyze_search_terms or bidding_audit instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attach_negative_keyword_listGoogle Ads: attach negative keyword listAInspect
Attaches a shared negative keyword list to a campaign.
The campaign stops showing for every word in the list, including words
added to the list later.
There is no matching detach tool: in the Google Ads API a campaign's
link to a list (CampaignSharedSet) has no settable status, so it cannot
be paused, and undoing it means removing the link. This connector does
not remove links; the user can detach a list in Google Ads under Tools >
Shared library > Exclusion lists. Single words can be taken out of the
list with remove_from_negative_keyword_list, which changes every
campaign the list is attached to.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
campaign_id: The ID of the campaign.
shared_set_id: The ID of the negative keyword list (from
create_negative_keyword_list, or shared_set.id via search).
Returns:
Dictionary with the created campaign shared set resource name.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | ||
| customer_id | Yes | ||
| shared_set_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnly=false, destructive=false, and idempotent=false, but the description adds substantial context beyond them: the attachment applies to future list additions, links cannot be paused, the connector cannot remove links, and word-level removals affect every attached campaign. No annotation contradiction is present.
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 core action, then adds behavioral and detach limitations before documenting Args and Returns. The extra explanation is directly relevant to correct use, and there is no redundant 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 three-parameter mutation tool with an output schema, the description covers the key calling constraints, side effects, and detach/removal limitations. It leaves no important ambiguity about what the tool does or how it differs from nearby tools.
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 carry parameter meaning, and it does explain all three parameters. customer_id includes the useful numbers-only/no-hyphens constraint, campaign_id is identified as the campaign ID, and shared_set_id includes its provenance; however, campaign_id and shared_set_id formats are only minimally described.
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 gives a specific verb and resource: it attaches a shared negative keyword list to a campaign. It also clarifies the practical scope: the campaign stops showing for every word in the list, including words added later. This distinguishes it from siblings such as create_negative_keyword_list and remove_from_negative_keyword_list.
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 states when this tool is used and names alternatives: there is no detach tool, removal happens outside the connector, and individual words can be removed with remove_from_negative_keyword_list. It also explains that shared_set_id comes from create_negative_keyword_list or search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bidding_auditGoogle Ads: audit bidding strategiesBRead-onlyIdempotentInspect
Check bid strategies against the account's own conversion volume: manual bidding on campaigns with enough data, unrealistic CPA or ROAS targets, campaigns stuck learning, and low-volume campaigns that should share a portfolio strategy. Read-only.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| detail | No | summary | |
| render | No | both | |
| customer_id | Yes | ||
| max_findings | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the trailing 'Read-only' adds nothing. The description does add real diagnostic context — that results are judged against the account's own conversion volume rather than fixed industry thresholds — but says nothing about permissions, cost/latency, or how findings are ranked.
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 dense, front-loaded sentences that enumerate actionable finding types with no filler. The appended 'Tools revision: 5c9bea8f' line is pure noise for an agent deciding whether to call the tool.
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 return-value explanation is not required, and annotations cover the safety profile. What is missing is any guidance on the runtime knobs that materially change the result set (detail, max_findings, days), leaving an agent to guess at cost and coverage for a five-parameter audit.
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% across five parameters, and the description explains none of them: the lookback window (days), the summary-vs-full verbosity (detail), the render mode, or the finding cap (max_findings) are all left to inference. Only 'conversion volume' loosely hints that a historical period is involved.
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 gives a specific verb and resource ('audit bidding strategies against the account's own conversion volume') and enumerates the exact finding classes it produces, which makes it distinguishable from generic siblings like full_audit or account_health_score. It stops short of naming a sibling it should be preferred over, so it lands just below a 5.
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 is implied by the enumerated problem scenarios (manual bidding with enough data, unrealistic CPA/ROAS targets, stuck learning, low-volume campaigns), which tells an agent this is a diagnostic to run when those symptoms are suspected. There is no explicit when-not guidance and no pointer to alternatives such as full_audit, conversion_setup_audit, or budget_pacing when the issue is not bid-strategy related.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
budget_pacingGoogle Ads: check budget pacingARead-onlyIdempotentInspect
Project this month's spend against each daily budget, in the account's own time zone: a budget several campaigns share is projected once, on their combined spend. Flags budgets heading past their cap or leaving money unspent while losing impression share. month is YYYY-MM; omit it for this month. Read-only.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| month | No | ||
| detail | No | summary | |
| render | No | both | |
| customer_id | Yes | ||
| max_findings | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, so the description earns credit for adding real behavior: time-zone-normalized projection, de-duplication of budgets shared by multiple campaigns, and precisely what the flags mean. "Read-only." merely restates an annotation, so not a full 5.
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 tight, front-loaded sentences that lead with the projection logic and follow with flag semantics and the month format. Minor waste: "Read-only." repeats annotations and the "Tools revision" trailer adds nothing for an agent selecting or calling the tool.
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 and the tool is read-only, so return format and safety need no elaboration. However, with 0% schema coverage on five parameters, the missing semantics for detail/render/max_findings are a real gap 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 carries the full burden, yet it explains only month (YYYY-MM, omit for current month). The detail, render, max_findings, and customer_id parameters — including two enums — are left entirely undocumented outside their field 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?
States a specific verb and resource — projecting this month's spend against each daily budget — with precise scope (account's own time zone, shared budgets projected once on combined spend). No sibling does pacing projection, so an agent can distinguish it from analyze_waste or full_audit without opening the schema.
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 when the tool is useful ("Flags budgets heading past their cap or leaving money unspent while losing impression share") and explains the month parameter, but never names an alternative tool or states exclusions. 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.
change_historyGoogle Ads: what changed in the accountARead-onlyIdempotentInspect
List what changed in the account over the last days (1-30, default 7): when, by which Google login, and through which channel (AdCopilot, the Google Ads website, auto-applied recommendations, scripts, rules or another API tool). Google keeps 30 days, omits Google Ads Editor changes and some Change History rows, and can lag minutes. Read-only.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| detail | No | summary | |
| render | No | both | |
| campaign_id | No | ||
| customer_id | Yes | ||
| max_findings | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, so repeating 'Read-only' adds little. But the description adds genuinely useful caveats beyond the annotations: 30-day retention, omission of Google Ads Editor changes and some Change History rows, and minute-level lag. These are the kind of source-data limitations an agent cannot get from schema or annotations.
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 core sentence is front-loaded and dense with useful specifics, and the caveats follow compactly. The trailing 'Tools revision: 5c9bea8f.' is build metadata that does not help an agent invoke the tool and could be dropped.
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 return values need not be explained, and the description adequately covers the data source and its limitations. The gap is parameter coverage: with six parameters and 0% schema descriptions, omitting `detail`, `render`, `campaign_id`, and `max_findings` leaves meaningful invocation behavior undocumented.
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 carry parameter meaning, yet it only documents `days` (1-30, default 7), which is genuinely helpful beyond the bare integer schema. The other five parameters — `detail` and `render` enums, `campaign_id` filtering, `max_findings`, and `customer_id` — are never mentioned, leaving the agent to guess their 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 ('List what changed in the account') and enumerates the exact dimensions returned (when, by which Google login, which channel). This clearly distinguishes it from siblings like account_health_score or full_audit, which analyze rather than enumerate changes.
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 is only implied: an agent can infer this is the tool for auditing recent account changes, and the 30-day Google retention window signals a bounded lookback. However, there is no explicit when-to-use/when-not guidance or named alternative (e.g., versus full_audit or list_recommendations) to route an agent deciding between change tracking and diagnostics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
conversion_setup_auditGoogle Ads: audit conversion trackingARead-onlyIdempotentInspect
Check whether conversion tracking can be trusted: primary actions, enhanced conversions, attribution model, conversion values, duplicate counting, GA4 link, consent mode, and whether the tag is actually firing — the measurement every other number in the account rests on. Read-only.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| detail | No | summary | |
| render | No | both | |
| customer_id | Yes | ||
| max_findings | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, and the description's 'Read-only.' merely restates that. The audit-scope list adds some substance about what the tool inspects, but there is no disclosure of cost, latency, or how findings are summarized versus detailed.
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?
One front-loaded sentence delivers the core scope, and 'Read-only.' is a useful one-word safety restatement. The trailing 'Tools revision: 5c9bea8f.' is metadata noise that does not help an agent select or call the tool.
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 output schema and annotations cover return shape and safety profile, so those needn't be explained. The real gap is parameter behavior at 0% schema coverage: an agent cannot tell what 'detail: full' returns versus 'summary', or how max_findings interacts with render.
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% for all five parameters, so the description bears the burden of explaining days, detail, render, and max_findings. It mentions none of them, leaving the agent with bare, undescribed fields whose defaults and effects (especially detail vs. max_findings) must be guessed.
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 ('Check whether...') and resource ('conversion tracking'), then enumerates the exact dimensions audited: primary actions, enhanced conversions, attribution model, values, duplicate counting, GA4 link, consent mode, tag firing. That enumeration distinguishes it cleanly from siblings like explain_conversion_gap, bidding_audit, and full_audit.
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 framing 'the measurement every other number in the account rests on' implies this is the prerequisite audit before trusting other metrics, which is useful usage context. However, it never says when to prefer this over full_audit or explain_conversion_gap, nor any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ad_groupGoogle Ads: create ad groupAInspect
Creates a new ad group within a campaign.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
campaign_id: The ID of the campaign to add the ad group to.
name: The name for the new ad group.
cpc_bid_micros: Default max CPC bid in micros of the account's currency (1000000 = 1.00: ₹1 on an INR account, $1 on a USD one). Default: 1000000.
ad_group_type: Ad group type. One of: SEARCH_STANDARD, DISPLAY_STANDARD, SHOPPING_PRODUCT_ADS, VIDEO_BUMPER, VIDEO_TRUE_VIEW_IN_STREAM. Default: SEARCH_STANDARD.
status: Initial status. One of: ENABLED, PAUSED. Default: ENABLED. In
a campaign that is already running, an ENABLED ad group serves,
from that campaign's budget, as soon as it has an approved ad and
keywords; pass PAUSED to hold it.
Returns:
Dictionary with the created ad group resource name.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| status | No | ENABLED | |
| campaign_id | Yes | ||
| customer_id | Yes | ||
| ad_group_type | No | SEARCH_STANDARD | |
| cpc_bid_micros | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-idempotent, non-destructive mutation, so the description does not need to restate those basics. It adds meaningful behavioral context: cpc_bid_micros currency semantics, allowed ad group types, and what an ENABLED ad group does in an already-running campaign.
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, clearly structured under Args and Returns, and every section is relevant. It repeats a few schema defaults, but those repetitions support interpretation of currency and enum meaning rather than adding noise.
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 the description does not need to explain return values in depth, and it still briefly notes that the return includes the created resource name. Combined with full parameter documentation and status semantics, it gives an agent enough information to invoke this creation tool 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 description coverage is 0%, so the description must carry the full parameter burden, and it does: it documents all six parameters, including customer ID formatting, campaign ID purpose, cpc bid micros conversion, ad_group_type enum values, and status enum values and defaults.
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: creates a new ad group within a campaign. That is much clearer than a tautology, but it does not explicitly distinguish this from the sibling update_ad_group or create_campaign 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?
Usage is implied by 'Creates a new ad group within a campaign,' and the status parameter includes useful operational guidance about ENABLED versus PAUSED. However, it does not explicitly say when to use this instead of update_ad_group or how to choose the parent campaign in context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_asset_groupGoogle Ads: create asset groupADestructiveInspect
Creates an asset group for a Performance Max campaign and links all provided assets to it.
Asset groups and their assets must be created together in a single batch request.
Create all required assets first using create_text_asset, create_image_asset, etc.,
then pass their resource names here.
Minimum asset requirements for Performance Max:
- At least 3 headlines (max 15)
- At least 2 descriptions (max 5)
- At least 1 long headline (max 5)
- At least 1 marketing image (landscape, 1200x628 recommended)
- At least 1 square marketing image (1200x1200 recommended)
- At least 1 logo (1200x1200 recommended)
- YouTube videos are optional but recommended
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
campaign_id: The ID of the Performance Max campaign.
name: Name for the asset group.
final_url: The landing page URL for the asset group.
headline_asset_resource_names: List of text asset resource names for headlines (min 3).
description_asset_resource_names: List of text asset resource names for descriptions (min 2).
long_headline_asset_resource_names: List of text asset resource names for long headlines (min 1).
marketing_image_asset_resource_names: List of image asset resource names for landscape images (min 1).
square_marketing_image_asset_resource_names: List of image asset resource names for square images (min 1).
logo_asset_resource_names: List of image asset resource names for logos (min 1).
youtube_video_asset_resource_names: List of YouTube video asset resource names. Optional.
final_mobile_url: Mobile landing page URL. Optional.
path1: First URL path text (max 15 characters). Optional.
path2: Second URL path text (max 15 characters). Optional.
status: Asset group status. One of: ENABLED, PAUSED. Default: ENABLED.
In a campaign that is already running, an ENABLED asset group
serves, from that campaign's budget, as soon as Google approves
its assets; pass PAUSED to hold it.
Returns:
Dictionary with the created asset group resource name and linked asset count.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| path1 | No | ||
| path2 | No | ||
| status | No | ENABLED | |
| final_url | Yes | ||
| campaign_id | Yes | ||
| customer_id | Yes | ||
| final_mobile_url | No | ||
| logo_asset_resource_names | No | ||
| headline_asset_resource_names | Yes | ||
| description_asset_resource_names | Yes | ||
| long_headline_asset_resource_names | Yes | ||
| youtube_video_asset_resource_names | No | ||
| marketing_image_asset_resource_names | Yes | ||
| square_marketing_image_asset_resource_names | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true and idempotentHint=false, so safety is covered. The description adds real behavioral context beyond that: asset groups and assets must be created in a single batch, assets must pre-exist, and an ENABLED group begins serving from the campaign budget immediately upon approval — a consequence an agent would otherwise miss.
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?
Well front-loaded with the core action, then a requirements block and a clean Args section. It is long, but for a 15-parameter batch tool each section is load-bearing; the Returns note mildly overlaps the output schema.
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 15 parameters, 0% schema coverage and a true mutation with destructive semantics, the description supplies everything needed: ordering constraint, asset minimums, defaults, formatting rules, and the serving consequence of the status default.
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% across 15 params, so the description must carry the load and does: it explains each parameter's meaning, per-list minimums and maximums, the ENABLED/PAUSED distinction, customer_id formatting (numbers only, no hyphens), and the 15-character limit on path1/path2.
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 and resource (creates an asset group for a Performance Max campaign) plus the linking behavior in the same sentence. An agent can distinguish it from create_performance_max_campaign and add_assets_to_asset_group without opening any schema.
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 explicit ordering guidance (create assets first with create_text_asset, create_image_asset, etc., then pass resource names) and the hard minimum/maximum asset counts. It does not explicitly point to add_assets_to_asset_group as the alternative for supplementing an existing group, which is the one obvious gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_call_assetGoogle Ads: create call assetAInspect
Creates a call asset that can be linked to campaigns or ad groups.
Call assets add a phone number to your ad, allowing users to call directly.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
country_code: Two-letter country code (e.g., "US", "GB", "IN").
phone_number: The phone number string.
call_conversion_reporting_state: One of: DISABLED, USE_ACCOUNT_LEVEL_CALL_CONVERSION_ACTION,
USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION. Default: DISABLED.
Returns:
Dictionary with the created asset resource name.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | ||
| country_code | Yes | ||
| phone_number | Yes | ||
| call_conversion_reporting_state | No | DISABLED |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, so the mutation profile is covered. The description adds the one-line return shape (created asset resource name) but says nothing about duplicate-creation behavior despite idempotentHint=false, nor about permissions or quota implications.
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 purpose statement is front-loaded in the first sentence and the Args/Returns structure is easy to scan. Slight redundancy with the return-value sentence given an output schema exists, but 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 4-param mutation tool with annotations and an output schema, the definition covers identity, field formats, enum values, and default. The remaining gap is operational behavior (duplicates, permission requirements) rather than anything that would block a correct call.
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%, yet the description documents all four parameters with real added value: customer_id must be numbers only with no hyphens, country_code is two-letter with examples, and call_conversion_reporting_state enumerates the three valid values plus the DISABLED default — none of which the schema itself carries. Only phone_number ("The phone number string") is left without format guidance such as E.164.
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 and resource ("Creates a call asset") and clarifies its role — a phone number attached to an ad — which differentiates it from the many sibling create_*_asset tools. It also notes the asset must then be linked to a campaign or ad group, hinting at the follow-up tool, though it does not name link_asset_to_campaign explicitly.
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 is only implied: the mention that the asset "can be linked to campaigns or ad groups" suggests creating first then linking, but no sibling is named and no prerequisite (e.g., an existing call conversion action for the USE_RESOURCE_LEVEL state) or exclusion is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_callout_assetGoogle Ads: create callout assetAInspect
Creates a callout asset that can be linked to campaigns or ad groups.
Callouts add short snippets of text to your ad (e.g., "Free Shipping", "24/7 Support").
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
callout_text: The callout text (max 25 characters).
start_date: Start date in YYYY-MM-DD format. Optional.
end_date: End date in YYYY-MM-DD format. Optional.
Returns:
Dictionary with the created asset resource name.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ||
| start_date | No | ||
| customer_id | Yes | ||
| callout_text | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, non-idempotent, closed-world), and the description adds real constraints beyond them: the 25-character cap on text and the YYYY-MM-DD date formats. It does not warn that repeated calls create duplicate assets (relevant given idempotentHint=false) or that a separate link call is required, which keeps it below a 5.
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?
Front-loaded one-line purpose followed by a concrete callout example, then Args/Returns. The Args list duplicates schema titles, but that duplication is justified given zero schema description coverage; the Returns block is somewhat redundant since an output schema exists.
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?
With an output schema present, the return-value note is a bonus rather than a requirement, and all four parameters are explained. The notable omission is the post-creation step — a callout asset must be linked via link_asset_to_campaign or link_asset_to_ad_group to have any effect, which the description only gestures at with 'can be linked'.
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 carries the full burden — and it does: customer_id 'numbers only, no hyphens', callout_text 'max 25 characters', and date formats plus optionality for both date fields. Only minor gaps remain (timezone/date semantics, whether start_date is required for end_date to apply).
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 and resource ('Creates a callout asset') and immediately disambiguates it from the many sibling create_*_asset tools by explaining what a callout is ('short snippets of text ... e.g. "Free Shipping"'). An agent can distinguish it from create_sitelink_asset or create_text_asset without opening the schema.
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 'can be linked to campaigns or ad groups' hints at the surrounding workflow, but the description never says when to pick a callout over another asset type, nor that creation alone does not attach the asset. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_campaignGoogle Ads: create campaignADestructiveInspect
Creates a new Google Ads campaign with a budget.
SEARCH campaigns are created with Google search on, Search partners off,
the Display Network off, and location targeting set to PRESENCE (people
in the targeted locations). Pass search_partners, display_network or
geo_target_type to choose other values. On a campaign of any other
channel type, each of these three settings is set only when its argument
is passed.
Search campaigns have no language setting: Google Ads removed it in late
September 2026 and matches Search ads to searchers by the language the
ads are written in, so write the ads in the language customers search
in. Searches in another language that cost money are stopped with
add_negative_keywords. A DISPLAY or VIDEO campaign is created with no
language setting (people who use any language); update_campaign with
languages sets one.
The budget and the campaign are created together in one request, so if
Google refuses the campaign no budget is left behind. The budget belongs
to this campaign alone (it is not a shared budget). A channel type or
bidding strategy outside the lists below, or a target missing or given
to the wrong strategy, is refused before anything is sent.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
name: The name for the new campaign.
budget_amount_micros: Daily budget in micros of the account's currency (10000000 = 10.00: ₹10 on an INR account, $10 on a USD one).
advertising_channel_type: Channel type. One of: SEARCH, DISPLAY, SHOPPING, VIDEO, MULTI_CHANNEL. Default: SEARCH. For Performance Max use create_performance_max_campaign.
status: Initial campaign status: PAUSED, the only status a build takes. Every campaign is built paused, and the user switches it on in Google Ads; ENABLED is refused, and nothing in that call runs. Default: PAUSED.
bidding_strategy_type: Bidding strategy. One of: MANUAL_CPC, MAXIMIZE_CONVERSIONS, MAXIMIZE_CONVERSION_VALUE, TARGET_CPA, TARGET_ROAS, TARGET_SPEND. Default: MANUAL_CPC.
target_cpa_micros: Target CPA in micros of the account's currency. Required with TARGET_CPA, refused with any other strategy.
target_roas: Target ROAS (e.g., 2.0 for 200%). Required with TARGET_ROAS, refused with any other strategy.
cpc_bid_ceiling_micros: Maximize Clicks' max CPC cap — the most
Google may bid for one click — in micros of the account's currency
(10000000 = 10.00: ₹10 on an INR account, $10 on a USD one). Only
with bidding_strategy_type TARGET_SPEND. Optional.
start_date: Campaign start date in YYYY-MM-DD format. Optional.
end_date: Campaign end date in YYYY-MM-DD format. Optional.
search_partners: Whether ads may serve on the Google Search Partners
network. SEARCH default: False. Optional.
display_network: Whether ads may serve on the Google Display Network.
SEARCH default: False. Optional.
geo_target_type: Positive location targeting. One of: PRESENCE (only
people in the targeted locations), PRESENCE_OR_INTEREST (also
people elsewhere who show interest in them), SEARCH_INTEREST.
SEARCH default: PRESENCE. Optional.
over_comfort_ack: The user's own words or reason when they asked for
a budget above their saved comfort (e.g. "user asked for 6,000/day
on 2026-09-23"). Recorded with the change by the hosted connector;
never sent to Google. Optional.
Returns:
Dictionary with created campaign and budget resource names.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| status | No | PAUSED | |
| end_date | No | ||
| start_date | No | ||
| customer_id | Yes | ||
| target_roas | No | ||
| display_network | No | ||
| geo_target_type | No | ||
| search_partners | No | ||
| over_comfort_ack | No | ||
| target_cpa_micros | No | ||
| budget_amount_micros | Yes | ||
| bidding_strategy_type | No | MANUAL_CPC | |
| cpc_bid_ceiling_micros | No | ||
| advertising_channel_type | No | SEARCH |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnly=false, destructive=true, openWorld=true), which already cover the safety profile. It discloses atomic budget+campaign creation so no orphan budget is left behind, that the budget is not shared, that validation rejects bad channels/strategies/targets before any call is sent, and that everything is created PAUSED because ENABLED is refused.
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?
Front-loads the core action, then organizes behavior, Args and Returns clearly, and every parameter entry earns its place. Slightly verbose in the language-setting paragraph and repeats the micros conversion formula twice, but the length is largely justified by a 15-parameter schema with no field descriptions.
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 15-parameter mutation tool with zero schema coverage, the description supplies defaults, enums, cross-parameter validity rules, creation semantics and the atomicity guarantee. An output schema exists, and the description still briefly notes the return shape, so nothing needed to call it correctly 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 coverage is 0% across 15 parameters, so the description carries the full burden and does: it enumerates every allowed enum value, gives defaults, explains the micros-to-currency conversion with a worked example, and spells out conditional requirements (target_cpa_micros required with TARGET_CPA and refused otherwise; cpc_bid_ceiling_micros only with TARGET_SPEND) plus the channel-specific defaults for search_partners, display_network and geo_target_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?
States a specific verb and resource ('Creates a new Google Ads campaign with a budget') and immediately names the sibling it is not for, telling the agent that Performance Max campaigns go to create_performance_max_campaign. The agent can distinguish it from create_ad_group / create_responsive_search_ad without opening any schema.
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?
Routes Performance Max explicitly to create_performance_max_campaign and points to update_campaign and add_negative_keywords for follow-up language concerns. However, it never states the obvious boundary that this tool only builds the campaign shell and that ad groups, keywords and ads require the create_ad_group / add_keywords / create_responsive_search_ad siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_conversion_actionGoogle Ads: create conversion actionAInspect
Creates a Google Ads conversion action (what the account counts as a result) and returns the conversion ID and label its website tag needs.
Only type WEBPAGE can be created: a result counted by a Google Ads
conversion tag on the website. Stage that tag in Tag Manager with the
returned conversion_id and conversion_label (the "Google Ads Conversion
Tracking" tag, fired on the sign-up / thank-you trigger); nothing is
counted until the user publishes the Tag Manager container.
Analytics-imported types (GOOGLE_ANALYTICS_4_CUSTOM, _PURCHASE) cannot be
created through the Google Ads API and are refused with an explanation.
This tool creates one ENABLED action and changes nothing else: it never
edits, demotes or removes an existing conversion action or goal.
primary_for_goal has no default on purpose — a primary action is one the
account's bidding aims for, so ask the user and pass their answer.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
name: The conversion action's name, unique in the account
(e.g. "Sign-up (website)").
category: What the result is. One of: SIGNUP, SUBMIT_LEAD_FORM,
PURCHASE, CONTACT, BOOK_APPOINTMENT, REQUEST_QUOTE, SUBSCRIBE_PAID,
BEGIN_CHECKOUT, ADD_TO_CART, DOWNLOAD, GET_DIRECTIONS,
OUTBOUND_CLICK, PAGE_VIEW, DEFAULT.
primary_for_goal: True makes this a primary action — campaigns that
bid for conversions aim for it. False records it as secondary
(reported, not bid on). Required: pass what the user chose.
type: The conversion action type. Only WEBPAGE is supported.
counting_type: ONE_PER_CLICK (one result per ad click — right for
sign-ups and leads) or MANY_PER_CLICK (every result — right for
purchases). Defaults to MANY_PER_CLICK for PURCHASE and
ONE_PER_CLICK for every other category.
default_value: The value of one result, in the account's currency
(a plain amount, not micros). Optional; no value is set if omitted.
default_currency_code: ISO 4217 currency code for default_value,
e.g. the account's own currency. Optional.
always_use_default_value: True always records default_value, ignoring
any value the tag sends. Optional.
click_through_lookback_window_days: How many days after an ad click a
result still counts (1-90). Optional; Google's default if omitted.
Returns:
Dictionary with the new action's resource name and id, its
conversion_id / conversion_label / send_to for the website tag, the
other enabled primary actions already in this category (read only),
and whether the account's goal for this category is biddable.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | No | WEBPAGE | |
| category | Yes | ||
| customer_id | Yes | ||
| counting_type | No | ||
| default_value | No | ||
| primary_for_goal | Yes | ||
| default_currency_code | No | ||
| always_use_default_value | No | ||
| click_through_lookback_window_days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: states it creates exactly one ENABLED action, 'changes nothing else', and never edits/demotes/removes existing actions or goals — which confirms the destructiveHint=false and idempotentHint=false hints in concrete terms. It also discloses the side-effect caveat that no conversions are counted until the Tag Manager container is published.
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?
Front-loaded: the core action, the WEBPAGE-only constraint, and the downstream Tag Manager requirement all come before the parameter list. The Args block repeats a little (e.g. primary_for_goal's meaning appears twice), but given 0% schema coverage that verbosity is functional rather than wasteful.
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 10-parameter mutation with an output schema present, the description covers creation semantics, defaults, side effects, failure modes, and the post-creation workflow the agent must drive. Nothing needed to invoke it correctly or to hand its result to gtm_create_tag 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 coverage is 0%, so the description carries the full burden and does: customer_id format (digits, no hyphens), name uniqueness, the full category enum, the meaning and bidding consequence of primary_for_goal, the unit gotcha for default_value ('a plain amount, not micros'), ISO 4217 for the currency code, per-category counting_type defaults, and the 1-90 range for the lookback window.
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?
Opens with a specific verb+resource ('Creates a Google Ads conversion action') and immediately parenthesizes what a conversion action is, plus states that the return carries the conversion_id/label for the website tag. It is clearly distinguishable from GA4-side conversion tools (ga4_create_conversion_event) and from read-only siblings like conversion_setup_audit.
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?
Explicitly scopes what is creatable ('Only type WEBPAGE'), states an exclusion with rationale ('Analytics-imported types ... cannot be created through the Google Ads API and are refused with an explanation'), and names the follow-on path (stage via Tag Manager using the returned ids, nothing counted until publish). It even instructs the agent to ask the user for primary_for_goal rather than guessing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_image_assetGoogle Ads: create image assetAInspect
Uploads a PNG or JPEG image (max 5120 KB) to the account's asset library.
Where an image can then be used: Performance Max, through
add_assets_to_asset_group (MARKETING_IMAGE 1.91:1 min 600x314,
SQUARE_MARKETING_IMAGE 1:1 min 300x300, PORTRAIT_MARKETING_IMAGE 4:5
min 480x600, LOGO 1:1 min 128x128, LANDSCAPE_LOGO 4:1 min 512x128).
On Search, only as AD_IMAGE (campaign or ad group; Google requires an
eligible account) or BUSINESS_LOGO (campaign) via link_asset_to_campaign /
link_asset_to_ad_group — the marketing image and logo types above are
refused for Search campaigns.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
image_source: One of: an http(s) URL the server can download; a data
URI (data:image/png;base64,...) when there is no public URL; or a
file path, which only works when this server runs on the same
machine as the file — a hosted connector needs a URL or data URI.
asset_name: A name for the image asset.
Returns:
Dictionary with the created asset resource name, and the image's
mime_type, width and height.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| asset_name | Yes | ||
| customer_id | Yes | ||
| image_source | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true; the description adds substantive context beyond that: the 5120 KB cap, format restriction, aspect-ratio/minimum-dimension requirements per asset type, and the Search-account eligibility/refusal rules. It does not explain what happens on re-upload of the same asset name (duplicate creation) or any permission requirements, which keeps it short of a 5.
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?
Front-loaded with the core action, then a clearly separated usage section and an Args section. Every sentence carries non-redundant information, though the aspect-ratio enumeration is dense and slightly long relative to the core call decision.
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 and the description only briefly gestures at return values (resource name, mime_type, width, height), which is acceptable. With three undocumented-in-schema parameters, the description fully compensates on inputs, constraints, and downstream routing, leaving nothing an agent needs to call this tool 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 description coverage is 0%, so the description carries the full burden and does so: customer_id is 'numbers only, no hyphens', image_source enumerates the three accepted forms (http(s) URL, base64 data URI, local file path) and warns the path form only works when the server shares the filesystem. asset_name is described as the asset's display name. All three parameters gain meaning absent 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 first sentence names a specific verb and resource — 'Uploads a PNG or JPEG image (max 5120 KB) to the account's asset library' — which is immediately distinguishable from siblings like create_text_asset, create_youtube_video_asset, or create_logo_asset variants. Scope and accepted formats are stated up front, so an agent can select it without opening the schema.
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 the agent: use add_assets_to_asset_group for Performance Max, link_asset_to_campaign / link_asset_to_ad_group for Search, and it names the exact asset field types (MARKETING_IMAGE, SQUARE_MARKETING_IMAGE, LOGO, AD_IMAGE, BUSINESS_LOGO) each context accepts. It also states the negative case — marketing image and logo types are refused for Search campaigns — which is genuine when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_lead_form_assetGoogle Ads: create lead form assetAInspect
Creates a lead form asset that can be linked to campaigns or ad groups.
Lead form assets collect user information directly from the ad.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
business_name: Your business name.
headline: The lead form headline (max 30 characters).
description: The lead form description (max 200 characters).
call_to_action_type: One of: LEARN_MORE, GET_QUOTE, APPLY_NOW, SIGN_UP,
CONTACT_US, SUBSCRIBE, DOWNLOAD, BOOK_NOW, GET_OFFER, REGISTER, GET_INFO,
REQUEST_DEMO, JOIN_NOW, GET_STARTED.
privacy_policy_url: URL to your privacy policy.
fields: List of form fields to collect. Options: FULL_NAME, EMAIL, PHONE_NUMBER,
POSTAL_CODE, CITY, REGION, COUNTRY, WORK_EMAIL, COMPANY_NAME, WORK_PHONE,
JOB_TITLE, FIRST_NAME, LAST_NAME.
post_submit_headline: Headline shown after form submission. Optional.
post_submit_description: Description shown after form submission. Optional.
Returns:
Dictionary with the created asset resource name.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | ||
| headline | Yes | ||
| customer_id | Yes | ||
| description | Yes | ||
| business_name | Yes | ||
| privacy_policy_url | Yes | ||
| call_to_action_type | Yes | ||
| post_submit_headline | No | ||
| post_submit_description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds that the asset collects user information from the ad and gives character limits, but says nothing about permissions, verification requirements for lead forms, or irreversibility of the creation.
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?
Front-loaded with a clear purpose sentence and a one-line behavioral gloss before the Args block. The Args list is long but every line earns its place given 0% schema coverage; the Returns block is mildly redundant since an output schema exists.
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 9-parameter mutation tool with 7 required fields and no schema descriptions, the description supplies everything needed to construct a valid call: every parameter, character limits, enum vocabularies, and which two are optional. An output schema already documents the return value, so the brief Returns line is sufficient.
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 carry the full burden and it does: all nine parameters are explained, including a note that customer_id takes numbers only with no hyphens, max lengths for headline (30) and description (200), and the full allowed-value lists for call_to_action_type (14 values) and fields (13 values) that the schema does not encode as enums.
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 and resource ('Creates a lead form asset') and adds a clarifying sentence about what the asset is for ('collect user information directly from the ad'). It implicitly distinguishes itself from the many other create_*_asset siblings through the unique resource name, but never explicitly contrasts with e.g. create_call_asset or create_text_asset.
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 'can be linked to campaigns or ad groups' implies the follow-up step (link_asset_to_campaign / link_asset_to_ad_group), which is useful implied usage. However there is no explicit when-to-use vs. alternative asset types, no prerequisites, and no note on account/permission requirements before creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_negative_keyword_listGoogle Ads: create negative keyword listAInspect
Creates a shared negative keyword list, optionally with its keywords.
A negative keyword list is one blocklist that many campaigns can share:
attach it with attach_negative_keyword_list and every attached campaign
stops showing for its words. The list does nothing until it is attached.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
name: Name of the list, unique among the account's negative keyword
lists (1-255 characters).
keywords: Optional keywords to put in the list, each with:
- text: The keyword text (e.g., "free").
- match_type: One of: EXACT, PHRASE, BROAD. Default: BROAD.
Exact duplicates are dropped. More can be added later with
add_to_negative_keyword_list, and taken out with
remove_from_negative_keyword_list.
Returns:
Dictionary with the list's shared_set_id and resource name, and the
keywords added.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| keywords | 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?
Annotations already declare non-read-only, non-destructive, non-idempotent, closed-world. The description adds real behavior beyond that: the list is inert until attached, exact duplicate keywords are silently dropped, and the name must be unique among the account's negative keyword lists. It does not cover failure modes (e.g. duplicate name error) or permission requirements, so it is strong but not complete.
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?
Front-loaded with the one-line purpose, then scope, then args. Every paragraph earns its place except the Returns block, which partly restates what the output schema already provides. Dense but not padded.
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?
With an output schema present, the description need not explain return values, and it still summarizes them briefly. Combined with annotations and full param documentation, an agent has everything needed to construct a correct call and knows what to do next with the resulting list.
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 schema types keywords as an untyped object map, so the description carries the entire burden. It documents all three parameters: customer_id format ('numbers only, no hyphens'), name constraints (unique, 1-255 chars), and keyword structure with text plus match_type values EXACT/PHRASE/BROAD and a BROAD default — information that exists nowhere in 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?
Opens with a specific verb+resource ('Creates a shared negative keyword list, optionally with its keywords') and immediately defines what a shared list is versus the per-campaign/account negative tools in the sibling set. An agent can distinguish this from add_negative_keywords and attach_negative_keyword_list without opening any schema.
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?
Explicitly states the key usage fact ('The list does nothing until it is attached') and names attach_negative_keyword_list, add_to_negative_keyword_list and remove_from_negative_keyword_list as the follow-up paths. It stops short of a decision rule versus account-level or campaign-level negative tools, so the when-not guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_performance_max_campaignGoogle Ads: create Performance Max campaignADestructiveInspect
Creates a Performance Max campaign with a budget, business name, and logo.
PMax campaigns require a business name and logo asset linked at the campaign
level (Brand Guidelines). Create these assets first using create_text_asset
(for business name) and create_image_asset (for logo), then pass their
resource names here.
After creating the campaign, create more assets and an asset group using
create_text_asset, create_image_asset, create_youtube_video_asset,
and then create_asset_group.
languages sets the campaign's language setting in the same request as the
campaign. Google uses it on YouTube, Display, Discover and Gmail; on
Google Search, Performance Max ads are matched by the language the ads
are written in. Without languages the campaign has no language setting
and may show to people who use any language on those channels; the
result then says so.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
name: The name for the new campaign.
budget_amount_micros: Daily budget in micros of the account's currency (10000000 = 10.00: ₹10 on an INR account, $10 on a USD one).
business_name_asset_resource_name: Resource name of a text asset for the business name.
logo_asset_resource_name: Resource name of an image asset for the logo (square, 1200x1200).
status: Initial campaign status: PAUSED, the only status a build takes. Every campaign is built paused, and the user switches it on in Google Ads; ENABLED is refused, and nothing in that call runs. Default: PAUSED.
bidding_strategy_type: One of: MAXIMIZE_CONVERSIONS, MAXIMIZE_CONVERSION_VALUE.
Default: MAXIMIZE_CONVERSIONS.
target_cpa_micros: Target CPA in micros of the account's currency, optional with MAXIMIZE_CONVERSIONS.
target_roas: Target ROAS (e.g., 2.0 for 200%), optional with MAXIMIZE_CONVERSION_VALUE.
final_url_expansion_opt_out: Set True to opt out of final URL expansion. Default: False.
start_date: Campaign start date in YYYY-MM-DD format. Optional.
end_date: Campaign end date in YYYY-MM-DD format. Optional.
languages: Google Ads language codes (e.g. en, hi, es, pt, de, fr,
ja, zh_CN) the campaign may show to on YouTube, Display, Discover
and Gmail. Not used on Google Search. Optional.
over_comfort_ack: The user's own words or reason when they asked for
a budget above their saved comfort (e.g. "user asked for 6,000/day
on 2026-09-23"). Recorded with the change by the hosted connector;
never sent to Google. Optional.
Returns:
Dictionary with created campaign and budget resource names, and the
language codes set (an empty list means every language).Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| status | No | PAUSED | |
| end_date | No | ||
| languages | No | ||
| start_date | No | ||
| customer_id | Yes | ||
| target_roas | No | ||
| over_comfort_ack | No | ||
| target_cpa_micros | No | ||
| budget_amount_micros | Yes | ||
| bidding_strategy_type | No | MAXIMIZE_CONVERSIONS | |
| logo_asset_resource_name | Yes | ||
| final_url_expansion_opt_out | No | ||
| business_name_asset_resource_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: only PAUSED is accepted and ENABLED calls are refused entirely, languages changes ad-matching semantics per channel, and over_comfort_ack is recorded locally and never sent to Google. None of that is inferable from destructiveHint/openWorldHint/idempotentHint.
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?
Front-loaded with the action then ordered workflow steps, and the Args block maps to the parameter list; nearly every sentence is load-bearing. The languages paragraph runs long and the Returns note duplicates the output schema.
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 14-parameter mutation with an output schema and prerequisites on other tools, the description covers ordering, defaults, currency units, constraints, and side effects. Nothing an agent needs before invoking it is absent.
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 carries the full burden and does: micros-to-currency conversion with an INR/USD example, logo dimension requirement, customer_id format, date formats, bidding-strategy-conditional target_cpa_micros vs target_roas, and language code examples. The one weak spot is bidding_strategy_type lacking a stated pairing rule with target_cpa/roas beyond 'optional with'.
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 and resource ('Creates a Performance Max campaign') plus the mandatory inputs, which separates it cleanly from the sibling create_campaign and create_asset_group tools. An agent can pick this tool without opening the schema.
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 an explicit prerequisite chain (create_text_asset / create_image_asset first, then pass resource names) and a follow-up chain (more assets, then create_asset_group). What's missing is an explicit statement of when NOT to use it — e.g. that non-PMax campaigns go to create_campaign.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_price_assetGoogle Ads: create price assetAInspect
Creates a price asset that can be linked to campaigns or ad groups.
Price assets showcase your products or services with their prices.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
price_type: The type of price. One of: BRANDS, EVENTS, LOCATIONS, NEIGHBORHOODS,
PRODUCT_CATEGORIES, PRODUCT_TIERS, SERVICES, SERVICE_CATEGORIES, SERVICE_TIERS.
price_offerings: List of price offerings (min 3, max 8), each with:
- header: The offering name (max 25 characters).
- description: Description of the offering (max 25 characters).
- price_micros: Price in micros of currency_code (9990000 = 9.99).
- currency_code: Optional ISO 4217 code; defaults to the
account's currency.
- unit: Price unit. One of: PER_HOUR, PER_DAY, PER_WEEK, PER_MONTH, PER_YEAR, NONE.
- final_url: The landing page URL for this offering.
language_code: Language code (e.g., "en"). Default: "en".
price_qualifier: One of: NONE, FROM, UP_TO, AVERAGE. Default: "NONE".
Returns:
Dictionary with the created asset resource name.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| price_type | Yes | ||
| customer_id | Yes | ||
| language_code | No | en | |
| price_offerings | Yes | ||
| price_qualifier | No | NONE |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the description needn't restate them. It usefully adds hard constraints (3–8 offerings, 25-char limits) that predict validation failures, but says nothing about required permissions or what happens on quota/permission errors.
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?
Front-loaded with the action, then structured Args/Returns sections with no filler beyond the one explanatory line about what price assets are. The nested offering bullet list is efficient, though the "Returns" line is redundant given an output schema exists.
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 creation tool with an output schema, the description covers the inputs, the required multi-element list, and the return value. The remaining gap is workflow context — that the created asset still needs a separate link call — which the description only gestures at.
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 carries the full burden and does so: every one of the 5 parameters is documented, including allowed enum values for price_type, price_qualifier and unit, the micros conversion example (9990000 = 9.99), defaults for currency_code, language_code and price_qualifier, and the nested offering field list. This is meaningfully more than the schema conveys.
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 names a specific verb and resource ("Creates a price asset") and the second clarifies the concept, which distinguishes it from the many sibling asset creators (callout, sitelink, text, image) by subject matter. It does not explicitly contrast with those siblings, so it stops short of a 5.
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 clause "can be linked to campaigns or ad groups" implies the follow-up step, but no explicit when-to-use rule or naming of the alternatives (link_asset_to_campaign, link_asset_to_ad_group) is given. An agent must infer that creation alone leaves the asset unattached.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_promotion_assetGoogle Ads: create promotion assetAInspect
Creates a promotion asset that can be linked to campaigns or ad groups.
Promotion assets highlight sales and special offers in your ads.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
promotion_target: What the promotion is for (e.g., "Summer Collection", "All Shoes").
final_url: The page the promotion sends clicks to: the business's
real landing page for this offer. Required.
discount_modifier: One of: NONE, UP_TO. Default: NONE.
percent_off: Percentage discount (e.g., 20 for 20% off). Use this OR money_amount_off.
money_amount_off_micros: Money discount in micros of money_amount_off_currency (5000000 = 5.00 off). Use this OR percent_off.
money_amount_off_currency: Currency code for money discount; use the account's currency (e.g., "INR", "USD").
occasion: Occasion for the promotion. One of: NONE, NEW_YEARS, VALENTINES_DAY,
EASTER, MOTHERS_DAY, FATHERS_DAY, LABOR_DAY, BACK_TO_SCHOOL, HALLOWEEN,
BLACK_FRIDAY, CYBER_MONDAY, CHRISTMAS, BOXING_DAY, and more. Default: NONE.
language_code: Language code (e.g., "en"). Default: "en".
start_date: Asset start date in YYYY-MM-DD format. Optional.
end_date: Asset end date in YYYY-MM-DD format. Optional.
redemption_start_date: Promotion redemption start date in YYYY-MM-DD format. Optional.
redemption_end_date: Promotion redemption end date in YYYY-MM-DD format. Optional.
promotion_code: A promotion code users can use (e.g., "SAVE20"). Optional.
Returns:
Dictionary with the created asset resource name.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ||
| occasion | No | NONE | |
| final_url | Yes | ||
| start_date | No | ||
| customer_id | Yes | ||
| percent_off | No | ||
| language_code | No | en | |
| promotion_code | No | ||
| promotion_target | Yes | ||
| discount_modifier | No | NONE | |
| redemption_end_date | No | ||
| redemption_start_date | No | ||
| money_amount_off_micros | No | ||
| money_amount_off_currency | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare that this is a non-read-only, non-destructive, non-idempotent creation operation. The description adds that the resulting asset can be linked to campaigns or ad groups and returns a resource name, but it does not discuss permissions, side effects, duplicate creation behavior, or linking requirements beyond that brief mention.
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 appropriately so for a 14-parameter creation tool. It is front-loaded with the core action and asset explanation, then organizes parameter details cleanly under Args and Returns with no meaningful 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?
Given the output schema and annotations, the description covers nearly everything needed to invoke the tool correctly, especially the full parameter semantics. The only notable gap is that it does not explain the subsequent linking lifecycle in detail, despite mentioning that the asset can be linked.
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%, so the description carries the full burden and does so thoroughly. It documents all 14 parameters, including formats, defaults, enum values, the percent_off versus money_amount_off_micros choice, micros conversion, currency expectations, and date formats.
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 gives a specific verb and resource: it creates a promotion asset. It also explains that promotion assets highlight sales and special offers, which distinguishes this asset type from the many other create_*_asset siblings.
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 for sales and special-offer promotions, but it does not explicitly say when to choose this over alternatives such as create_price_asset, create_callout_asset, or create_sitelink_asset. It also does not mention prerequisites beyond the required landing page.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_responsive_search_adGoogle Ads: create responsive search adADestructiveInspect
Creates a responsive search ad in an ad group.
Responsive search ads allow you to provide multiple headlines and descriptions,
and Google Ads will automatically test different combinations.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
ad_group_id: The ID of the ad group to add the ad to.
headlines: List of headline texts (min 3, max 15). Each headline max 30 characters.
descriptions: List of description texts (min 2, max 4). Each description max 90 characters.
final_url: The landing page URL for the ad.
path1: First URL path text (max 15 characters). Optional.
path2: Second URL path text (max 15 characters). Optional.
status: Ad status. One of: ENABLED, PAUSED. Default: ENABLED. In a
campaign that is already running, an ENABLED ad serves, from
that campaign's budget, as soon as Google approves it; pass
PAUSED to hold it.
Returns:
Dictionary with the created ad resource name.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| path1 | No | ||
| path2 | No | ||
| status | No | ENABLED | |
| 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?
Annotations already declare readOnly=false, destructiveHint=true, idempotent=false, and openWorld=true, so the mutation profile is covered. The description adds genuinely useful behavior beyond that: it explains that an ENABLED ad in a running campaign serves immediately from the campaign budget once Google approves it, and that PAUSED holds it. It does not mention that creation cannot be undone or any required OAuth/permission scope, which keeps it short of a 5.
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 purpose is front-loaded, followed by a short explanatory paragraph, then a clean Args section and a one-line Returns. Given that the schema has no parameter descriptions, the long Args block earns its space; the Returns note is slightly redundant because an output schema exists.
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 non-idempotent, destructive-annotated mutation tool with an output schema, the description covers what is created, all constraints, the status semantics, and the return value. An agent has everything needed to invoke it correctly; the only gap is sibling routing, which is not essential 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 carries the full burden, and it does: customer_id format ('numbers only, no hyphens'), headline min/max counts and 30-character limit, description min/max counts and 90-character limit, path1/path2 optionality plus 15-character limits, and status enum values with default. This is complete semantic coverage for all 8 parameters.
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 precise verb and resource ('Creates a responsive search ad in an ad group') and follows with a one-line explanation of what an RSA is, so an agent knows exactly which entity is produced. It distinguishes the ad type from asset-creation siblings (create_text_asset, create_image_asset, etc.) by naming the ad unit explicitly, though it never contrasts itself with those tools in words.
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 is only implied: you call this when you need an RSA placed in an existing ad group. There is no explicit 'use this instead of create_text_asset' or prerequisite guidance (e.g., that the ad group must already exist, or that headlines/descriptions become assets), and no when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_sitelink_assetGoogle Ads: create sitelink assetAInspect
Creates a sitelink asset that can be linked to campaigns or ad groups.
Sitelinks add additional links below your ad, directing users to specific pages.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
link_text: The text displayed for the sitelink (max 25 characters).
final_url: The URL the sitelink directs to.
description1: First line of description (max 35 characters). Optional.
description2: Second line of description (max 35 characters). Optional.
start_date: Start date in YYYY-MM-DD format. Optional.
end_date: End date in YYYY-MM-DD format. Optional.
Returns:
Dictionary with the created asset resource name.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ||
| final_url | Yes | ||
| link_text | Yes | ||
| start_date | No | ||
| customer_id | Yes | ||
| description1 | No | ||
| description2 | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive, non-idempotent write operation, so the safety profile is covered. The description adds concrete field constraints (25-char link text, 35-char description lines, YYYY-MM-DD dates), but omits operational behavior an agent would want: whether the created asset is auto-attached to anything, whether it requires review/approval, and what happens on duplicate calls given idempotentHint=false.
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?
Purpose is front-loaded in the first sentence, followed by a short explanatory line and a clean Args block. The Returns line slightly duplicates what the output schema already declares, but overall 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 7-parameter mutation with zero schema descriptions, the definition supplies enough to fill the fields correctly, and the presence of an output schema means return values need not be spelled out. The remaining gap is workflow context — that creation and linking are separate steps — which an agent would need to complete the task.
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 carries the full burden and does so: all seven parameters are documented with meaning, the required/optional split, character limits and the date format, plus the notable 'numbers only, no hyphens' rule for customer_id. This is meaningfully more than the schema titles provide.
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 and resource ('Creates a sitelink asset') and adds a one-line explanation of what sitelinks are, which implicitly separates it from the other create_*_asset siblings. It never explicitly contrasts itself with create_callout_asset or create_text_asset, so the differentiation is inferential rather than stated.
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 'can be linked to campaigns or ad groups' hints at the create-then-link workflow, but it never says the asset must subsequently be attached via link_asset_to_campaign or link_asset_to_ad_group, nor when a sitelink is preferable to another asset type. Usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_structured_snippet_assetGoogle Ads: create structured snippet assetAInspect
Creates a structured snippet asset that can be linked to campaigns or ad groups.
Structured snippets highlight specific aspects of your products/services
(e.g., header "Brands" with values ["Nike", "Adidas", "Puma"]).
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
header: The snippet header. One of: Amenities, Brands, Courses, Degree programs,
Destinations, Featured hotels, Insurance coverage, Models, Neighborhoods,
Service catalog, Shows, Styles, Types.
values: List of values for the snippet (min 3 values recommended).
Returns:
Dictionary with the created asset resource name.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| header | Yes | ||
| values | 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?
Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the mutation profile is covered. The description adds the useful operational note that at least 3 values are recommended and that the asset only takes effect once linked, but says nothing about validation failures, account permissions, or what happens on duplicate creation.
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?
Front-loaded with the purpose sentence, then a clarifying example, then per-argument notes. Every section earns its place, though the Args/Returns scaffolding is slightly verbose for only three parameters.
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 3-parameter mutation tool with full annotation coverage and an output schema, the definition supplies the essential enum, format constraints, and linking context. The only real gap is guidance on what happens when creation fails or the header/values pair is rejected.
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 carries the full burden and does it well: it documents the numeric-only, hyphen-free format for customer_id, enumerates the complete allowed header list (the schema has no enum at all), and gives the minimum-values recommendation for the values array.
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 ('Creates a structured snippet asset') and adds where it can be applied (campaigns or ad groups). The concrete example (header 'Brands' with values ['Nike', 'Adidas', 'Puma']) makes the asset type unmistakable against the many other create_*_asset siblings.
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 notes the asset 'can be linked to campaigns or ad groups', which hints at the follow-up linking workflow, but it never states when an agent should choose this asset type over create_callout_asset or create_sitelink_asset, nor any exclusions or prerequisites. Usage context is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_text_assetGoogle Ads: create text assetAInspect
Creates a text asset for use in Performance Max asset groups.
Use this to create headline, description, and long headline assets
that can be linked to asset groups.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
text: The text content. Character limits depend on usage:
- Headlines: max 30 characters
- Long headlines: max 90 characters
- Descriptions: max 90 characters
Returns:
Dictionary with the created asset resource name.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| text | 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?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=false, so safety is covered. The description adds character limits and the return shape, which is useful, but it does not warn that the non-idempotent behavior means repeated calls create duplicate assets, nor does it state account-access requirements.
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?
Front-loaded with the action and scope, then a short usage line and compact Args/Returns block. The Returns section is slightly redundant given an output schema exists, but overall the text is tight with no wasted sentences.
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 two-parameter creation tool with an output schema, the description covers both parameters, the character-limit constraint, and the returned resource name. Missing only cross-tool workflow context (create here, then link) which would complete the picture.
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 carries the burden and largely meets it: it explains customer_id must be numbers only with no hyphens, and maps text to per-type character limits (30/90/90). Only omission is that the caller must pick a type implicitly via the limit, with no parameter for it.
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 and resource (create text asset) and narrows scope to Performance Max asset groups, listing the three text sub-types it covers. It differentiates implicitly from siblings like create_call_asset or create_image_asset by naming text asset types, though it never names an alternative explicitly.
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?
"Use this to create headline, description, and long headline assets that can be linked to asset groups" gives implied usage context, but there is no when-not guidance, no mention that linking requires add_assets_to_asset_group or link_asset_to_ad_group, and no prerequisites (permissions, campaign type).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_youtube_video_assetGoogle Ads: create YouTube video assetAInspect
Creates a YouTube video asset for use in Performance Max campaigns.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
youtube_video_id: The YouTube video ID (e.g., "dQw4w9WgXcQ" from the URL).
asset_name: Optional name for the asset. If not provided, uses the video ID.
Returns:
Dictionary with the created asset resource name.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| asset_name | No | ||
| customer_id | Yes | ||
| youtube_video_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds one genuinely useful behavior: asset_name falls back to the video ID when omitted, and a resource name is returned. It does not warn that because the call is non-idempotent, repeated invocations create duplicate assets, nor mention permission requirements on the customer.
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 purpose sentence is front-loaded and the Args/Returns block is compact and scannable. The docstring scaffolding is slightly formal for a three-parameter tool, but every line conveys real 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 a simple three-parameter create call with an output schema present (so return values need no elaboration), the definition covers purpose, inputs and the default-name behavior adequately. The notable omission is lifecycle context — that the asset is inert until linked to a campaign or asset group.
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 carries the full burden and largely meets it: customer_id format is specified (numbers only, no hyphens), youtube_video_id is explained with a URL-extraction example, and asset_name's optional default behavior is stated. What is missing is validation guidance, such as what happens if the video ID is invalid or not owned by the account.
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 and resource ("Creates a YouTube video asset") plus the campaign context ("for use in Performance Max campaigns"), which cleanly separates it from sibling create_*_asset tools by resource type. It stops short of naming which sibling it complements (link_asset_to_campaign / link_assets_to_customer) to actually get the asset served.
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 Performance Max note implies when this tool is appropriate, but there is no explicit when-to-use/when-not or comparison to the many other create_*_asset siblings. Critically, it never says the created asset must subsequently be linked via link_asset_to_campaign or link_assets_to_customer before it has any effect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
day_of_weekGoogle Ads: day and hour performanceARead-onlyIdempotentInspect
Break 90 days of cost, conversions and cost-per-conversion down by day of week and hour, and name the day-parts that lose money and the ones that are underserved. For money-losing day-parts it can give the steps to change the schedule in Google Ads; it returns no tool call. Read-only.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| detail | No | summary | |
| render | No | both | |
| customer_id | Yes | ||
| max_findings | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior. The description adds valuable context beyond that: it will not invoke a tool call and instead returns step-by-step guidance for fixing losing day-parts. It does not describe data freshness or output shape, but the output schema covers return structure.
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 purpose is front-loaded and the description is only a few sentences. The trailing 'Tools revision' line is metadata noise that does not help an agent decide or invoke the tool, but the rest is efficient.
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 adequate for understanding the analytical intent and the no-tool-call behavior, and the output schema handles return values. However, with five parameters at 0% schema description coverage, the definition is incomplete on how to configure the analysis.
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 carry the burden. It does not explain the days, detail, render, max_findings, or customer_id parameters, aside from an implicit 90-day default. An agent cannot learn from the description how to control scope, detail level, or output rendering.
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 analytical operation: breaking 90 days of cost, conversions, and CPA down by day of week and hour, and identifying money-losing and underserved day-parts. It clearly distinguishes this diagnostic tool from the sibling mutation tool set_ad_schedule by noting that it only provides steps and returns no tool call.
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 gives clear implied usage context: use this to diagnose day-part performance and get guidance for schedule changes. It also implicitly routes agents to set_ad_schedule for actually applying changes. It does not explicitly state when not to use this versus other analysis tools like analyze_waste or bidding_audit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_conversion_gapGoogle Ads and Analytics: explain the conversion gapBRead-onlyIdempotentInspect
Explain why Google Ads and Analytics report different conversion counts for the same dates. Reads each Ads conversion action's window, counting and attribution, both date bases, the Analytics property's attribution model, lookback windows and export scope, and the key events credited to this account. Names each cause, sized where measurable, and the unexplained rest. Read-only.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | summary | |
| render | No | both | |
| end_date | No | ||
| ga4_event | No | ||
| start_date | No | ||
| customer_id | Yes | ||
| ga4_property | No | ||
| conversion_action_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context by listing what it reads—conversion action windows, counting and attribution, date bases, Analytics attribution model, lookback windows, export scope—and what output themes it reports, including named causes and unexplained remainder.
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 and mostly efficient: purpose first, then data sources read, then output content. The trailing 'Tools revision' line is non-functional noise, preventing a perfect conciseness score.
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 explains the analytical purpose and much of the underlying behavior, and an output schema exists so return values need not be detailed. However, for an 8-parameter read tool with 0% schema description coverage, it leaves parameter meaning and usage routing substantially incomplete.
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% across 8 parameters, and the description does not explain any parameter semantics. It implies concepts like dates, conversion actions, and Analytics properties, but does not clarify customer_id, detail, render, ga4_event, conversion_action_id, or date-format expectations beyond the schema titles.
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 gives a specific verb and resource: explain why Google Ads and Analytics report different conversion counts for the same dates. It clearly frames the task, but it does not explicitly distinguish this from nearby siblings such as conversion_setup_audit or ga4_get_attribution_settings.
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 is implied by the 'same dates' discrepancy context, but the description gives no explicit when-to-use/when-not guidance and does not point agents to or away from alternative tools for attribution or conversion setup checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
full_auditGoogle Ads: audit the accountBRead-onlyIdempotentInspect
Audit conversion tracking, wasted spend, structure, keywords, ads, settings. Deep, the default, attempts 74 checks over days, health-scored; quick scores three, month to date. Named checks (G18, G-WS1, G43): one call with their sections, detail full. Findings: failures first, then severity, not impact, advice-only last per status; some carry a fixing call. Accounts: get_org_context. Read-only.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| depth | No | ||
| detail | No | summary | |
| render | No | both | |
| sections | No | ||
| customer_id | Yes | ||
| max_findings | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful behavioral detail beyond that: check counts, health-scoring, findings ordering by failure/severity/status, advice-only trailing items, some results carrying a fixing call, and the get_org_context prerequisite.
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-loads the audit scope, but it is extremely telegraphic and some phrases are cryptic, such as 'not impact' and 'advice-only last per status.' It avoids waste but sacrifices readability.
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 7-parameter audit tool, it covers the broad purpose, depth modes, sections, result ordering, and prerequisite context well. Still, with 0% schema description coverage, missing render and max_findings explanations leave notable gaps 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 carries the full burden. It clarifies depth (deep default, quick scores three), detail full, days, and sections via named checks, but it does not explain render enum values, max_findings, or customer_id.
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 verb and resource: auditing a Google Ads account across conversion tracking, wasted spend, structure, keywords, ads, and settings. It differentiates deep vs quick modes and names check IDs, but it does not explicitly distinguish itself from sibling audit tools such as account_health_score or conversion_setup_audit.
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 provides some usage context by saying deep is the default with 74 checks and quick scores three month-to-date, and it mentions using named checks with their sections and detail full. However, it gives no explicit when-not conditions or alternatives, so an agent must infer when to choose this over narrower audit siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_create_conversion_eventGA4: create conversion eventCInspect
Mark an event as a conversion on a GA4 property.
When the event is already a key event on the property, nothing is changed
and the result has already_key_event true, with the existing key event.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| property | Yes | ||
| event_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds real value beyond the annotations by disclosing the no-op path for events that are already key events and the resulting 'already_key_event: true' field. However it says nothing about required permissions, whether the conversion is applied immediately, or other side effects; note also the mild tension with idempotentHint=false, since a same-argument repeat appears to be a no-op.
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 purpose is front-loaded in one sentence and the duplicate-handling behavior follows compactly. The trailing 'Tools revision: 5c9bea8f.' is internal build noise that earns no place in an agent-facing description.
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 return values are covered, and the top-level purpose is clear. But for a two-parameter creation tool with zero schema documentation and no alternatives guidance, the description leaves too much for an agent to guess — particularly the property identifier format and the relationship to ga4_update_conversion_event.
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 and does not: 'property' (presumably a 'properties/123456789' resource name) and 'event_name' formats are never explained. An agent could easily pass a bare numeric ID or a display name and fail.
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 ('Mark an event as a conversion on a GA4 property'), which is far better than a tautology. It doesn't differentiate itself from near-siblings like ga4_update_conversion_event or ga4_list_conversion_events, so an agent must infer create-vs-update from the name alone.
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?
There is no explicit when-to-use guidance: nothing says when to call this versus ga4_update_conversion_event, nor what prerequisites (property ID format, admin permissions) must hold. The only conditional described is the duplicate case, which is behavioral rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_create_custom_dimensionGA4: create custom dimensionCInspect
Create a custom dimension on a GA4 property.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | EVENT | |
| property | Yes | ||
| display_name | Yes | ||
| parameter_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, and openWorldHint=false, so the basic safety profile is covered. The description adds only that creation targets a GA4 property; it does not explain whether new dimensions become immediately active, whether names must be unique, or what happens on duplicate creation attempts.
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 first sentence is front-loaded and efficient, but the second sentence is a revision tag that adds no invocation value. The overall definition is concise but under-specified rather than optimally structured.
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 four-parameter mutation tool with zero schema description coverage, the description is too thin. Even with an output schema handling return values, an agent lacks enough context to confidently supply parameter_name, display_name, and scope.
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% for all four parameters, so the description must carry the burden. It only mentions 'property' and says nothing about parameter_name, display_name, or the scope default of EVENT, leaving critical parameter meaning 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 states a specific verb and resource: create a custom dimension on a GA4 property. It distinguishes the tool from siblings like ga4_create_custom_metric and ga4_update_custom_dimension by naming the resource and operation, though it does not explicitly route away from alternatives.
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 no indication of when to use this tool versus alternatives such as ga4_create_custom_metric or ga4_update_custom_dimension, nor does it mention prerequisites like required GA4 permissions or property readiness.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_create_custom_metricGA4: create custom metricCInspect
Create a custom metric on a GA4 property.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | EVENT | |
| property | Yes | ||
| display_name | Yes | ||
| parameter_name | Yes | ||
| measurement_unit | No | STANDARD |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-readonly, non-idempotent, non-destructive, closed-world mutation. The description adds no behavioral context beyond the property target, such as permission requirements, side effects, or whether repeated calls create duplicates.
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 purpose is front-loaded in a single clear sentence, but the trailing "Tools revision: 5c9bea8f." adds no task-relevant value. The description is concise but too sparse for the tool's complexity.
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?
This is a five-parameter mutation with zero schema description coverage. Although annotations cover basic safety and an output schema exists, the input semantics are essentially undocumented, leaving the agent under-equipped 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 description coverage is 0%, and the description provides no explanation of the five parameters. It does not clarify the difference between parameter_name and display_name, the meaning of scope, or valid measurement_unit values.
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 custom metric on a GA4 property." This is clear enough to distinguish creation from update/list siblings, but it does not distinguish custom metrics from the closely related ga4_create_custom_dimension.
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?
There is no guidance on when to use this tool versus ga4_create_custom_dimension, ga4_update_custom_metric, or ga4_list_custom_metrics. It also omits prerequisites such as required GA4 permissions or property scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_create_data_streamGA4: create data streamCInspect
Create a data stream on a GA4 property.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| property | Yes | ||
| stream_type | No | WEB_DATA_STREAM | |
| display_name | Yes | ||
| web_stream_data | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=false, so the mutation profile is covered without the description. The description adds nothing beyond them: it doesn't say what state a new stream starts in, whether duplicates are possible, or what permissions are needed. The 'Tools revision: 5c9bea8f' line is versioning noise, not 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 operational sentence is short and front-loaded with no wasted words. The appended 'Tools revision' line is dead weight but small enough not to disrupt the structure.
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?
A mutation tool with an output schema (so return values needn't be explained) but with 0% parameter coverage and an untyped nested object parameter, the description leaves an agent guessing about required formats and valid stream types. It is not complete enough to invoke confidently without inspecting the upstream GA4 API.
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% on all four parameters, so the description must compensate and instead says nothing about them. Key unknowns remain: the required 'property' format (e.g., 'properties/123456'), the allowed stream_type values and what changing them implies, and the shape of the free-form 'web_stream_data' object that anyOf accepts.
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?
Names a specific verb and resource ('Create a data stream on a GA4 property'), which cleanly separates it from the ga4_list_data_streams and ga4_update_data_stream siblings by operation. It doesn't explicitly call out those siblings, but the operation prefix makes disambiguation straightforward.
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?
No statement of when to use this versus ga4_update_data_stream (which presumably configures an existing stream) or ga4_create_property (which a stream likely depends on). No preconditions such as needing an existing GA4 property ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_create_google_ads_linkGA4: create Google Ads linkAInspect
Link a GA4 property (properties/) to a Google Ads account, so its key events can be imported into Google Ads as conversions and paid visits join the organic ones. customer_id is the Google Ads account (digits; hyphens are stripped). ads_personalization_enabled shares Analytics audiences and remarketing events with Google Ads — off unless the user asks for it. Read ga4_list_google_ads_links first: a property already linked to this account needs no second link. There is no unlink tool.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| property | Yes | ||
| customer_id | Yes | ||
| ads_personalization_enabled | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as a non-destructive write, and the description adds meaningful context beyond them: the link has no unlink tool, so it persists; linking shares audience and remarketing data when personalization is enabled; and duplicates are preventable by checking first. Those are exactly the side effects an agent needs before calling a mutation.
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?
Four tight sentences: purpose and rationale first, parameter formats next, then prerequisite and irreversibility. Every sentence adds information an agent can act on.
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?
All three parameters are explained despite zero schema descriptions, the prerequisite is named, and the output schema handles return values. Nothing needed to call it correctly 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 coverage is 0%, so the description carries the full burden. It gives the property format ('properties/<id>'), says customer_id is the Ads account number with hyphens stripped, and explains that ads_personalization_enabled defaults off and what it actually enables.
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 ('Link') and both resources (GA4 property and Google Ads account) and explains the effect on key events and paid/organic traffic. It also distinguishes itself from the sibling ga4_list_google_ads_links and notes there is no unlink counterpart.
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?
Explicitly instructs to read ga4_list_google_ads_links first so an agent avoids creating a duplicate link, and says ads_personalization_enabled should stay off unless the user asks. That covers both when to use it and how to gate the risky option.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_create_propertyGA4: create propertyAInspect
Create a GA4 property under an Analytics account (accounts/).
Use the Google Ads account's time zone and currency — get_org_context
carries them as the Analytics card's property_defaults; if it has none,
ask the user. time_zone is an IANA name (e.g. "Asia/Kolkata"),
currency_code ISO 4217 (e.g. "INR"). Next: ga4_create_data_stream on the
returned property for the website, which gives the measurement ID.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes | ||
| time_zone | Yes | ||
| display_name | Yes | ||
| currency_code | Yes | ||
| industry_category | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, so the agent knows this is a non-destructive, non-idempotent mutation. The description adds useful operational context the annotations cannot: where defaults come from, what to do when they are missing, and the expected next call in the workflow.
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?
Front-loaded with the action and scope, then defaults-sourcing, then param formats, then the next step — a sensible ordering. Slightly dense with an awkward line break mid-sentence, but nearly every clause carries 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?
An output schema exists, so return-value explanation is unnecessary, and the description covers the workflow gap around default values and the natural successor tool. The only hole is the optional industry_category, which is undocumented anywhere in the definition.
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% (titles only), so the description carries the burden — and it does for the two error-prone params, specifying time_zone as an IANA name with an example and currency_code as ISO 4217 with an example, plus the accounts/<id> format for account. display_name is self-evident, but industry_category is left entirely unexplained in both schema and description.
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 and resource ('Create a GA4 property') and pins the parent scope ('under an Analytics account (accounts/<id>)'), including the resource-name format. An agent can distinguish it from ga4_update_property and the other ga4_create_* siblings without opening a schema.
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 real routing guidance: pull time zone and currency from get_org_context (the Analytics card's property_defaults), and if absent, ask the user rather than guessing. It also names the follow-up step, ga4_create_data_stream. It does not, however, contrast this with ga4_provision_account, which is the nearest alternative for account/property setup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_get_attribution_settingsGA4: read attribution settingsARead-onlyIdempotentInspect
Read a GA4 property's attribution settings (properties/): the
reporting attribution model, the lookback window for first-visit and
first-open key events and for the other key events, and which channels
may earn credit for web conversions shared with Google Ads. Returns
Google's answer and a plain summary of the four.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| property | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds value by disclosing the response shape — Google's raw answer plus a `plain` summary of the four settings — which tells the agent what to expect back. It does not discuss permissions or quotas, but those are minor for a read.
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?
Core content is front-loaded in one dense, useful sentence covering what is read and what is returned. The trailing 'Tools revision: 5c9bea8f.' is build metadata that does not help an agent select or invoke the tool.
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 one-parameter, read-only tool with an output schema, the description supplies the necessary scope and a summary of the returned fields. The only real gap is the exact form of the `property` argument, which neither the schema nor the description pins down.
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 single `property` parameter has no schema-level documentation. The description partially compensates with the '(properties/<id>)' hint, suggesting the GA4 resource-name form, but it stays ambiguous about whether a bare numeric ID is accepted or whether the full 'properties/123' string is required.
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 and resource ('Read a GA4 property's attribution settings') and then enumerates exactly what is retrieved: attribution model, lookback windows for first-visit/first-open and other key events, and Google Ads credit channels. The read/update split against the sibling ga4_update_attribution_settings is unambiguous from the verb alone.
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 is only implied: reading current attribution configuration is the obvious precursor to ga4_update_attribution_settings, but the description never says when to call this versus the update tool, nor does it mention prerequisites such as property access. An agent can infer intent, but nothing is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_get_metadataGA4: list dimensions and metricsCRead-onlyIdempotentInspect
List the dimensions and metrics available for a GA4 property.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| property | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description need not restate safety. It adds nothing beyond that: no note on scope (built-in vs custom), freshness, or result size. The only extra line is a build revision string, which is not 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 core sentence is efficient and front-loaded, but the second line about the tools revision is operational noise that does not help an agent select or invoke the tool.
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 presence of an output schema means return values need not be described. However, for a tool whose only input is an undocumented property identifier, the description should carry the identifier format, and it does not.
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% for the single required 'property' parameter. The description does not clarify the expected identifier form (e.g., 'properties/123456789'), so the agent gets no help on a parameter that must be supplied correctly.
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?
Specific verb and resource: lists the dimensions and metrics available for a GA4 property. It is distinguishable from ga4_list_custom_dimensions and ga4_list_custom_metrics, though it never says explicitly that it covers the built-in/all available set versus custom-only, which would have sharpened the sibling distinction.
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?
No when-to-use guidance or named alternatives. The metadata-lookup-before-reporting use case is only implied by the word 'available'. An agent must infer that this is for discovering valid dimension/metric names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_list_account_summariesGA4: list accounts and propertiesBRead-onlyIdempotentInspect
List GA4 accounts and their properties this Google login can reach.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so safety is covered. The description adds the useful access-scope caveat that results are limited to what the current Google login can reach, but says nothing about pagination behavior despite exposing a page_size parameter.
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 first sentence is well-formed and front-loaded, but the trailing 'Tools revision: 5c9bea8f.' is internal bookkeeping that gives an agent nothing and dilutes the definition.
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 return values need not be described. Still, for a list tool with a paging parameter the description should say whether results are paginated and how this differs from ga4_list_properties; both gaps remain.
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% for the single page_size parameter, so the schema provides no meaning at all. The description never mentions paging, the default of 200, or whether there is a next-page token, leaving the one parameter entirely unexplained.
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 and resource ('List GA4 accounts and their properties') plus a permission scope ('this Google login can reach'), which is much clearer than the title alone. It does not, however, explicitly distinguish itself from the sibling ga4_list_properties, which an agent could easily confuse it with.
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 is only implied: the permission-scoped phrasing suggests this is the discovery/bootstrap call before property-specific tools like ga4_list_properties or ga4_run_report. There is no explicit statement of when to prefer this tool over those siblings and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_list_conversion_eventsGA4: list conversion eventsCRead-onlyIdempotentInspect
List the conversion events configured on a GA4 property.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| property | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so safety is fully covered. The description adds nothing beyond that — no pagination behavior, no note on what 'configured' events include (e.g., whether they're limited to Google Ads conversion imports).
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 core sentence is appropriately short and front-loaded, but the second line ('Tools revision: 5c9bea8f.') is internal noise that consumes space without helping an agent select or invoke the tool.
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 return values need not be explained. However, for a tool whose only parameter has zero schema documentation and whose purpose overlaps several conversion-event siblings, the description leaves real gaps an agent would need filled.
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 there is one required parameter ('property'). The description only echoes 'on a GA4 property' without giving the expected identifier format (e.g., 'properties/123456789'), so it fails to compensate for the undocumented 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?
States a specific verb and resource: listing conversion events configured on a GA4 property. An agent can tell what it does, but the description gives no cue to distinguish it from siblings like ga4_list_data_streams, ga4_create_conversion_event, or ga4_update_conversion_event.
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?
No guidance on when to call this versus the related conversion-event tools (ga4_create_conversion_event, ga4_update_conversion_event, conversion_setup_audit). The agent must infer usage purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_list_custom_dimensionsGA4: list custom dimensionsCRead-onlyIdempotentInspect
List the custom dimensions of a GA4 property.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| property | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already fully declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description needs to add context it does not supply — no pagination behavior, no note on return shape, and the only extra sentence is a 'Tools revision' marker that carries no behavioral information.
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 first sentence is tight and front-loaded, but the second sentence ('Tools revision: 5c9bea8f.') is build metadata that adds no value for an agent and should not be in a tool description.
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 read-only listing tool with a full annotation set and an output schema, the description covers the essentials; the main missing piece is what form the 'property' argument takes, which the agent needs 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?
The single required parameter 'property' has 0% schema description coverage, and the description does nothing to clarify the expected format (numeric ID vs. 'properties/123' resource name). With low coverage the description should compensate but does not.
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?
Clear verb + resource ("List the custom dimensions of a GA4 property") that is unambiguously distinct from siblings like ga4_list_custom_metrics and ga4_create_custom_dimension. It does not explicitly contrast with those siblings, but the name and phrasing make the scope obvious.
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?
No guidance on when to use this versus the related tools (create/update custom dimension, list custom metrics), and no prerequisites or exclusions stated beyond the implied 'I need to see existing dimensions' context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_list_custom_metricsGA4: list custom metricsCRead-onlyIdempotentInspect
List the custom metrics of a GA4 property.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| property | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that—no mention of pagination, result size, or whether archived/created-in-UI metrics are included—and the 'Tools revision' line is noise rather than 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 core sentence is front-loaded and wastes no words. The trailing 'Tools revision: 5c9bea8f.' adds no decision-relevant information and could be dropped.
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 return values needn't be described, and the read-only annotations are complete. But for a one-parameter call whose only parameter is undocumented in the schema, the description leaves the critical identifier format unstated, making the definition incomplete 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 compensate for the single required 'property' parameter, but it never explains that this is a GA4 property identifier or what format (e.g., 'properties/123456789') to pass. Without that, agents are likely to pass a display name and fail.
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 and resource: list the custom metrics belonging to a GA4 property. It is clearly distinct from ga4_create_custom_metric and ga4_update_custom_metric by the 'list' verb, but the description never names those siblings or scoping conditions explicitly.
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?
There is no guidance on when to use this versus ga4_list_custom_dimensions, ga4_get_metadata, or the create/update counterparts, and no prerequisites such as permissions or required property ID format. The agent must infer usage from the verb alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_list_data_streamsGA4: list data streamsARead-onlyIdempotentInspect
List the data streams of a GA4 property (properties/).
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| property | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so safety is fully covered. The description adds only the property resource path convention; it says nothing about result ordering, pagination, or permissions beyond what annotations provide, and the 'Tools revision' line is inert metadata.
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 core sentence is front-loaded and efficient. The trailing 'Tools revision: 5c9bea8f.' sentence conveys nothing to an agent and dilutes the signal, but total length is small.
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?
A read-only single-parameter list tool with rich annotations and an output schema needs little prose; purpose plus the property path format is sufficient to call it correctly. Only the source of the property id (via ga4_list_properties) 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 coverage is 0%, so the description carries the burden for the single required parameter. It does compensate meaningfully by defining 'property' as a GA4 property in the form properties/<id>, which is the key detail the bare schema lacks, but it omits where to obtain that id.
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 and resource (list data streams of a GA4 property) and even names the resource path shape (properties/<id>). It is distinguishable from siblings like ga4_create_data_stream and ga4_update_data_stream, though it never explicitly contrasts itself with ga4_list_properties or other list 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 listing intent implies when to use it, and the property path hint supports invocation, but there is no explicit guidance on prerequisites (which property to pick, or that ga4_list_properties should be called first to obtain the id) and no named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_list_google_ads_linksGA4: list Google Ads linksCRead-onlyIdempotentInspect
List the Google Ads links of a GA4 property (the paid+organic join).
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| property | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds only the domain gloss 'paid+organic join' and says nothing about return shape, pagination, or what happens when no links exist.
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 purpose sentence is front-loaded and efficient, but the trailing 'Tools revision: 5c9bea8f.' is build metadata that adds no invocation value and dilutes an already thin description.
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 return values need not be described, and annotations carry the safety profile. Still, for a tool whose only parameter is undocumented in both schema and description, the definition leaves a real gap on how to address the property.
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 single 'property' parameter has no description or format hint in the schema. The description only says 'of a GA4 property', leaving the agent to guess whether it takes a numeric ID, 'properties/123' resource name, or a display 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?
Specific verb+resource: 'List the Google Ads links of a GA4 property', with a parenthetical clarifying the concept (paid+organic join). It is clearly the read counterpart to ga4_create_google_ads_link, though the description never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites (e.g., that the property must exist and have a linked Google Ads account), and no mention of the create/alternatives. Usage is only inferable from the verb 'List'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_list_propertiesGA4: list propertiesARead-onlyIdempotentInspect
List GA4 properties under an account (accounts/).
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds only the account resource-path convention; it says nothing about result completeness, paging, or ordering. With annotations doing the heavy lifting, a 3 is appropriate.
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?
One short sentence front-loads the action and scope, which is exactly right for a simple lister. The trailing 'Tools revision: 5c9bea8f.' line is boilerplate that adds no decision-relevant 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?
An output schema exists, so return shape need not be explained, and annotations cover safety and idempotency. For a single-parameter read tool the description is sufficient to call it correctly, with only minor gaps around ID sourcing and result completeness.
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 single 'account' parameter has no schema description, so the description carries the burden. It does supply the resource-name format 'accounts/<id>', which is genuinely useful, but it does not say whether a bare numeric ID is also accepted or how to obtain the ID.
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 and resource ('List GA4 properties') plus the scope constraint (under an account), which lets an agent distinguish it from write siblings like ga4_create_property or ga4_update_property. It does not explicitly differentiate from ga4_list_account_summaries, so it stops short of 5.
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 scoping phrase implies when the tool applies (you have an account and need its properties), but there is no explicit when-to-use/when-not guidance and no mention of the natural alternative ga4_list_account_summaries. Usage must be inferred from the scope statement alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_provision_accountGA4: start a new Analytics account (terms link)AInspect
Start a new Google Analytics account for a login that has none.
Returns terms_url: a link the user opens ONCE to accept Google's
Analytics terms (only they can); the account exists after that. Then
ga4_list_account_summaries finds it, and ga4_create_property follows.
region_code is the business's country (CLDR, e.g. "IN", "US"). If Google
refuses, the result has fallback=true and Google's own sign-up page
instead — give the user that link.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| region_code | Yes | ||
| display_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by explaining that the result is a terms_url the user must open once, that the account only exists after they accept, and that a refusal yields fallback=true with Google's own sign-up page. This is exactly the consent and failure behavior an agent cannot infer from structured fields.
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?
Front-loads the purpose, then layers in return behavior, sequencing, parameter guidance, and fallback handling without filler. It is dense but every sentence contributes; only the fallback sentence is slightly run-on.
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 provisioning tool with a consent link, the description covers purpose, required user action, sequencing, parameter format, and failure fallback. Even though an output schema exists, the description supplies the behavioral meaning an agent needs before calling.
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%, so the description must carry parameter meaning. It usefully explains region_code as a CLDR business country with examples, but says nothing about display_name, leaving half the parameters to inference.
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 and resource (start a new Google Analytics account) and scopes it to a login that has none. This cleanly separates it from ga4_list_account_summaries and ga4_create_property, which it explicitly names as follow-on 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?
Gives clear context for when to use it ('for a login that has none') and describes the subsequent workflow with ga4_list_account_summaries and ga4_create_property. It stops short of an explicit 'do not call if the user already has an account' warning, but the constraint is strongly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_run_cohort_reportGA4: run retention (cohort) reportARead-onlyIdempotentInspect
Retention for a GA4 property (properties/): people grouped by day, week (Sunday to Saturday) or month of first visit, not sign-up, and how many were active in each later period; one still running is marked incomplete. first_channel or google_ads_campaign keeps people that channel or campaign first brought; split_by="channel" puts paid channels beside the largest others.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| cohorts | No | How many groups, 1 to 12. | |
| property | Yes | ||
| split_by | No | "channel": one table per first channel. Every paid channel is kept whatever its size, then the largest others, 8 tables at most; the rest are counted in a note. | |
| granularity | No | WEEKLY | |
| first_channel | No | A default channel group exactly as Analytics names it, such as "Paid Search". | |
| follow_periods | No | Later periods to report for each group, 1 to 12 (30 when DAILY). | |
| last_cohort_end | No | YYYY-MM-DD. The newest group is the last whole day, week or month ending on or before it; by default the newest one that is over. | |
| google_ads_campaign | No | A Google Ads campaign name exactly as written; Analytics knows it once linked to Google Ads. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish read-only, idempotent, non-destructive, closed-world behavior, so the description is not required to carry the safety profile. It adds useful behavioral context beyond annotations: cohort grouping is by first visit rather than sign-up, the newest running cohort is marked incomplete, and split_by can produce up to eight channel tables with overflow noted.
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 core retention/cohort concept and then explains the key filtering/splitting behaviors efficiently. The appended revision line adds little value for an agent deciding how to invoke the tool, but the substantive text is dense and well organized.
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 eight-parameter report tool with an output schema and read-only annotations, the description gives enough context to understand the report model, first-touch filtering, split behavior, and incomplete cohort marking. Remaining parameter details are mostly covered by schema descriptions, so no critical invocation information appears 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 coverage is 75%, and the description adds meaningful semantics for key parameters beyond the schema: first_channel and google_ads_campaign restrict to users first brought by that channel/campaign, and split_by="channel" keeps paid channels beside the largest others. It does not elaborate on cohorts, follow_periods, granularity, or last_cohort_end, but those are reasonably documented in the 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 clearly states that this is a GA4 cohort/retention report, explaining that users are grouped by first-visit period and measured for activity in later periods. It is specific enough to distinguish the resource and report type, though it does not explicitly contrast itself with sibling GA4 report tools such as ga4_run_report or ga4_run_funnel_report.
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 is implied by the stated purpose: this tool is for retention/cohort analysis. The description mentions filters like first_channel and google_ads_campaign and explains split_by behavior, but it gives no explicit when-to-use guidance or alternative-tool routing against the other GA4 report siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_run_funnel_reportGA4: run funnel reportCRead-onlyIdempotentInspect
Run a GA4 funnel report (v1alpha) — ordered steps over a date range.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | Yes | ||
| end_date | No | today | |
| property | Yes | ||
| start_date | No | 28daysAgo |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior, so safety is covered. The description contributes the meaningful detail that steps are evaluated in order, which tells the agent semantics matter, but it says nothing about latency, step limits, or how incomplete funnels are reported.
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 core sentence is front-loaded and tight, but the trailing "Tools revision: 5c9bea8f." is noise for tool selection and consumes space that could have documented the steps format.
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 return values need not be described, but the central input — the required steps array with additionalProperties allowed — is completely unexplained. For a tool whose correctness hinges on step definition, this leaves the agent guessing at 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% across four parameters, so the description must compensate and largely does not. It hints at date-range and ordered-step concepts, but never explains the structure of the required `steps` array of free-form objects or the accepted date formats beyond the schema defaults.
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 names a specific verb and resource ("Run a GA4 funnel report") plus its shape ("ordered steps over a date range"), which separates it from generic report siblings. It does not explicitly contrast with ga4_run_report, ga4_run_cohort_report, or ga4_run_pivot_report, so an agent must infer the funnel-specific case.
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?
No guidance on when to pick a funnel report over the other GA4 report tools in the sibling list. The parenthetical "(v1alpha)" hints at API stability but says nothing about preconditions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_run_pivot_reportGA4: run pivot (cross-tab) reportARead-onlyIdempotentInspect
Cross-tab for a GA4 property (properties/) from start_date to end_date: rows dimensions down the side, columns dimensions across, the metrics in each cell. Keeps the top row_limit rows (at most 100) and column_limit columns (at most 25) by the first metric, states how many exist in all, and adds totals.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | Yes | ||
| totals | No | ||
| columns | Yes | ||
| metrics | Yes | ||
| end_date | Yes | ||
| property | Yes | ||
| row_limit | No | Rows kept, 1 to 100. | |
| start_date | Yes | ||
| column_limit | No | Columns kept, 1 to 25. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral detail beyond annotations: top-N truncation by the first metric, row_limit max 100, column_limit max 25, total-count reporting, and totals inclusion.
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 and efficient, covering purpose, layout, limits, and totals in one main sentence. The trailing revision string is not useful for invocation and is the only notable waste.
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 9-parameter read-only report tool with a low schema-description coverage but an output schema, the description provides enough behavioral context to call it correctly. Minor gaps remain around date format and dimension/metric naming, but the core invocation semantics are present.
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 only 22%, so the description must compensate. It explains rows, columns, metrics, property format, row_limit/column_limit semantics, truncation by first metric, and totals behavior, though it does not specify date formats or accepted dimension/metric naming conventions.
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?
Clearly identifies a GA4 cross-tab/pivot report and explains its layout: rows dimensions down the side, columns across, metrics in cells. It distinguishes itself from a standard report by explicitly describing cross-tab structure, though it does not name sibling 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 cross-tab description implies when the tool is appropriate, but there is no explicit guidance on when to prefer it over ga4_run_report, ga4_run_cohort_report, ga4_run_funnel_report, or ga4_run_realtime_report. Usage is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_run_realtime_reportGA4: run realtime reportBRead-onlyIdempotentInspect
Run a GA4 realtime report (last ~30 min) for a property.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| metrics | Yes | ||
| property | Yes | ||
| dimensions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds the useful behavioral fact that results cover only the last ~30 minutes, but says nothing about rate limits, quota, or the shape of the response despite realtime endpoints often being quota-sensitive.
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?
One tight sentence with the scope front-loaded. The trailing 'Tools revision: 5c9bea8f.' is versioning noise that adds nothing for an agent selecting or calling the tool.
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 return values need not be explained, but with 0% parameter coverage and no format guidance the definition leaves an agent guessing at the two required arguments. For a tool whose entire difficulty is naming valid GA4 metrics/dimensions, this is under-specified.
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% across all three parameters: property, metrics and dimensions carry only titles and types. The description adds nothing about expected property ID format (e.g. 'properties/123456789') or the GA4 API metric/dimension name syntax — the exact information an agent needs and cannot get 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?
States a specific verb and resource ('Run a GA4 realtime report') plus the distinguishing scope ('last ~30 min') for a property. That window implicitly separates it from ga4_run_report, but the sibling is never named, so the differentiation is inferred rather than explicit.
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 recency window hints at when this is the right choice (near-live monitoring vs. historical reporting), but there is no explicit when-to-use/when-not, no mention of ga4_run_report or the funnel/cohort/pivot report siblings as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_run_reportGA4: run reportCRead-onlyIdempotentInspect
Run a GA4 Data API report (dimensions x metrics over a date range) for a property (properties/).
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| metrics | Yes | ||
| end_date | Yes | ||
| property | Yes | ||
| dimensions | No | ||
| start_date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so safety behavior is covered. The description adds only the property ID format (properties/<id>) and general report scope; it omits limits, pagination, date formats, and error 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 first sentence is concise and front-loaded with the core purpose. The appended 'Tools revision' sentence adds no value for tool selection or invocation and should be removed.
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 output schema exists, so return values need not be explained, but the description is still incomplete for a six-parameter report tool with 0% schema coverage. It lacks crucial parameter semantics and does not differentiate this report from its many GA4 report siblings.
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 all six parameters. It clarifies the property format and the general dimensions/metrics/date-range concept, but it does not explain date formats, the optional dimensions default, the metrics array, or the limit parameter.
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: running a GA4 Data API report over dimensions and metrics for a property and date range. It does not distinguish this general report tool from sibling report types such as ga4_run_cohort_report, ga4_run_funnel_report, ga4_run_pivot_report, or ga4_run_realtime_report.
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 gives no explicit guidance on when to use this tool versus the other GA4 report tools. The dimensions-by-metrics framing implies general reporting, but it lacks exclusions, prerequisites, or alternative-routing advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_update_attribution_settingsGA4: update attribution settingsADestructiveIdempotentInspect
Change a GA4 property's reporting attribution model or key-event lookback windows (properties/). Give only what changes: reporting_attribution_model (PAID_AND_ORGANIC_CHANNELS_DATA_DRIVEN, PAID_AND_ORGANIC_CHANNELS_LAST_CLICK or GOOGLE_PAID_CHANNELS_LAST_CLICK), acquisition_lookback_days (7 or 30, for first-visit and first-open key events), other_lookback_days (30, 60 or 90). A model change applies to past and future Analytics reports; a window change applies from the day it is made. Which channels may earn credit for conversions shared with Google Ads is not changed here. Returns the settings before and after, and the arguments that put the old values back.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| property | Yes | ||
| other_lookback_days | No | ||
| acquisition_lookback_days | No | ||
| reporting_attribution_model | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, which already flag a destructive, non-read-only mutation, the description discloses that model changes apply to past and future reports, window changes apply from the day made, and Google Ads channel-credit settings are not changed here. It also states that the tool returns before/after settings and rollback arguments, giving unusually strong operational 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 dense but front-loaded: it opens with the action and scope, then enumerates parameters, then explains effects and return behavior. Every sentence carries information needed to call the tool correctly.
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 destructive mutation with no schema descriptions, the description supplies valid values, temporal effects, scope exclusions, and return/rollback behavior. Although an output schema exists, the description's return summary adds useful operational context without redundancy.
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 schema contains no enums, so the description must compensate. It does so by giving the property path format and enumerating valid values for reporting_attribution_model, acquisition_lookback_days, and other_lookback_days, plus explaining the meaning of each.
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: changing a GA4 property's reporting attribution model or key-event lookback windows. It also names the scoped property path format, making it clearly distinguishable from the read-only sibling ga4_get_attribution_settings.
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 instructs to 'Give only what changes' and explains the effect of model versus window changes. It does not explicitly name when to use this instead of ga4_get_attribution_settings or other GA4 update tools, so the routing guidance is clear but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_update_conversion_eventGA4: update conversion eventCDestructiveIdempotentInspect
Update a conversion event (e.g. countingMethod) by resource name.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| update_mask | No | countingMethod | |
| counting_method | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=true, and openWorldHint=false. The description adds little beyond the mutation nature and an example field, but it does not contradict the annotations and provides some context for a destructive update.
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 core sentence is concise and front-loaded. The appended 'Tools revision' sentence adds little value and is the only unnecessary element.
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?
Although annotations and an output schema reduce the need to explain safety and returns, the description is too thin for a 3-parameter mutation tool with 0% schema description coverage. It does not explain update_mask, allowed counting_method values, or practical update 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%, so the description must explain parameters. It only hints at 'name' via 'by resource name' and at 'counting_method' via the example, leaving update_mask and valid counting-method values 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 states a specific verb and resource: 'Update a conversion event' and adds the scoping mechanism 'by resource name.' It is clearly distinct from ga4_create_conversion_event and ga4_list_conversion_events, though it does not explicitly name those siblings.
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 implies the tool is for updating an existing conversion event and requires a resource name, but it gives no explicit when-to-use guidance, prerequisites, or comparison against alternatives such as create or list operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_update_custom_dimensionGA4: update custom dimensionCDestructiveIdempotentInspect
Update a custom dimension by resource name.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| update_mask | No | displayName | |
| display_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the operation is not read-only, is destructive, and is idempotent. The description adds little beyond "by resource name" and does not explain what makes the update destructive, what fields can change, or any permissions or side 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?
The description is short and front-loaded with the core action. However, the trailing "Tools revision: 5c9bea8f." does not help an agent invoke the tool and the remaining text is too sparse to be useful.
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?
This is a destructive update tool with three parameters and no schema descriptions, so the description needs to do more work. An output schema exists, so return values need not be explained, but the description omits essential update behavior and parameter guidance.
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 undocumented parameters. It only implies that `name` is a resource name; it does not explain `display_name` or the `update_mask` parameter, including its default value.
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: "Update a custom dimension." It is clear what the tool does, but it does not distinguish this from sibling tools such as ga4_update_custom_metric or ga4_create_custom_dimension.
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 no guidance about when to use this tool versus alternatives, nor does it mention prerequisites such as needing an existing dimension or a required resource name format. Usage must be inferred from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_update_custom_metricGA4: update custom metricCDestructiveIdempotentInspect
Update a custom metric by resource name.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| update_mask | No | displayName | |
| display_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=true and idempotentHint=true, but the description adds nothing about what is actually destructive or what happens to fields not listed in the update mask. For a destructive mutation, the description should explain the blast radius or that unlisted fields are preserved; instead it only carries a build-revision string.
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 operational sentence is short and front-loaded, but the trailing 'Tools revision: 5c9bea8f' is pure noise that consumes attention without informing invocation. Brevity here reflects under-specification rather than disciplined editing.
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 destructive, idempotent mutation with three undocumented parameters and no schema descriptions, the description should cover required permissions, resource-name format, and the meaning of the update mask. An output schema exists, so return values need not be explained, but the input-side gaps are substantial.
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 bears the full burden, yet it only hints that 'name' is a resource name. The critical 'update_mask' parameter (default 'displayName') and 'display_name' are completely undocumented, leaving the agent to guess the resource-name format and mask syntax.
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 and resource (update a custom metric) and indicates it works by resource name, but says nothing about which properties can be changed or how it differs from ga4_update_custom_dimension or the create/list siblings. The agent can grasp the operation class but not its 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?
There is no when-to-use guidance at all: no note that the metric must already exist, no pointer to ga4_create_custom_metric or ga4_list_custom_metrics as the alternatives, and no mention of prerequisites such as property permissions. The agent must infer everything from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_update_data_streamGA4: update data streamCDestructiveIdempotentInspect
Update a data stream by resource name.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| update_mask | No | displayName | |
| display_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose that this is not read-only, is destructive, and is idempotent, so the description could focus on added behavioral context. Instead it adds almost nothing beyond saying the resource is addressed by name; it does not explain what update behavior is destructive or what permissions or effects are involved.
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 short and front-loads the core action, but the second sentence about the tools revision does not help an agent decide or invoke the tool. It is concise but includes non-functional metadata.
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 destructive update tool with three parameters and no schema descriptions, the description is too thin. The output schema may cover return values, but the input semantics and update effects are insufficiently explained.
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 but only clarifies that the 'name' parameter identifies the resource. It does not explain 'display_name' or the 'update_mask' default behavior, leaving most parameter meaning 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 states a specific verb and resource: 'Update a data stream,' and adds that it is identified 'by resource name.' This distinguishes it reasonably well from sibling tools like ga4_create_data_stream and ga4_list_data_streams, though it does not explicitly name alternatives.
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?
There is no guidance on when to use this tool versus alternatives such as ga4_create_data_stream or ga4_list_data_streams, and no prerequisites or conditions are described. The update intent is implied only by the verb and tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ga4_update_propertyGA4: update property settingsADestructiveIdempotentInspect
Update settings on a GA4 property (name=properties/) with the Analytics Admin API's properties.patch (https://developers.google.com/analytics/devguides/config/admin/v1/rest/v1beta/properties/patch). body holds the Property fields to change; update_mask lists them in snake_case, comma-separated (e.g. "display_name,time_zone").
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| name | Yes | ||
| update_mask | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true; the description adds meaningful behaviour beyond that by making the field-mask contract explicit — only fields listed in update_mask are patched, in snake_case, comma-separated. It still doesn't disclose required permissions, whether the change is reversible, or why the tool is flagged destructive despite the mask protection, which is a notable gap for a mutation.
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 first sentence is well front-loaded and the update_mask example is high value, but the raw documentation URL and the trailing 'Tools revision: 5c9bea8f.' line add length without helping an agent decide or invoke. Roughly one line of the three-sentence body does not earn 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?
An output schema exists, so return values need no explanation, and the mask semantics make the partial-update contract clear for a nested body. What's missing for a destructive-flagged mutation is the practical context an agent needs: where to obtain the property name, and which Property fields body may legitimately contain.
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%, so the description carries full burden, and it documents all three parameters: the 'properties/<id>' format for name, body as the container of Property fields, and update_mask's syntax with a concrete example ('display_name,time_zone'). It does not enumerate the valid Property fields that body accepts, leaving the freeform nested object under-specified.
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 and resource ('Update settings on a GA4 property') and pins the exact API surface (properties.patch), which makes it distinguishable from the many ga4_update_* siblings that target data streams, custom dimensions, and conversion events. It does not name any sibling explicitly, so it stops short of a 5.
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 tells the agent how to structure the call (body = fields to change, update_mask = which fields) but never says when to use this versus ga4_create_property or the read-side ga4_get_* tools, nor what prerequisites (admin access, property ID discovery via ga4_list_properties) are needed. Usage is implied by the 'update' semantics rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_keyword_forecastGoogle Ads: forecast keyword clicks and costARead-onlyIdempotentInspect
Forecasts clicks, impressions and cost for keywords at a bid or a daily budget.
Google's estimate for the 30 days from two days ahead, or the dates
given, simulated for this account: not a promise, and a new account or
one that has never spent gets rougher figures or none. Nothing is
created, saved or spent. A figure Google does not return is null and
listed in unavailable_metrics with the reason (Google forecasts
conversions for MAXIMIZE_CONVERSIONS).
MANUAL_CPC needs max_cpc_bid_micros (daily_budget_micros optional);
MAXIMIZE_CLICKS (TARGET_SPEND is the same) needs daily_budget_micros,
with max_cpc_bid_ceiling_micros as an optional cap; MAXIMIZE_CONVERSIONS
needs daily_budget_micros. Amounts are micros of the account's currency
(1,000,000 is 1 unit); an amount under 10,000 is refused.
Each call is one request to Google. Google accepts about one keyword
planning request per second per account, so a request within a second
of the last one for the same account waits for the rest of that second.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
keywords: [{"text": ..., "match_type": "EXACT", "PHRASE" (default)
or "BROAD"}], at most 200. Or ad_groups.
bidding_strategy: MANUAL_CPC (default), MAXIMIZE_CLICKS or
MAXIMIZE_CONVERSIONS.
max_cpc_bid_micros: The most to pay for a click (MANUAL_CPC).
daily_budget_micros: The daily budget.
max_cpc_bid_ceiling_micros: A cap per click (MAXIMIZE_CLICKS).
network: GOOGLE_SEARCH (default) or GOOGLE_SEARCH_AND_PARTNERS.
geo_target_ids: Location ids (geo target constants), at most 10.
language_ids: Language ids, at most 10 (a list here; the other two
keyword tools take one language_id).
negative_keywords: Words the ads stay away from (broad match), at
most 200.
start_date: First day, YYYY-MM-DD, after today.
end_date: Last day, YYYY-MM-DD, at most 364 days from today.
currency_code: An ISO code to state amounts in. Default: the
account's currency.
ad_groups: Instead of keywords, keywords in separate ad groups:
[{"keywords": [...], "max_cpc_bid_micros": ...,
"negative_keywords": [...]}], at most 20 (bids on MANUAL_CPC).
Returns:
forecast (clicks, impressions, click_through_rate, average_cpc,
cost, conversions, conversion_rate, average_cpa; null when not
returned), unavailable_metrics, forecast_period, currency_code,
bidding_strategy, network, keyword_count, ad_group_count, caveat and
notes.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | GOOGLE_SEARCH | |
| end_date | No | ||
| keywords | No | ||
| ad_groups | No | ||
| start_date | No | ||
| customer_id | Yes | ||
| language_ids | No | ||
| currency_code | No | ||
| geo_target_ids | No | ||
| bidding_strategy | No | MANUAL_CPC | |
| negative_keywords | No | ||
| max_cpc_bid_micros | No | ||
| daily_budget_micros | No | ||
| max_cpc_bid_ceiling_micros | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, yet the description adds substantial extra context: Google's forecasting window semantics, accuracy caveats for new accounts, null handling via unavailable_metrics, per-account rate limits (~1 keyword planning request/second with throttling behavior), and a minimum amount threshold of 10,000 micros. This is well beyond what structured fields convey.
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?
Front-loaded with purpose and the crucial non-promise caveat, then a compact bidding-strategy block, then per-argument notes. It is long but nearly every sentence adds information; the 'Returns:' section is somewhat redundant given the output schema, and a few lines (e.g., TARGET_SPEND aliasing) could be tightened.
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 14-parameter tool with zero schema descriptions, the definition covers parameter contracts, constraints, rate limiting, forecast semantics, null results, and error/refusal behavior (amounts under 10,000). Nothing an agent needs to call it correctly 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 carries full parameter burden and does so thoroughly: per-parameter semantics, defaults (PHRASE match type, MANUAL_CPC, GOOGLE_SEARCH), mutual exclusivity (keywords vs ad_groups), which bid fields each bidding_strategy requires, micros conversion rules, and explicit limits (200 keywords/negatives, 10 geo/language ids, 20 ad groups, 364-day horizon).
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?
Specifies verb and resource precisely: 'Forecasts clicks, impressions and cost for keywords at a bid or a daily budget.' It also distinguishes itself from the other keyword tools by noting they take a single language_id, and its read-only, simulated nature separates it from mutating siblings.
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 description (planning/estimating, nothing saved or spent) and it notes when Google will return rougher figures or none. However, it never explicitly states when to use this versus get_keyword_ideas, get_keyword_metrics or keyword_opportunities, so alternative selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_keyword_ideasGoogle Ads: find keyword ideasARead-onlyIdempotentInspect
Finds keyword ideas with Google's search volume, competition and top-of-page bid range.
Ideas grow from keywords, a landing page or a whole site: pass keywords
(1 to 20), page_url, keywords with page_url, or site alone. Figures are
Google's estimates from the last 12 months; avg_monthly_searches is null
where Google reports too few searches to show. A new account, or one
that has never spent, can get ranges or no ideas. It reads only and
saves nothing.
Each call is one request to Google and returns one page of at most
`limit` ideas; next_page_token asks for the next page. Google accepts
about one keyword planning request per second per account, so a request
within a second of the last one for the same account waits for the rest
of that second.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
keywords: Seed keywords or phrases, 1 to 20.
page_url: A page whose content seeds the ideas (http:// or https://).
site: A domain whose pages seed the ideas, e.g. "example.com". Not
combined with keywords or page_url.
geo_target_ids: Location ids (geo target constants, e.g. 2356 for
India; search geo_target_constant to find one), at most 10.
Default: every location.
language_id: Language id (language constant). Default 1000, English.
network: GOOGLE_SEARCH (default) or GOOGLE_SEARCH_AND_PARTNERS.
include_adult_keywords: Include adult ideas. Default false.
include_monthly_trend: Add each idea's searches for the last 12
months.
include_average_cpc: Add the average cost per click. Default true.
limit: Ideas on this page, 1 to 200. Default 50.
page_token: next_page_token from the call before, for the next page
of the same request.
Returns:
ideas (text, avg_monthly_searches, competition LOW/MEDIUM/HIGH,
competition_index 0-100, low_top_of_page_bid and high_top_of_page_bid
in the account's currency, average_cpc, close_variants), returned,
total_size, truncated, next_page_token, query and notes.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | ||
| limit | No | ||
| network | No | GOOGLE_SEARCH | |
| keywords | No | ||
| page_url | No | ||
| page_token | No | ||
| customer_id | Yes | ||
| language_id | No | ||
| geo_target_ids | No | ||
| include_average_cpc | No | ||
| include_monthly_trend | No | ||
| include_adult_keywords | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnlyHint/idempotentHint annotations with substantive behavior: figures are Google's 12-month estimates, avg_monthly_searches is null when volume is too low, new accounts can return ranges or nothing, and each call is a single upstream request returning one page. The rate-limit paragraph (about one keyword planning request per second per account, with requests inside that second waiting) is exactly the kind of latency behavior an agent needs and cannot get from annotations.
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?
Front-loaded: the first line states purpose and outputs, then seeding modes, then data caveats, then pagination/rate limits, with a clean Args/Returns block. Every sentence supplies information an agent would otherwise have to guess at; there is no filler or restatement of the tool name.
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 12-parameter, open-world, rate-limited tool this is complete: it covers seeding inputs, defaults, pagination, quota pacing, data-quality caveats, and account-state edge cases, and even names the return fields despite an output schema already existing. Nothing an agent needs to construct a correct call or interpret a partial result 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 carries the full burden — and it does: every one of the 12 parameters is documented with format, bounds, and defaults (customer_id numbers-only, keywords 1-20, at most 10 geo ids with a discovery pointer, language default 1000, limit 1-200 default 50, page_token sourced from next_page_token). This compensates completely for the empty 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?
Opens with a specific verb and resource ('Finds keyword ideas') plus the payload it delivers (search volume, competition, top-of-page bid range), and the seeding-modes sentence makes clear this is a discovery/generation tool. It does not explicitly contrast itself with close siblings such as get_keyword_metrics, get_keyword_forecast, or keyword_opportunities, so the differentiation is inferred rather than stated.
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 concrete selection rules among its own modes (keywords 1-20, page_url, keywords+page_url, or site alone) and a hard exclusion ('site ... Not combined with keywords or page_url'). It also warns when results may be empty (new or never-spent accounts). What it lacks is guidance on when to reach for this versus sibling keyword tools, which is exactly the ambiguity an agent faces at selection time.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_keyword_metricsGoogle Ads: keyword search volume and bidsARead-onlyIdempotentInspect
Gets Google's search volume, competition and bids for keywords as written.
For the keywords an account runs or a list the user names: up to 1,000
per call, or 200 with include_monthly_trend; a longer list is refused,
not cut. Google counts near-identical keywords (plurals, spellings)
under one row: deduped_away names each with the row it is counted under,
and not_returned names those with no figures. Figures are Google's
estimates; avg_monthly_searches is null where too few to report. A new
account, or one that has never spent, can get ranges or none. It reads
only.
Each call is one request to Google. Google accepts about one keyword
planning request per second per account, so a request within a second
of the last one for the same account waits for the rest of that second.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
keywords: The keywords, as written, 1 to 1,000.
geo_target_ids: Location ids (geo target constants), at most 10.
Default: every location.
language_id: Language id (language constant). Default 1000, English.
network: GOOGLE_SEARCH (default) or GOOGLE_SEARCH_AND_PARTNERS.
include_average_cpc: Add the average cost per click. Default true.
start_year_month: First month, YYYY-MM, with end_year_month.
Default: the last 12 months.
end_year_month: Last month, YYYY-MM.
include_monthly_trend: Add each keyword's searches month by month.
Returns:
metrics (text, avg_monthly_searches, competition, competition_index,
low_top_of_page_bid, high_top_of_page_bid, average_cpc,
close_variants), requested, returned, deduped_away, not_returned,
query and notes.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | GOOGLE_SEARCH | |
| keywords | Yes | ||
| customer_id | Yes | ||
| language_id | No | ||
| end_year_month | No | ||
| geo_target_ids | No | ||
| start_year_month | No | ||
| include_average_cpc | No | ||
| include_monthly_trend | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations that already declare read-only, idempotent, open-world behavior, the description adds important behavioral details: deduplication of near-identical keywords, rows that are not returned, null estimates when volume is too low, potential ranges or no data for new accounts, and rate limiting of roughly one request per second per account.
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 purpose and constraints, and the Args section is well organized. It is somewhat long, and the Returns section partially restates what the output schema already provides, but the length is largely justified by the tool's complexity.
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 nine-parameter tool with rate limits, deduplication behavior, and account-dependent edge cases, the description provides enough context for an agent to call it correctly. The existence of an output schema means the return-field list is not strictly required, but it is consistent and helpful.
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 carry parameter meaning. It documents all nine parameters, including customer_id format, keyword limits, geo target maximum and default, language default, network values, CPC/trend toggles, and month-range pairing.
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: it gets Google's search volume, competition, and bids for keywords 'as written'. This is clear, but it does not explicitly name sibling tools such as get_keyword_ideas or get_keyword_forecast to differentiate when this tool is the right choice.
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 usage context: it is for keywords an account runs or a list the user names, with call-size limits and the behavior when the list is too long. It does not explicitly state when to use alternative keyword-research tools instead, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_org_contextAdCopilot: what is connected and where you areAIdempotentInspect
The workspace overview a new conversation, a get-started request or an account audit begins from. Returns this workspace's AdCopilot context: which Google products are connected, the enabled Google Ads accounts (name, currency, time zone), whether campaigns and conversion tracking exist, the saved business profile, the onboarding stage, and a situation code with a suggested next_step, a playbook, and cross_reads — reads outside Google Ads with their arguments. Also returns tools_revision, the revision this connection's tool descriptions end with; given tools, returns only those tools' current descriptions and input schemas. It reads the workspace and its connected Google accounts and changes nothing in them. AdCopilot also updates its own bookkeeping for the workspace: when it was last seen, the verified account details, and the onboarding stage when it first sees a campaign switched on.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| task | No | With source "claude-scheduled": the scheduled task's opening words, up to the first comma. AdCopilot's own morning check opens "AdCopilot morning check" (or "AdCopilot morning website check"). Ignored without that source. | |
| tools | No | Tool names (at most 10) whose current description and input schema to return instead of the context. | |
| source | No | "claude-plugin" when AdCopilot's Claude plugin is in this conversation (its skills or commands, such as /setup, are available); "claude-scheduled" when a Claude scheduled task or Claude Code routine is running. Any other value is ignored. | |
| refresh | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds important behavior beyond annotations: it reads the workspace and connected Google accounts and changes nothing in them, but also updates AdCopilot's own bookkeeping (last seen time, verified account details, onboarding stage). This reconciles the `readOnlyHint: false` annotation with the read-oriented nature of the tool and discloses the actual side effect.
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 tool's purpose and primary return fields, then covers the special `tools` mode and side effects. It is dense but most sentences carry relevant information; minor redundancy and long clauses keep it from being maximally concise.
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, annotations, and complex workspace context, the description is complete: it lists returned data categories, explains the `tools` mode, and discloses the bookkeeping side effect. An agent has enough information to call it correctly for onboarding, auditing, or tool-schema lookup.
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 75%, so the schema already documents most parameters. The description adds useful semantics for `tools` — that it returns only those tools' descriptions and input schemas instead of context — but does not explain `refresh`, `source`, or `task`, which are left to the schema or 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 names a specific retrieval tool and enumerates exactly what it returns: connected Google products, Google Ads accounts, business profile, onboarding stage, situation/next_step/playbook/cross_reads, and tools_revision. It also clearly distinguishes the special `tools` mode, where descriptions and input schemas are returned instead of the workspace context. An agent can identify this as the workspace bootstrap/overview tool without opening the schema.
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 gives clear usage contexts: a new conversation, a get-started request, or an account audit. It also implies the `tools` parameter use case for checking current tool descriptions and schemas. It does not explicitly name alternatives or when not to use this tool, but the intended invocation scenarios are well signposted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_resource_metadataGoogle Ads: look up report fieldsARead-onlyIdempotentInspect
Retrieves the selectable, filterable, and sortable fields for a specific Google Ads resource.
Use this tool to find out which fields you can select, filter by, or sort by
when querying a specific resource (e.g., 'campaign', 'ad_group').
Do not guess fields, you MUST use this tool to discover them.
The responses of this tool should be cached, as they don't change frequently.
A name that is not a resource has no fields; the answer then carries a
note and valid_resources, the resource names the search tool accepts.
Args:
resource_name: The name of the Google Ads resource (e.g., 'campaign', 'ad_group').Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| resource_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, non-destructive, and closed-world, and the description adds real behavioral context beyond them: a caching recommendation because the data is stable, plus the precise degradation path for an unknown resource name (a note plus valid_resources in the response). The invalid-input behavior is exactly the kind of detail an agent cannot infer from annotations.
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 lead sentence states the outcome first, followed by usage, caching, and edge-case behavior, so it is well front-loaded. The trailing Args block largely restates the parameter already covered above, which is a small redundancy but not damaging.
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 purpose, mandatory-use guidance, caching, and the invalid-name response path. With an output schema present, return values need not be detailed, and its reference to 'the search tool' is understandable in context, though naming the sibling explicitly would close the last gap.
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 carries the burden for the single parameter, and it does: it names resource_name, supplies example values ('campaign', 'ad_group'), and explains what happens when the value is not a real resource. It does not state format/casing rules, so it is not fully compensating, but it adds substantial meaning beyond the bare 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 names a specific verb and resource: retrieves the selectable, filterable, and sortable fields for a Google Ads resource. It implicitly distinguishes itself from the sibling `search` tool by noting that the returned valid_resources are 'the resource names the search tool accepts', so an agent knows this tool discovers schema rather than executing queries.
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 gives clear context ('use this tool to find out which fields you can select, filter by, or sort by when querying a specific resource') and a strong directive against guessing field names. It stops short of an explicit when-not statement or a fully named alternative for running the actual query, but the routing intent is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_inspect_urlSearch Console: inspect URLBRead-onlyIdempotentInspect
URL Inspection: index status / coverage for a URL under a verified site.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| siteUrl | Yes | ||
| inspectionUrl | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a safe, read-only, idempotent, closed-world operation. The description adds that the site must be verified and that the result concerns index status/coverage, but it does not mention quotas, latency, or failure 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 short and front-loads the core purpose. The revision string adds little value for an agent, but the overall wording is efficient.
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 output schema and annotations cover return format and safety profile, lowering the description burden. However, with two required parameters and no schema descriptions, the missing parameter guidance leaves a meaningful gap.
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 neither required parameter is described. The description vaguely implies an inspection URL and a verified site URL, but it does not map these to siteUrl and inspectionUrl or explain expected URL formats.
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 purpose: retrieving index status/coverage for a URL under a verified site. It is clearly distinct from action-oriented siblings like gsc_request_indexing, though it does not explicitly name alternatives.
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 implies the tool is for checking index status/coverage, but gives no explicit when-to-use guidance versus gsc_request_indexing, gsc_search_analytics, or other Search Console tools. The verified-site mention is a prerequisite hint, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_list_sitemapsSearch Console: list sitemapsCRead-onlyIdempotentInspect
List submitted sitemaps for a site.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| siteUrl | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds no behavioral context such as required Search Console permissions, what 'submitted' means, or any pagination/return caveats; the revision string is internal metadata, not 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 main sentence is short and front-loaded, which is good. However, the trailing 'Tools revision: 5c9bea8f.' does not help an agent invoke the tool and slightly dilutes an otherwise clean description.
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 return values need not be described, and annotations cover the safety profile. Still, for a one-parameter Search Console listing tool, the description leaves out siteUrl format and does not route the agent away from gsc_list_sites.
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, but it only says 'for a site.' It does not clarify the expected siteUrl format, such as whether it should be a URL, a sc-domain: property, or a verified property identifier.
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 names a specific verb and resource: 'List submitted sitemaps for a site.' It clearly distinguishes this from gsc_submit_sitemap and gsc_list_sites by focusing on sitemaps rather than sites or submission actions.
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 does not explain when to use this tool versus siblings like gsc_list_sites, gsc_submit_sitemap, or gsc_inspect_url. The only usage signal is the implied 'for a site' context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_list_sitesSearch Console: list sitesARead-onlyIdempotentInspect
List the Search Console properties this Google account can reach.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds no extra behavioral context such as permission requirements, pagination, or what happens when the account has no properties, and an output schema already covers return values.
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 first sentence is tight and front-loaded. The trailing 'Tools revision: 5c9bea8f.' is versioning boilerplate that does not help an agent decide whether or how to call the tool, so not 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?
With zero parameters, rich annotations, and an output schema, almost nothing else is required for correct invocation. The only meaningful omission is framing this as the entry point that supplies the site identifier for sibling gsc_* tools.
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 tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline of 4 applies; no parameter-related gaps exist.
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?
Specific verb (list) and resource (Search Console properties) with an explicit scope: properties this Google account can reach. It is clearly distinguishable from siblings like gsc_list_sitemaps or gsc_inspect_url, though the description does not name those alternatives explicitly.
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 is only implied — an agent can infer this is the discovery step that yields the site URLs the other gsc_* tools require, but the description never states that or mentions any alternative or prerequisite. No when-not guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_request_indexingSearch Console: request indexingAIdempotentInspect
Send a URL_UPDATED notification for a URL to Google's Indexing API. Additive, never deletes.
Read before using: Google's Indexing API only acts on pages with JobPosting structured
data, or BroadcastEvent inside a VideoObject. For any other page Google accepts the
notification and does nothing with it, so this does NOT get an ordinary page crawled or
indexed. The result says only that the notification was submitted, never that indexing
will happen. For an ordinary page use internal links, an honest sitemap lastmod, fewer
low-value URLs, and the URL Inspection "Request indexing" button in Search Console
(about 10 a day, by hand). Check the page with gsc_inspect_url first.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations: it is additive and never deletes, Google may accept the notification without acting on it, and the result only confirms submission rather than indexing. These details align with the annotations rather than contradicting them.
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 core action is front-loaded, followed by critical caveats in a clearly marked 'Read before using' section. The length is justified by the important limitations, with no material repetition.
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 single-parameter tool with an output schema and annotations, the description covers the necessary caveats: applicability constraints, result semantics, alternatives for ordinary pages, and a prerequisite inspection step. An agent has enough information to decide whether and how to call it.
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?
There is one required parameter, url, and the schema description coverage is 0%. The description contextualizes it as a URL to notify, but it does not specify format, canonical requirements, or property constraints, so it only partially compensates for the missing schema 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: sending a URL_UPDATED notification for a URL to Google's Indexing API. It also distinguishes the tool from ordinary indexing expectations by explaining that it does not crawl or index ordinary pages.
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 gives explicit when-to-use and when-not-to-use guidance, limiting applicability to pages with JobPosting structured data or BroadcastEvent inside a VideoObject. It also names alternatives for ordinary pages and tells the agent to check the page with gsc_inspect_url first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_search_analyticsSearch Console: search performance reportCRead-onlyIdempotentInspect
Query Search Console performance (clicks, impressions, CTR, position) for a verified site.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| siteUrl | Yes | ||
| end_date | Yes | ||
| row_limit | No | ||
| dimensions | No | ||
| start_date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description's only extra signal is 'for a verified site', which usefully implies an ownership/auth prerequisite. It says nothing about row-limit caps, default dimensions, or response paging, so it adds just a little beyond annotations.
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 first sentence is tight and front-loaded with the core purpose. The second sentence, 'Tools revision: 5c9bea8f.', is pure noise for an invoking agent and dilutes an otherwise efficient definition.
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 return-value explanation is not required, but with 3 required and 2 optional undocumented parameters the definition leaves real gaps: date formats, dimension values, and row-limit behavior are all unspecified. For a report tool with zero schema descriptions, the description should have compensated and does not.
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% across 5 parameters, so the description carries the full burden and fails to meet it. It never explains siteUrl format, date string conventions for start_date/end_date, what values 'dimensions' accepts, or the meaning/ceiling of row_limit (default 1000). The enumerated metrics describe output, not parameters.
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 ('Query') and resource ('Search Console performance') and enumerates the metrics returned (clicks, impressions, CTR, position), so the agent knows exactly what report this produces. It doesn't explicitly contrast with adjacent siblings like gsc_inspect_url or ga4_run_report, but the GSC performance framing is distinctive enough to place it.
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?
There is no when-to-use guidance, no exclusions, and no named alternatives. The agent must infer from the name alone that this is for aggregate performance reporting rather than URL inspection or sitemap listing, and nothing states prerequisites such as needing a verified property before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_submit_sitemapSearch Console: submit sitemapBIdempotentInspect
Submit (or re-submit) a sitemap for a verified site. Additive — never deletes.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| siteUrl | Yes | ||
| feedpath | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, so 'Additive — never deletes' largely restates structured data. The genuinely new information is the verified-site requirement; nothing is said about auth scopes, failure modes, or what happens if the sitemap is malformed.
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 functional sentences, front-loaded with the action and its safety property. The trailing 'Tools revision: 5c9bea8f.' is build metadata that adds nothing for an agent and costs a sentence.
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 return values need not be explained, and annotations cover the safety profile. However, with both parameters undocumented at 0% schema coverage, the definition is not complete enough for an agent to know what to pass in each field.
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% for both parameters, so the description carries the full burden — and it explains neither. 'feedpath' in particular is non-obvious jargon (the sitemap URL or path) and 'siteUrl' format (domain vs URL-prefix property) is left unstated.
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?
Specific verb + resource (submit a sitemap) with scope (for a verified site), which clearly separates it from gsc_list_sitemaps and gsc_inspect_url. It stops short of naming a sibling or stating the output, but the action 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 phrase 'for a verified site' implies a prerequisite and '(or re-submit)' implies repeat calls are fine, but there is no explicit when-to-use vs when-to-call gsc_list_sitemaps instead, and no error guidance for an unverified property.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_create_folderGTM: create folder (staged, never published)BInspect
Create a folder STAGED in the managed AdCopilot workspace (never published).
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| container | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-destructive, non-idempotent, closed-world write, so the marginal bar is low, and the description does add substantive context they do not: the folder is staged and never published to the live container. It omits what happens on a name collision and where exactly the staged folder lives, which keeps it from a 5.
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 core constraint is front-loaded in a single dense sentence with no preamble. The trailing 'Tools revision: 5c9bea8f.' line is metadata noise that does not help an agent decide or invoke.
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 return values need not be explained, and the staging behavior is covered. However, with 0% parameter documentation and no usage guidance for a mutation tool, an agent still lacks what it needs to supply 'container' 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 description coverage is 0%, so both parameters depend entirely on the description, which says nothing about them. In particular 'container' is ambiguous — an ID, a public container ID, or a name — and the agent gets no help from either source.
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 and resource ('Create a folder') plus its scope ('STAGED in the managed AdCopilot workspace, never published'), which distinguishes it from gtm_update_folder and gtm_list_folders by effect. It stops short of explicitly naming a sibling or explaining the staged-vs-live relationship, so it is clear but not fully differentiating.
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?
There is no when-to-use guidance: nothing says when to create a folder rather than update an existing one, or that gtm_list_folders should be checked first to avoid duplicates. The only implied guidance is the staging constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_create_tagGTM: create tag (staged, never published)AInspect
Create a tag STAGED in the managed AdCopilot workspace (never published).
`firing_trigger_id` is the list of trigger ids the tag fires on (e.g. the id
returned by gtm_create_trigger); `blocking_trigger_id` suppresses it. Without
a firing trigger a tag is staged but never fires, so pass the trigger it
should run on to stage a working tag. Trigger ids are those of the
AdCopilot workspace; the built-in All Pages trigger is 2147479553.
`parameter` is Tag Manager's parameter list: entries of
{"type": "template", "key": ..., "value": "<string>"} (types: template,
integer, boolean, list, map, triggerReference, tagReference). An existing
tag of the same type, as gtm_list_tags returns it, shows the keys that type
uses.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | Yes | ||
| container | Yes | ||
| parameter | No | ||
| firing_trigger_id | No | ||
| blocking_trigger_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behavior: the tag is staged and never published, firing triggers control whether it fires, blocking triggers suppress it, and trigger ids belong to the AdCopilot workspace with the built-in All Pages id called out. This is substantial operational context for a non-read-only creation 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 front-loaded with the staged/never-published behavior and then provides useful parameter guidance. It is mostly efficient, though the trailing revision line adds noise unrelated to tool selection or invocation.
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 critical behavioral details for a staged create operation, and the output schema means return values do not need explanation. It is still incomplete around required parameter semantics and valid tag types, which matters given zero schema description coverage.
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 carry parameter meaning. It explains the complex optional fields well, especially firing_trigger_id, blocking_trigger_id, and the parameter list entry format, but it does not document the required name, type, or container parameters or provide valid tag type values.
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: creating a tag in the managed AdCopilot workspace. It also clarifies the key scope constraint that the tag is staged and never published, which distinguishes it from update and listing siblings.
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 gives clear usage context by explaining that a firing trigger is required for the staged tag to actually fire, and it names related tools for obtaining trigger ids and inspecting existing tag parameters. It stops short of explicitly contrasting this with gtm_update_tag or listing when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_create_triggerGTM: create trigger (staged, never published)AInspect
Create a trigger STAGED in the managed AdCopilot workspace (never published).
For a CUSTOM_EVENT trigger (type="customEvent"), give the dataLayer event it
fires on via `event_name` (convenience — builds the required customEventFilter
matching {{_event}} to that name) OR pass `custom_event_filter` as the raw GTM
condition list. `filter` / `auto_event_filter` carry extra firing conditions
for other trigger types; `parameter` passes trigger-type parameters through.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | Yes | ||
| filter | No | ||
| container | Yes | ||
| parameter | No | ||
| event_name | No | ||
| auto_event_filter | No | ||
| custom_event_filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=false, destructiveHint=false, and non-idempotent behavior. The description adds important behavioral context by stating the trigger is staged and never published, which materially affects what an agent should expect after creation.
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 staged/never-published constraint and then moves into parameter-specific guidance. It is mostly efficient, though the trailing revision string adds minor noise without helping invocation.
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 and annotations exist, so return values and safety traits do not need full description treatment. Still, with 8 parameters and 0% schema description coverage, the description leaves important invocation details such as container semantics and valid trigger type values incomplete.
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 has to carry parameter meaning. It explains event_name, custom_event_filter, filter, auto_event_filter, and parameter, but it leaves required fields name, container, and especially the type values underexplained, so the compensation is partial.
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 GTM trigger. It also gives the critical scope up front: the trigger is STAGED in the managed AdCopilot workspace and never published, which distinguishes it from update/list trigger siblings.
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 gives conditional guidance for CUSTOM_EVENT triggers and explains how event_name relates to custom_event_filter, which is useful inside the tool. However, it does not explicitly say when to choose this tool over gtm_update_trigger, gtm_list_triggers, or gtm_create_tag, so overall usage 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.
gtm_create_variableGTM: create variable (staged, never published)BInspect
Create a user-defined variable STAGED in the managed AdCopilot workspace (never published).
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | Yes | ||
| container | Yes | ||
| parameter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (mutating, non-idempotent, non-destructive, closed-world), and the description adds genuinely new context: the variable is created STAGED in a specific managed workspace and will never be published. That staging semantics is exactly the kind of trait annotations cannot express. It still omits permission requirements and what happens if a same-named variable exists.
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 first sentence is tight and front-loaded with the scoping distinction. The 'Tools revision: 5c9bea8f' trailer is internal metadata that does nothing for an agent selecting or invoking the tool.
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 return values need not be explained. But for a 4-parameter mutation tool with zero schema documentation, the description says nothing about the type enum space, the container identifier format, or the shape of the parameter array — the core input an agent must construct.
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% for all four parameters, so the description carries the full burden and largely fails: name, container path format, and the GTM variable 'type' taxonomy are undocumented. The parameter array (the actual variable configuration payload) is not mentioned at all, leaving an opaque untyped item collection.
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 and resource ('Create a user-defined variable') and scopes it to a staged, never-published state. 'User-defined' implicitly distinguishes it from gtm_enable_built_in_variable, though no sibling is named directly.
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?
No guidance on when to use this versus gtm_update_variable or gtm_enable_built_in_variable, and no prerequisites stated (workspace selection, container requirement). The 'never published' note hints at a staging workflow but does not tell the agent what to do next or when this is the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_enable_built_in_variableGTM: enable built-in variable (staged, never published)AIdempotentInspect
Enable a built-in variable in the managed AdCopilot workspace (staged, never published; enable-only: disabling is a delete and is intentionally not exposed).
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ||
| container | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=true, while the description adds that changes are 'staged, never published.' It also discloses that disabling is a delete and is not exposed, which is useful mutation context beyond the annotations.
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 purpose and key constraints are front-loaded in a single efficient sentence, and the parenthetical packs important behavioral details. The trailing 'Tools revision' line is minor overhead rather than essential invocation guidance.
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 output schema and annotations cover return values and safety characteristics, and the description explains the staged/enable-only side effect. However, with two required parameters having no descriptions anywhere, the definition is not fully complete 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% and neither required parameter is mentioned in the description. The agent gets no explanation of what 'container' or 'type' should contain, so the description does not compensate for the missing schema detail.
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: 'Enable a built-in variable,' scoped to the 'managed AdCopilot workspace.' It also distinguishes this from creating or listing variables by emphasizing built-in variables and enable-only behavior.
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 states the usage boundary: 'enable-only: disabling is a delete and is intentionally not exposed.' This tells the agent not to use it for disabling, but it does not explicitly route to sibling tools such as gtm_list_built_in_variables or gtm_create_variable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_list_accountsGTM: list accountsARead-onlyIdempotentInspect
List the GTM accounts this Google login can reach.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds one piece of real context — results are scoped to what the authenticated Google login can access — but says nothing about ordering, result size, or whether an empty list is possible.
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 very short sentences with the meaningful scope statement front-loaded. The trailing 'Tools revision' stamp is boilerplate but negligible in length and does not obscure the primary sentence.
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 zero-parameter read with an output schema, the description need not explain return values. What remains missing is only routing context relative to sibling listing tools, which is a minor gap given how narrow the tool's job is.
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 tool takes zero parameters, so there is nothing for the description to clarify beyond what the empty schema already communicates. Baseline 4 applies.
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 (list) and resource (GTM accounts) plus a scope qualifier — the accounts this Google login can reach — which an agent can distinguish from gtm_list_containers or ga4_list_account_summaries by name alone. It stops short of explicitly naming the nearest sibling to disambiguate at the 5 level.
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?
There is no when-to-use or when-not-to-use guidance and no reference to alternatives, even though the sibling set contains closely adjacent list tools (gtm_list_containers, gtm_list_workspaces, ga4_list_account_summaries). The agent must infer that this is the entry-point discovery call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_list_built_in_variablesGTM: list built-in variablesCRead-onlyIdempotentInspect
List the enabled built-in variables in a workspace.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and closed-world, so the safety profile is fully covered. The description adds the useful 'enabled only' scoping semantics, but says nothing about result ordering, pagination, or size limits for a list operation. With annotations carrying the safety burden, this is adequate but thin.
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 first sentence is front-loaded and efficient. The trailing 'Tools revision: 5c9bea8f.' line adds no information an agent can use for tool selection or invocation, so it dilutes rather than earns its space.
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 return values need no explanation, and annotations cover the safety profile. The remaining gap is the workspace identifier format and how to obtain one (presumably via gtm_list_workspaces), which the description does not address.
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% for the single required 'workspace' parameter, and the description says nothing about its expected form (numeric ID, resource path, or name). Since this is a 1-param tool with zero documentation anywhere, the description needed to compensate and does not.
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 ('List') and a specific resource ('enabled built-in variables') scoped to a workspace, which is clear enough to act on. It does not, however, explicitly distinguish itself from siblings like gtm_list_variables (user-defined) or gtm_enable_built_in_variable, leaving the agent to infer the built-in vs. custom split.
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?
There is no statement of when to use this instead of gtm_list_variables or gtm_enable_built_in_variable, and no prerequisite information such as needing an existing workspace. At best the word 'enabled' implies it filters out disabled variables, but that is never stated as usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_list_containersGTM: list containersARead-onlyIdempotentInspect
List containers under a GTM account (accounts/).
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| account | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this as a safe, idempotent read operation, so the description does not need to explain safety. It adds the account path context, but says nothing about pagination, result limits, or other behavior beyond the structured annotations.
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 core information is front-loaded in one short sentence with no wasted wording. The trailing tools revision line is operational noise that does not help an agent select or invoke the tool.
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?
This is a simple one-parameter read tool with rich annotations and an output schema, so the description need not explain return values. It gives enough context to identify the resource and account scope, though it could add slightly more parameter precision.
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 clarify the single required parameter. It does so partially by indicating the account is in accounts/<id> form, but it does not clarify whether the parameter expects a numeric ID, full resource path, or both.
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: list containers under a GTM account. It also gives the account path shape, which makes the scope clearer than the bare tool name. It does not explicitly name sibling list tools or explain why to choose this one over 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?
The description implies usage by saying containers are listed under a GTM account, but it does not state when to use this versus gtm_list_accounts or other GTM list tools. No prerequisites, exclusions, or alternative guidance are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_list_foldersGTM: list foldersCRead-onlyIdempotentInspect
List folders in a workspace.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered structurally. The description adds nothing beyond that: no mention of whether folders are returned flat or with parent hierarchy, no pagination behavior, no ordering.
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 core sentence is front-loaded and efficient. The trailing "Tools revision: 5c9bea8f." is a build artifact that conveys nothing actionable to an agent and dilutes an already thin description.
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 return-value structure need not be explained. For a one-parameter read-only list call that is close to sufficient, but the missing workspace identifier format is something the agent must guess before it can invoke the tool 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 description coverage is 0% for the single required parameter, so the description must carry the meaning. Saying "in a workspace" hints that `workspace` identifies the container, but it never specifies whether the value is an ID, a numeric workspace ID, a path, or a display 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 verb and resource ("List folders") scoped to a workspace, which is unambiguous. It does not name or distinguish against siblings, but the gtm_list_* siblings cover different resource types (tags, triggers, variables), so confusion risk is low.
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?
There is no guidance on when to use this versus gtm_list_workspaces or gtm_list_containers, nor on prerequisites such as needing a workspace ID from the workspace listing call. The phrase "in a workspace" implies a container but does not route the agent to how one is obtained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_list_tagsGTM: list tagsARead-onlyIdempotentInspect
List tags in a workspace (accounts//containers//workspaces/).
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safe-read profile is covered structurally. The description adds the workspace path shape but says nothing about pagination, ordering, or how far the listing reaches — modest added value given the annotation coverage.
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 core statement is one sentence and front-loaded with the verb and resource. The trailing 'Tools revision' line is boilerplate that adds no decision value but costs little.
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 return structure need not be described, and the single parameter's required format is provided. For a simple read-only listing tool the description covers what an agent needs, though the absence of any container/account traversal hint leaves a small gap.
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 sole 'workspace' parameter is an undescribed string, so the description must compensate. It does so partially by showing the required path form (accounts/<a>/containers/<c>/workspaces/<w>), which is the key detail an agent needs, but it doesn't clarify whether a bare ID is accepted or what happens with invalid paths.
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 ('List tags') and scopes it to a workspace, which distinguishes it from gtm_list_triggers, gtm_list_variables and gtm_list_workspaces by resource type. It does not explicitly contrast with those siblings, but the resource noun 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?
Usage is implied by 'List tags in a workspace' — an agent can infer it enumerates tags for a given workspace. There is no explicit guidance on when to prefer this over gtm_create_tag/gtm_update_tag, nor any stated prerequisite for obtaining the workspace path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_list_triggersGTM: list triggersCRead-onlyIdempotentInspect
List triggers in a workspace.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered elsewhere. The description adds nothing behavioral — no return shape, no pagination, no permission notes — and the revision string is noise.
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 core sentence is one line and front-loaded, with zero waste. The trailing 'Tools revision' line is irrelevant boilerplate that does not earn 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?
An output schema exists, so return values need not be described. But for a tool whose only parameter is an opaque workspace identifier and which sits among many GTM list siblings, the definition lacks the identifier format and any sibling routing needed 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 description coverage is 0%, so the description is the only place the single 'workspace' parameter could be explained, and it says nothing about the expected identifier format (GTM workspaces require account/container/workspace path). With one undocumented param, the description fails to compensate.
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 and resource ('List triggers in a workspace'), which lets an agent distinguish it from gtm_list_tags, gtm_list_variables and gtm_list_folders by resource type. It does not, however, explicitly contrast itself with those siblings.
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?
There is no guidance on when to use this list operation versus the sibling list tools, and no mention of prerequisites such as needing a container/workspace to already exist. The only extra content is a 'Tools revision' string, which is not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_list_variablesGTM: list variablesBRead-onlyIdempotentInspect
List user-defined variables in a workspace.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already fully declare the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false), so the description carries little extra burden. It adds nothing beyond that profile — no note on result count, pagination, or whether built-in variables appear in the response. The 'Tools revision' line is metadata, not 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 first sentence is front-loaded and tight, stating exactly what is listed and where. The second sentence is an internal build revision string that provides no value to an agent deciding how to call the tool, so it fails the 'every sentence earns its place' test.
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 return values need not be explained. What is missing for a single-parameter lookup tool is the workspace identifier format and any note on pagination or result limits — the two things an agent would actually get wrong.
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% for the single 'workspace' parameter, so the description must compensate and it largely doesn't. It tells the agent the call is scoped to a workspace, but not whether the value is a numeric workspace ID, a path like accounts/X/containers/Y/workspaces/Z, or a display 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?
Specific verb (List) and resource (variables) with an important scope qualifier: 'user-defined' and 'in a workspace'. The 'user-defined' qualifier is what distinguishes this from the sibling gtm_list_built_in_variables, but it does so implicitly rather than naming the sibling.
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 'user-defined' implicitly signals this is not the tool for built-in variables, and the requirement to scope to a workspace is conveyed. However there is no explicit when-to-use statement, no mention of gtm_list_built_in_variables as the counterpart, and no note about prerequisites such as needing container/workspace IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_list_version_headersGTM: list container versionsBRead-onlyIdempotentInspect
List the container's published/version history headers.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| container | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds only that it returns 'headers' (i.e., metadata rather than full version bodies), which is modest context; it says nothing about pagination, result limits, or ordering of the version history.
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 core sentence is short and front-loaded, with the purpose stated immediately. The trailing 'Tools revision: 5c9bea8f.' is internal build noise that consumes space without helping tool selection.
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 return-value details are unnecessary, and annotations fully carry the safety profile. However, for a single-parameter tool with zero schema coverage, the definition leaves the container identifier format and the discovery/usage path unexplained, which is a meaningful gap 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?
The sole required parameter 'container' has 0% schema description coverage, yet the description never explains what value to supply (container ID, path, or name) or how to obtain it from gtm_list_containers. With the schema silent, the description should compensate but does not.
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 (list) and resource (container's published/version history headers), which separates it from gtm_list_containers and gtm_list_workspaces by naming the version-history dimension. It's clear what it does, though it doesn't explicitly contrast with the sibling container-listing 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?
There is no when-to-use / when-not-to-use guidance, no mention of prerequisites (e.g., needing a container identifier first), and no named alternatives among the dozens of gtm_* siblings. The agent must infer usage from the noun phrase alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_list_workspacesGTM: list workspacesBRead-onlyIdempotentInspect
List the draft workspaces of a container (accounts//containers/).
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| container | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds one genuinely useful behavioral detail: that only draft workspaces are returned, not published versions, but says nothing about ordering, counts, or pagination.
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 functional content is one tight sentence with the scope up front. The trailing 'Tools revision: 5c9bea8f.' line is metadata noise that adds nothing for an agent.
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?
With one required parameter, a published output schema, and annotations covering safety, the description supplies everything needed to invoke the tool. Minor gaps are the missing upstream dependency on container discovery and any note on result volume.
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%, so the description must carry the parameter burden, and it does: the single required parameter is shown in its full path form accounts/<a>/containers/<c>. It stops short of saying whether a bare container ID would also work.
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 (list) and resource (draft workspaces of a container), and gives the container path shape accounts/<a>/containers/<c>. The GTM resource naming separates it from siblings like gtm_list_tags or gtm_list_containers, though it doesn't explicitly contrast with 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?
No when-to-use guidance, no stated prerequisite that a container ID must first come from gtm_list_containers, and no indication of when a caller would want draft workspaces versus published version headers (gtm_list_version_headers).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_update_folderGTM: update folder (staged, never published)BDestructiveIdempotentInspect
Rename a folder IN the managed AdCopilot workspace by folder id (staged, never published); its notes are kept.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| container | Yes | ||
| folder_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds real value beyond them: the edit is staged and never published, and existing notes survive the rename. That materially narrows what an agent fears from a 'destructive' mutation. Auth/container requirements are still unstated.
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 dense sentence with the key constraint ('staged, never published') front-loaded, plus a harmless revision tag. No filler, though the parenthetical placement slightly buries the folder-id keying.
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 return values need not be explained, and annotations cover the safety profile. Still, a three-parameter mutation with 0% schema coverage and an entirely unexplained 'container' parameter leaves a real gap the description does not close.
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% across three required parameters. The description explains folder_id and implicitly name ('Rename...'), but the 'container' parameter is never mentioned anywhere, leaving an agent to guess its purpose and valid values.
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 and resource ('Rename a folder') plus the scope ('IN the managed AdCopilot workspace') and the lookup key ('by folder id'). The only weakness is that it does not explicitly contrast with gtm_create_folder or the other gtm_update_* siblings, though the operation type 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?
'Staged, never published' tells the agent the change won't affect live GTM, which implies when this is safe to call. However, it never says when to prefer this over gtm_create_folder, what prerequisites exist (workspace/container selection, publish flow), or what to do afterward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_update_tagGTM: update tag (staged, never published)ADestructiveIdempotentInspect
Update a tag IN the managed AdCopilot workspace by tag id (staged, never published).
Only the fields passed change; the rest of the tag (its other parameters,
triggers, consent settings, firing option, folder, notes) is kept, and a
tag edited by someone else in between is refused rather than overwritten.
Each `parameter` entry replaces the tag's parameter with the same key
(the whole list when `type` changes too); trigger id lists replace the
tag's list. tag_id is the tag's id in the AdCopilot workspace
(gtm_list_workspaces shows that workspace's path).Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| type | No | ||
| tag_id | Yes | ||
| container | Yes | ||
| parameter | No | ||
| firing_trigger_id | No | ||
| blocking_trigger_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: staged and never published, partial update with all other fields preserved, optimistic concurrency ('a tag edited by someone else in between is refused rather than overwritten'), and per-key parameter replacement. These are exactly the traits an agent cannot infer from readOnly/destructive/idempotent hints.
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?
Front-loads the action, scope and staging guarantee in the first sentence, then switches to mutation semantics. Dense but every clause carries information; the parenthetical about 'the whole list when `type` changes too' is slightly hard to parse but not wasteful.
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 return values need no prose. Combined with the annotations, the description covers staging, partial-update semantics and conflict handling well; only the required 'container' parameter and any permission/scope requirements go unaddressed.
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 carries the full burden and largely does: it explains tag_id's origin, per-key replacement for 'parameter' (whole-list replacement when 'type' changes), and that trigger id lists replace the existing lists. 'name' and the required 'container' are left unexplained, which is the remaining gap.
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 and resource ('Update a tag'), the scope ('IN the managed AdCopilot workspace'), and the addressing key ('by tag id'). The resource name alone separates it from gtm_update_trigger/gtm_update_variable, though no sibling is named explicitly to route the agent.
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 is implied by 'Update a tag' plus the partial-update semantics, so an agent knows to use it for existing tags rather than gtm_create_tag. But there is no explicit when-to-use vs gtm_create_tag/gtm_list_tags statement, and it oddly points at gtm_list_workspaces for the id rather than gtm_list_tags.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_update_triggerGTM: update trigger (staged, never published)ADestructiveIdempotentInspect
Update a trigger IN the managed AdCopilot workspace by trigger id (staged, never published).
Only the fields passed change; the rest of the trigger is kept, and a
trigger edited by someone else in between is refused rather than
overwritten. Each `parameter` entry replaces the parameter with the same
key; a filter list replaces the trigger's list.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| type | No | ||
| filter | No | ||
| container | Yes | ||
| parameter | No | ||
| event_name | No | ||
| trigger_id | Yes | ||
| auto_event_filter | No | ||
| custom_event_filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true, yet the description adds material behavior the agent could not infer: edits are staged and never published, updates are partial, concurrent edits by another actor are refused rather than overwritten (optimistic concurrency), and 'parameter'/'filter' entries replace rather than append. Those are exactly the operational risks an agent needs before calling.
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 paragraphs with the operation and staging constraint front-loaded, then replacement/concurrency semantics. The trailing 'Tools revision: 5c9bea8f.' is build metadata that consumes attention without helping invocation.
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 return-shape explanation is unnecessary, and annotations carry the safety profile; the description covers staging, concurrency conflicts and field-replacement rules. The remaining gap is the undocumented bulk of the 9-parameter surface, which is left to GTM domain knowledge.
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% across 9 parameters, so the description must compensate; it does partially, explaining replace-by-key semantics for `parameter` and whole-list replacement for `filter`, plus the trigger_id lookup. It says nothing about name, type, event_name, auto_event_filter or custom_event_filter, and the relationship between `container` and the 'managed AdCopilot workspace' is left implicit.
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 and resource ('Update a trigger') plus a scope qualifier ('IN the managed AdCopilot workspace', 'by trigger id'), which cleanly separates it from gtm_create_trigger, gtm_list_triggers and the sibling updaters gtm_update_tag / gtm_update_variable. An agent can identify the operation without opening the schema.
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?
Partial-update intent is implied ('Only the fields passed change'), which tells the agent this is a patch, not a full replace. However, there is no explicit when-to-use/when-not guidance and no named alternative (e.g. gtm_create_trigger for new triggers, gtm_list_triggers to resolve the id first).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gtm_update_variableGTM: update variable (staged, never published)ADestructiveIdempotentInspect
Update a user-defined variable IN the managed AdCopilot workspace by variable id (staged, never published).
Only the fields passed change; the rest of the variable is kept, and a
variable edited by someone else in between is refused rather than
overwritten. Each `parameter` entry replaces the parameter with the same
key (the whole list when `type` changes too).Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| type | No | ||
| container | Yes | ||
| parameter | No | ||
| variable_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and idempotentHint=true, but the description adds the non-obvious behavioral context: changes are staged and never published, unspecified fields are preserved, concurrent edits are refused rather than overwritten, and parameter entries replace same-key entries. These are exactly the mutation semantics an agent needs beyond the hint flags.
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 tight sentences with the staging constraint and update model front-loaded; the only waste is the unhelpful 'Tools revision' footer. Every sentence about behavior 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?
For a destructive mutation with an output schema and rich annotations, the description covers the crucial gaps: staging, non-destructive partial updates, and optimistic concurrency. It stops short of explaining the `container` scope or what the returned value represents, but an agent has enough 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 description coverage is 0%, so the description must compensate. It does partially: it defines `variable_id` (identifier) and explains the replacement semantics of `parameter` and `type` (whole list replaced when type changes). However, `container` and `name` receive no semantic clarification, leaving half the parameters unexplained in both schema and description.
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 and resource ('Update a user-defined variable'), names the scope ('IN the managed AdCopilot workspace'), the identifier ('by variable id'), and the staging constraint ('staged, never published'). An agent can distinguish it from gtm_create_variable and gtm_list_variables without opening either schema.
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?
Implies clear usage context: modify an existing variable by id, with partial-update semantics and conflict refusal. It does not name alternatives (e.g., gtm_create_variable for new variables) or explicitly state when not to use it, which keeps it just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_opportunitiesGoogle Ads: find keyword opportunitiesBRead-onlyIdempotentInspect
Find money left on the table: search terms that convert but are not keywords, converting keywords losing impression share to rank, and existing negatives that block a converting term. Returns the add_keywords call or the negative to review. Read-only.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| detail | No | summary | |
| render | No | both | |
| customer_id | Yes | ||
| max_findings | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so 'Read-only' is redundant rather than additive. The one useful behavioral signal is the output shape guidance that the result is an actionable add_keywords call or a negative to review. Nothing is said about the lookback window semantics, cost or latency of the analysis, or whether findings are capped by default.
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 sentences, front-loaded with the value proposition and the three finding categories, with the output expectation last. The trailing 'Tools revision: 5c9bea8f.' is noise that earns no place in a tool description.
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 the description need not explain return values, and the safety profile is covered by annotations. What remains missing for a five-parameter analytical tool with no schema descriptions is any guidance on the time window, detail level, or result cap, which materially change what an agent gets back.
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 there are five parameters, yet the description says nothing about days, detail, render, max_findings, or customer_id. An agent cannot tell from the description that 'days' controls the analysis lookback (default 30) or that 'detail' toggles summary versus full findings. Only the required customer_id is guessable from the tool's domain.
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 gives a concrete verb-plus-resource ('find keyword opportunities') and enumerates three specific finding types: converting search terms not yet keywords, converting keywords losing impression share, and negatives blocking a converting term. That scope distinguishes it from analyze_search_terms and analyze_waste without naming them, though it never explicitly routes to those siblings.
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 is implied rather than stated: an agent can infer this is the diagnostic step that precedes add_keywords or negative review, since the description says it 'Returns the add_keywords call or the negative to review.' There is no explicit when-to-use, when-not-to-use, or named alternative among the many sibling analysis tools (analyze_search_terms, analyze_waste, get_keyword_ideas).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_assets_to_customerGoogle Ads: link assets to accountAInspect
Links assets at the customer (account) level so they apply to all campaigns.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
asset_resource_names: List of asset resource names to link.
field_type: The asset field type. One of: SITELINK, CALLOUT, STRUCTURED_SNIPPET,
CALL, PROMOTION, PRICE, LEAD_FORM, MOBILE_APP, BUSINESS_NAME, BUSINESS_LOGO.
Returns:
Dictionary with the created customer asset link resource names.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| field_type | Yes | ||
| customer_id | Yes | ||
| asset_resource_names | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false and openWorldHint=true, so safety is covered. The description adds the return payload (created link resource names) but omits what an agent most needs for a non-idempotent create: that re-running with the same asset creates duplicate links, and whether this requires admin-level access.
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 opening sentence front-loads purpose and scope, and the Args/Returns structure is scannable. The long field_type enumeration is long but each item earns its place since the schema lacks an enum; the trailing revision hash is noise.
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 and the description still summarizes the return value, which is enough for an agent to call it. The main missing pieces for a non-idempotent create are duplicate-handling behavior and the source of asset resource names, both of which are non-trivial in this ecosystem.
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%, so the description carries the full burden and mostly delivers: it specifies customer_id as numbers-only with no hyphens, describes asset_resource_names as a list of resource names, and enumerates all ten valid field_type values — information absent from the schema (field_type is a bare string with no enum). It stops short of saying where resource names come from.
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 and resource ('Links assets at the customer (account) level') plus the scope effect ('apply to all campaigns'). That scope clause cleanly separates it from the sibling tools link_asset_to_campaign and link_asset_to_ad_group without needing to name 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?
The 'applies to all campaigns' clause gives an implicit routing cue, but the description never explicitly says when to choose this over link_asset_to_campaign / link_asset_to_ad_group, nor does it state prerequisites (assets must already exist via the create_*_asset tools). Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_asset_to_ad_groupGoogle Ads: link asset to ad groupAInspect
Links an existing asset to an ad group.
After creating an asset (sitelink, callout, etc.), use this tool to
attach it to an ad group so it appears with that ad group's ads.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
ad_group_id: The ID of the ad group to link the asset to.
asset_resource_name: The resource name of the asset (from create_*_asset tools).
field_type: The asset field type. One of: SITELINK, CALLOUT, STRUCTURED_SNIPPET,
CALL, PROMOTION, PRICE, LEAD_FORM, MOBILE_APP, HOTEL_CALLOUT,
AD_IMAGE. An image on a Search ad group is AD_IMAGE (Google
requires an eligible account).
Returns:
Dictionary with the created ad group asset link resource name.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| field_type | Yes | ||
| ad_group_id | Yes | ||
| customer_id | Yes | ||
| asset_resource_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, idempotent=false, destructive=false, openWorld=true, so safety is covered. The description adds real value beyond that: the prerequisite that the asset must already exist and the resource name comes from create_*_asset tools, plus the account-eligibility caveat for AD_IMAGE. It omits what happens on a duplicate link (relevant given idempotentHint=false).
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?
Front-loaded with the action, then workflow context, then a well-structured Args block. Minor redundancy: the first sentence already states the link, and the second paragraph restates "attach it to an ad group," though it earns its place by adding the ordering constraint.
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?
Output schema exists, so the Returns line is a small bonus rather than a necessity. For a four-parameter mutation, the description covers preconditions, parameter formats, and the tricky field_type enumeration. It could still mention duplicate-link behavior or required permissions, but nothing essential to calling it correctly 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% (all four properties have only titles), so the description carries the full burden and does: format constraint ("numbers only, no hyphens") for customer_id, semantics for ad_group_id, provenance for asset_resource_name, and a full enumerated list of valid field_type values with an eligibility note for AD_IMAGE.
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 and resource ("Links an existing asset to an ad group") and scopes it further with the second sentence explaining the effect (asset appears with that ad group's ads). The ad-group target distinguishes it from the sibling scope variants link_asset_to_campaign and link_assets_to_customer.
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?
Explicitly states the precondition and workflow position: "After creating an asset (sitelink, callout, etc.), use this tool to attach it to an ad group." It does not, however, name the sibling alternatives (campaign-level or customer-level linking) or say when to choose them, leaving that routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_asset_to_campaignGoogle Ads: link asset to campaignAInspect
Links an existing asset to a campaign.
After creating an asset (sitelink, callout, etc.), use this tool to
attach it to a campaign so it appears with that campaign's ads.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
campaign_id: The ID of the campaign to link the asset to.
asset_resource_name: The resource name of the asset (from create_*_asset tools).
field_type: The asset field type. One of: SITELINK, CALLOUT, STRUCTURED_SNIPPET,
CALL, PROMOTION, PRICE, LEAD_FORM, MOBILE_APP, HOTEL_CALLOUT,
BUSINESS_NAME, BUSINESS_LOGO, AD_IMAGE. For an image on a Search
campaign use AD_IMAGE (Google requires an eligible account) or
BUSINESS_LOGO; Performance Max images go through
add_assets_to_asset_group instead.
Returns:
Dictionary with the created campaign asset link resource name.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| field_type | Yes | ||
| campaign_id | Yes | ||
| customer_id | Yes | ||
| asset_resource_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), so the description only needs to add beyond that. It does add useful context — the AD_IMAGE eligibility caveat and the Performance Max routing — but it never warns about the practical consequence of idempotentHint=false (repeated calls likely create duplicate links) nor about error behavior for mismatched customer/asset.
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?
Front-loaded with the one-line purpose before the Args block, and every arg entry carries information. Minor waste in the trailing "Tools revision: 5c9bea8f." artifact and a Returns section that duplicates the output schema.
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 four-required-parameter mutation with annotations and an output schema, the description covers the decision an agent actually needs to make (which field_type, and when to use a different tool instead). Gaps are minor: duplicate-link behavior and cross-customer/asset validation are unaddressed, but the output schema and annotations absorb the rest.
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%, so the description carries the full burden and does so well: customer_id format ("numbers only, no hyphens"), campaign_id purpose, asset_resource_name provenance ("from create_*_asset tools"), and critically the full enumerated list of field_type values, which the schema leaves as an unconstrained string. It stops short of explaining what a resource name looks like syntactically.
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 and resource ("links an existing asset to a campaign") and immediately distinguishes itself from the create_* family by requiring a pre-existing asset. The name plus the description leaves no ambiguity versus siblings like link_asset_to_ad_group, link_assets_to_customer, or add_assets_to_asset_group.
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 a clear workflow precondition ("After creating an asset... use this tool to attach it") and names an explicit alternative route for the Performance Max case (add_assets_to_asset_group). It does not spell out how it differs from link_asset_to_ad_group or link_assets_to_customer, so the agent still has to infer the level-selection logic from names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accessible_customersGoogle Ads: list accessible accountsARead-onlyIdempotentInspect
Returns ids of customers directly accessible by the user authenticating the call.
In AdCopilot, get_org_context returns the connected accounts together with
the business profile and what to do next.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, non-destructive, and closed-world traits. The description adds a genuine behavioral nuance the annotations lack: it returns only *directly* accessible customers, not manager-nested ones, which affects result interpretation. Return shape is left to the output schema.
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 the core behavior front-loaded. The trailing 'Tools revision' line is scaffolding noise that adds nothing for tool selection.
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?
A simple zero-arg read tool with full annotations and an existing output schema needs little prose; the definition covers scope and the sibling alternative. Nothing essential to correct invocation is missing, though auth-scope nuances (manager accounts) are only lightly implied.
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?
Zero parameters, so there is nothing to disambiguate; the schema is trivially complete. Baseline of 4 applies since the description has no parameter semantics to add.
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 and resource ('Returns ids of customers directly accessible') with the key scope qualifier 'directly accessible by the user authenticating the call.' It also names the sibling (get_org_context) that serves the adjacent need, so an agent can distinguish them without opening 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?
Explicitly routes the agent to get_org_context when connected accounts plus business profile and next steps are wanted, implying this tool is the bare-ID lookup. No explicit 'when not to use' beyond that single alternative, and it doesn't mention account-hierarchy edge cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_asset_linksGoogle Ads: list asset linksARead-onlyIdempotentInspect
Lists every asset link in an account — account, campaign and ad group.
One call answers "which phone numbers, sitelinks, callouts... are on, and
where?": each link comes back with its level, field type, status (what
the advertiser set: ENABLED or PAUSED), primary status (whether Google is
actually serving it), the asset's ID, type and text, the campaign / ad
group it sits on, and the tool and arguments that pause or re-enable it.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
field_type: Only links of this field type, e.g. CALL. Optional.
include_removed: Also return REMOVED links (deleted earlier, e.g. in
the Google Ads UI; they no longer serve and cannot be changed
here). Defaults to False.
Returns:
Dictionary with the links, and counts of links by status.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| field_type | No | ||
| customer_id | Yes | ||
| include_removed | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds material context beyond them: the distinction between advertiser-set status and Google's primary status, and the fact that REMOVED links no longer serve and cannot be changed here. That is exactly the kind of behavioral nuance annotations cannot carry.
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?
Front-loaded with the one-line scope statement, then the useful payload summary, then per-arg notes. It is on the longer side and the Args/Returns block partly restates the schema structure, but each clause carries information an agent needs.
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 read-only list tool with an output schema and three parameters, the description covers scope, return contents, status semantics, and edge cases (removed links). Nothing an agent needs to call it correctly 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 coverage is 0%, so the description must carry the load and does: customer_id format (numbers only, no hyphens), field_type semantics with an example (CALL), and include_removed semantics including why a removed link matters. All three parameters gain meaning beyond the bare 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?
Opens with a specific verb+resource+scope: 'Lists every asset link in an account — account, campaign and ad group.' The scope statement distinguishes it from the write-side siblings (link_asset_to_campaign, set_campaign_asset_status), so an agent can tell what it does without opening the schema.
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 a concrete usage framing ('One call answers which phone numbers, sitelinks, callouts... are on, and where?') and implies the pause/re-enable path by returning 'the tool and arguments that pause or re-enable it.' It stops short of naming a specific sibling alternative or stating when not to use it, so it is clear context rather than explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_audiencesGoogle Ads: list audiencesARead-onlyIdempotentInspect
Lists the account's audiences and where its campaigns use them.
Returns the audience lists (open or closed, size range, whether each is
eligible for Search and Display, match rate for customer lists), custom
and combined audiences, and for each enabled or paused campaign its
audience setting (OBSERVATION, TARGETING or NOT_SET) and the audiences
attached at campaign or ad group level, with clicks, conversions and
cost. An ad group audience also carries its ad group's own setting,
which Google allows only when the campaign has none. In-market and
affinity segments are listed only for a name search. It reads only.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
campaign_id: Only this campaign's audiences. Optional; the account's
lists are returned either way.
start_date: First day of the clicks and cost (YYYY-MM-DD). Optional;
with end_date. Default: the last 30 days.
end_date: Last day of the clicks and cost (YYYY-MM-DD). Optional.
segments: IN_MARKET or AFFINITY, to search Google's segment
catalogue by name (with name_contains). Optional.
name_contains: Text the segment names contain, e.g. "travel"
(2 to 60 letters, digits, spaces or & , -); at most 50 segments
come back. Required with segments.
Returns:
Dictionary with user_lists, custom_audiences, combined_audiences,
campaigns (audience_mode, level, audiences with metrics and, at ad
group level, the ad group's audience_mode), segments when searched,
date_range and notes.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ||
| segments | No | ||
| start_date | No | ||
| campaign_id | No | ||
| customer_id | Yes | ||
| name_contains | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses real behavioral traits: the 30-day default window, the 50-segment result cap, the 2–60 character and character-set constraint on name_contains, and the conditional rule that ad group audiences carry their own setting only when the campaign has none. It also flags which data is conditional on a name search. This is behavioral context annotations cannot express.
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 summary is front-loaded and the Args/Returns structure is easy to scan, with nearly every clause carrying a constraint or default. Minor waste: 'It reads only' restates readOnlyHint, and the Returns block partly duplicates the existing output schema. Length is justified by the six undocumented parameters, but it could trim slightly.
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?
With six parameters at 0% schema coverage, a complex nested return, and an output schema in place, this description supplies exactly what's missing: parameter formats, defaults, preconditions, caps, and conditional-result rules. Nothing an agent needs to call it correctly and interpret the response is absent.
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 carry the load, and it does for all six parameters: customer_id format ('numbers only, no hyphens'), start/end date format and pairing/default, campaign_id's non-restrictive effect on account lists, and the segments/name_contains pairing including the valid values IN_MARKET/AFFINITY. It adds syntax and constraints the schema does not encode.
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 ('Lists the account's audiences') plus scope ('where its campaigns use them'), and the body enumerates exactly which audience types come back. No sibling tool in the list covers audience inventory, and the description makes that boundary unambiguous. An agent can tell what it returns without opening the schema.
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 gives concrete operating guidance: campaign_id narrows to one campaign but account lists still return, dates default to the last 30 days, and 'In-market and affinity segments are listed only for a name search' establishes a precondition for the segments path. What's missing is an explicit statement of when to reach for this versus alternatives (e.g. search or list_asset_links), so usage is clear but not fully disambiguated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_auto_apply_subscriptionsGoogle Ads: list auto-apply recommendation settingsARead-onlyIdempotentInspect
Lists the account's auto-apply recommendation subscriptions.
An ENABLED subscription lets Google apply that type of recommendation to
the account without asking. The Google Ads API covers only some of the
types the Google Ads UI can auto-apply: the answer names the rest in
ui_only_types, and only the Google Ads UI can see or change those. Never
tell the user auto-apply is fully off on the strength of this list alone.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
Returns:
Dictionary with subscriptions (type, ui_label, status, dates),
enabled_types, api_subscribable_types, ui_only_types and
coverage_note.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, yet the description adds substantially more: the meaning of ENABLED ('Google applies that type without asking'), the API coverage gap versus the UI, the existence of ui_only_types, and an explicit caution about over-interpreting the result. That is exactly the behavioral context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then the semantics, then the caution — good ordering with no filler sentences. The 'Returns:' block partly duplicates the existing output schema, a minor redundancy, and the paragraphing is a touch heavy for a single-parameter list tool.
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 one-parameter read tool with annotations and an output schema, the description supplies everything an agent needs: what it returns conceptually, the API/UI coverage caveat, and how to safely phrase findings to the user. Nothing material 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 carry the burden — and it does, specifying that customer_id is 'numbers only, no hyphens'. That is the one formatting trap for this parameter. It could go further (e.g., that it must be an accessible customer, use list_accessible_customers to find it), but the critical detail is 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?
States a specific verb and resource ('Lists the account's auto-apply recommendation subscriptions') and immediately defines what a subscription means in this domain, so the agent knows this is a read of recommendation auto-apply settings rather than a general recommendations list. It does not explicitly distinguish itself from the sibling pause_auto_apply_subscription, but the read/mutate split is self-evident from the verb.
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?
Provides real usage context: it warns that this list alone cannot prove auto-apply is fully off and that ui_only_types exist only in the UI, which is precisely the kind of guidance that prevents a wrong conclusion. It stops short of naming alternatives or stating prerequisites (e.g., which auth/scope is needed), so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recommendationsGoogle Ads: list Google Ads RecommendationsARead-onlyIdempotentInspect
Lists the account's open Google Ads Recommendations.
Each comes with Google's description of its type, the settings it would
change (current and proposed values), Google's own estimate of its
effect when Google gives one, and how the change is made: a tool of this
server with its arguments filled in, or the Recommendations page in
Google Ads. It reads only; it applies and dismisses nothing. Google can
replace or withdraw a recommendation within the day.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
campaign_id: Only the recommendations for this campaign. Optional.
types: Only these recommendation types, as Google Ads API names
(e.g. KEYWORD, CAMPAIGN_BUDGET, SEARCH_PARTNERS_OPT_IN). Optional.
include_dismissed: Also list recommendations dismissed in Google Ads.
Default false.
limit: The most recommendations to return, 1 to 200. Default 50.
Returns:
Dictionary with recommendations (id, type, google_label, campaign,
ad_group, changes, google_estimate, action), total, counts_by_type,
optimization_score and note.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| types | No | ||
| campaign_id | No | ||
| customer_id | Yes | ||
| include_dismissed | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already give readOnly/idempotent/non-destructive, but the description adds genuinely new behavioral context: it explicitly applies and dismisses nothing, and warns that Google may replace or withdraw a recommendation within the day, which affects caching and re-listing expectations. It does not discuss rate limits or error modes, so a 4 rather than 5.
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?
Front-loaded purpose sentence, then param and return detail in labeled blocks; every line is useful. The Returns block partially duplicates the existing output schema, which is the only real slack.
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 read-only listing tool with five parameters and an output schema, the description covers purpose, filtering semantics, volatility of the data source, and non-mutation guarantee. Nothing an agent needs in order to invoke it correctly 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 carry all five parameters — and it does: customer_id format ('numbers only, no hyphens'), campaign_id scope, types as Google Ads API names with concrete examples (KEYWORD, CAMPAIGN_BUDGET, SEARCH_PARTNERS_OPT_IN), include_dismissed semantics, and limit bounds with default. This is meaning the schema alone does not supply.
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?
Opens with a specific verb and resource: 'Lists the account's open Google Ads Recommendations.' No sibling tool covers recommendations, and the description further specifies what each item contains, so an agent can characterize the payload without opening the schema.
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?
Scope and constraints are clear (open recommendations by default, optional dismissed inclusion, campaign and type filtering), and 'It reads only; it applies and dismisses nothing' sets expectations for what this tool cannot do. It stops short of naming a concrete alternative tool for acting on a recommendation, so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lsa_leadsGoogle Ads: Local Services leadsBRead-onlyIdempotentInspect
List Local Services Ads leads: counts by type, status, charge, credit and rating, the newest leads with their conversation counts, and the business's licence and insurance verification. Contact details and call recordings come only with include_contact. Dates are YYYY-MM-DD; omit both for 30 days. Read-only.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | summary | |
| render | No | both | |
| end_date | No | ||
| lead_type | No | ||
| start_date | No | ||
| customer_id | Yes | ||
| include_contact | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior, so the bar is lower. The description adds meaningful context by gating contact details and call recordings behind include_contact and stating the date default, though it does not discuss pagination or limits.
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 substantive content is front-loaded and efficient, covering output scope and key invocation constraints in two sentences. The trailing 'Tools revision' line adds no value and slightly dilutes 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?
An output schema exists and annotations cover the safety profile, so the description need not explain return values in depth. Still, the lack of explanation for several non-obvious parameters such as detail and render leaves gaps 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% for seven parameters, so the description must compensate. It explains include_contact and date formatting/defaults, and implies lead_type through 'counts by type,' but leaves detail, render, and customer_id semantics 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?
Starts with a specific verb and resource: 'List Local Services Ads leads,' and enumerates the returned lead data. It is clearly distinct from most siblings, though it does not explicitly differentiate itself from lsa_rate_lead.
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 useful invocation context: contact details and call recordings require include_contact, and omitting dates defaults to 30 days. However, it does not explain when to use this tool versus lsa_rate_lead or other lead-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lsa_rate_leadGoogle Ads: rate a Local Services leadADestructiveInspect
Rate one Local Services lead: survey_answer and a matching reason (none for NEUTRAL; OTHER needs other_reason_text). A rating is final; where Google offers lead credits (not EMEA, health care or tax) it returns a bonus-credit decision. Rate only from the customer's own words; never mark a real lead SPAM or DUPLICATE to get a credit.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | ||
| lead_id | Yes | ||
| customer_id | Yes | ||
| survey_answer | Yes | ||
| other_reason_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructive/non-idempotent, and the description goes further: "A rating is final" explains irreversibility, and it discloses the bonus-credit decision returned in eligible regions while excluding EMEA, health care and tax. That is real behavioral context beyond the structured hints.
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 tight sentences, front-loaded with the action and the input pairing rule, followed by the irreversibility note and the safety constraint. The parenthetical region exclusions are dense but each 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?
Covers the mutation semantics, irreversibility, conditional parameter rules and the credit-decision outcome that the output schema returns. Minor gap: no statement about what happens if a lead was already rated or what errors look like, though "a rating is final" plus non-idempotent annotations implies the risk.
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%, so the description must compensate, and it does for the enum-driven fields (survey_answer, reason, other_reason_text) by stating the pairing rules. customer_id and lead_id are left uninterpreted, though their names are self-explanatory, so not a full 5.
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 and resource ("Rate one Local Services lead") and immediately names the primary inputs, so the agent knows this writes a rating rather than reading leads, distinguishing it from lsa_leads. No ambiguity about what the tool does.
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 concrete conditional rules: a matching reason, none for NEUTRAL, other_reason_text when OTHER, plus a hard policy constraint ("Rate only from the customer's own words; never mark a real lead SPAM or DUPLICATE to get a credit"). It does not explicitly name a sibling or say when not to rate at all, which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
paid_vs_organicGoogle Ads and Search Console: paid vs organic search termsARead-onlyIdempotentInspect
Compare what this account pays for in Google Ads search with what its Search Console site ranks for, over the same dates: paid terms ranking top three, queries with no Google Ads search term found, and paid terms with no organic ranking, with cost, clicks and position. Identical wording only. Read-only; needs Search Console.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| detail | No | summary | |
| render | No | both | |
| site_url | 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?
Annotations already cover read-only, idempotent, non-destructive and the closed-world hint, so the description earns credit for adding non-obvious behavior: matching is "identical wording only" (a major semantic caveat), both sources are aligned over the same date window, and a Search Console property is required. It does not mention limits on result size or how unmatched terms are resolved, which keeps it short of a 5.
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?
One compact sentence plus two short clauses, front-loaded with the core comparison and the three output buckets. The trailing "Tools revision" string is noise, but the substantive text is dense with 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?
An output schema exists, so return values need no explanation, and the description sufficiently frames the comparison semantics. However, for a 5-parameter cross-source tool with 0% schema coverage, the unexplained site_url, days and detail parameters leave real gaps an agent must guess at.
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 5 undocumented parameters. It only vaguely gestures at the date window ("over the same dates"); it says nothing about days, the detail/ summary granularity, the render format, or — most importantly — that site_url selects the Search Console property to compare against.
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 (compare) and two named resources (Google Ads paid search terms vs Search Console organic rankings), then enumerates the three output categories it produces. This clearly differentiates it from siblings like analyze_search_terms or gsc_search_analytics, which operate on only one data source.
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 prerequisite "needs Search Console" and "over the same dates" imply the conditions for use, but no alternative tool is named and no exclusion is stated (e.g., when a plain Ads-only or GSC-only report suffices). Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_auto_apply_subscriptionGoogle Ads: pause an auto-apply recommendation typeADestructiveIdempotentInspect
Pauses one auto-apply recommendation subscription.
Stops Google applying that type of recommendation to the account
unattended. It only pauses: it cannot enable, create or remove a
subscription. Pausing an already-paused subscription changes nothing. A
type the account has no subscription for is reported, not created. Only
the types in list_auto_apply_subscriptions' api_subscribable_types can be
paused here; the ui_only_types can only be changed in the Google Ads UI.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
recommendation_type: The subscription's type, as listed by
list_auto_apply_subscriptions, e.g. SEARCH_PARTNERS_OPT_IN or
USE_BROAD_MATCH_KEYWORD.
Returns:
Dictionary with recommendation_type, previous_status, status,
changed, message and the subscription's resource_name when one
exists.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | ||
| recommendation_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond annotations: clarifies that it only pauses (no enable/create/remove), describes idempotency specifically ('pausing an already-paused subscription changes nothing'), and explains that missing subscriptions are reported not created. However, there is mild tension with destructiveHint=true since the tool explicitly cannot remove data, though pausing is still a mutation.
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?
Well-structured with clear Args and Returns sections, and front-loads the core purpose. Slightly verbose because the Returns section is redundant given the output schema exists, but overall efficient and all content is relevant.
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 (mutation with type restrictions), the description covers purpose, usage constraints, edge cases, parameter semantics, and return values. Annotations cover the safety profile and output schema exists, so this is complete 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 coverage is 0%, so the description must compensate. It provides crucial details: customer_id must be numbers only without hyphens; recommendation_type must come from list_auto_apply_subscriptions and includes examples (e.g., SEARCH_PARTNERS_OPT_IN). This fully documents both parameters beyond the bare 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?
States a specific verb ('pauses') and resource ('auto-apply recommendation subscription'), and explicitly distinguishes itself from siblings by naming list_auto_apply_subscriptions and clarifying that it only pauses (cannot enable, create, or remove). An agent can identify its role without opening the schema.
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?
Provides explicit when-to-use guidance: only types from list_auto_apply_subscriptions' api_subscribable_types can be paused; ui_only_types must be changed in the Google Ads UI. Also covers edge cases (already-paused changes nothing, no subscription reported not created). This leaves little ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quality_score_breakdownGoogle Ads: Quality Score breakdownARead-onlyIdempotentInspect
Break Quality Score down into its three components — expected CTR, ad relevance, landing-page experience — weighted by impressions, with the worst-scoring high-spend keywords named. Says which component is dragging the account down. Read-only.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| detail | No | summary | |
| render | No | both | |
| group_by | No | account | |
| customer_id | Yes | ||
| max_findings | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and closed-world behavior. The description adds meaningful analytical context: components are impression-weighted and the output names worst-scoring high-spend keywords, which goes beyond the safety annotations.
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 tight sentences, front-loaded with the core operation and component list, followed by the analytical payoff. No wasted words.
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 purpose and analytical behavior are well covered, and the output schema handles return values. However, six parameters at 0% coverage are entirely unaddressed, so the agent lacks guidance on scoping, grouping, and detail level.
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?
There are six parameters with 0% schema description coverage, and the description mentions none of them. It does not explain days, detail, render, group_by, max_findings, or customer_id semantics, leaving the agent to infer behavior from enum values and defaults alone.
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 names the specific resource (Quality Score) and the exact operation (break down into expected CTR, ad relevance, landing-page experience), and adds impression weighting plus worst high-spend keyword identification. This clearly distinguishes it from siblings like account_health_score, full_audit, and bidding_audit.
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 implies diagnostic usage by saying it identifies which component is dragging the account down, but it never states when to choose this over account_health_score, full_audit, or bidding_audit. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_account_negativesGoogle Ads: remove account-level negative keywordsADestructiveIdempotentInspect
Takes account-level negative keywords back out.
The inverse of add_account_negatives: pass the same text and match
type. Every campaign in the account can show for those searches again
at once, running ones included, which can raise what they spend. Only
keywords are taken out of the account-level list; the list and its link
to the account stay, even when it is left empty. An account with no
account-level list has nothing to take out: every keyword is reported
in not_found and nothing is created or sent.
Text is matched ignoring case and extra spaces, and the match type must
match too. A keyword the list does not hold is reported in not_found
and nothing is done for it.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
keywords: List of keyword objects, each with:
- text: The keyword text (e.g., "free").
- match_type: One of: EXACT, PHRASE, BROAD. Default: BROAD,
as in add_account_negatives.
Returns:
Dictionary with the account-level list's shared_set_id (null when
the account has none), removed (text, match_type and resource_name
of each keyword taken out), not_found and keywords_removed.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | 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?
The annotations already mark this as destructive but idempotent. The description adds the key behavioral consequences: every campaign can show for those searches again, spend may rise, only keywords are removed, and the account-level list and its link remain.
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 action and its main warning, then structured into Args and Returns. It is somewhat long, but most detail is necessary because the schema provides no parameter descriptions.
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 destructive, idempotent Google Ads mutation, the description covers effects, edge cases, matching behavior, parameter details, and return values. An output schema exists, but the description still gives useful return context without relying on it alone.
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 carries the full parameter burden. It documents customer_id formatting, the keywords list structure, text fields, match_type values, and the BROAD 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 states a specific verb and resource: taking account-level negative keywords back out. It explicitly frames itself as the inverse of add_account_negatives, making the scope and sibling distinction clear.
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 explains exactly when this tool applies: pass the same text and match type used when adding. It also covers edge cases, including accounts with no account-level list and keywords not present in the list, so the agent knows when removal is a no-op.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_from_negative_keyword_listGoogle Ads: remove from negative keyword listADestructiveIdempotentInspect
Takes negative keywords back out of a shared negative keyword list.
The inverse of add_to_negative_keyword_list (and of the keywords
create_negative_keyword_list was given): pass the same text and match
type. Every campaign the list is attached to can show for those
searches again at once, which can raise what a running campaign spends.
Only a list of type NEGATIVE_KEYWORDS is accepted; the account-level
list is changed with remove_account_negatives. The list itself, and its
links to campaigns, are never removed.
Text is matched ignoring case and extra spaces, and the match type must
match too. A keyword the list does not hold is reported in not_found
and nothing is done for it; when none is found, nothing is sent.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
shared_set_id: The ID of the negative keyword list (digits only).
keywords: List of keyword objects, each with:
- text: The keyword text (e.g., "jobs").
- match_type: One of: EXACT, PHRASE, BROAD. Default: BROAD,
as in add_to_negative_keyword_list.
Returns:
Dictionary with removed (text, match_type and resource_name of each
keyword taken out), not_found (each keyword the list did not hold)
and keywords_removed.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | Yes | ||
| customer_id | Yes | ||
| shared_set_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructive, idempotent, non-readonly), the description discloses real consequences: spend can rise across every attached campaign, the list and its campaign links are never removed, and non-matching keywords are surfaced in not_found with nothing sent when none match. This adds substantive behavior the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, then constraints, then args/returns; on the whole tight. A couple of repeated parenthetical references to add_to_negative_keyword_list are slightly redundant but not wasteful.
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 mutation tool with 3 required params at 0% schema coverage, the description covers identity/purpose, side effects, preconditions, matching semantics, error handling, and even return fields. Nothing an agent needs to invoke it 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 coverage is 0%, so the description carries the full burden and does: customer_id is digits-only without hyphens, shared_set_id is digits-only, and each keyword needs text plus a match_type enum (EXACT/PHRASE/BROAD, default BROAD) plus the case/whitespace-and-match-type matching rule. Value is strong; only the keyword object shape (schema uses free-form additionalProperties) is not fully pinned down.
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+resource ('Takes negative keywords back out of a shared negative keyword list') and explicitly names what it is the inverse of and what it is not (remove_account_negatives), so an agent can position it against siblings like add_to_negative_keyword_list and remove_negative_keywords without reading 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?
Explicitly routes the agent: use this for a NEGATIVE_KEYWORDS shared list, use remove_account_negatives for the account-level list, and pass the same text/match_type as add_to_negative_keyword_list. Both the when and the when-not are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_negative_keywordsGoogle Ads: remove negative keywordsADestructiveIdempotentInspect
Takes negative keywords back out of a campaign.
The inverse of add_negative_keywords: pass the same keywords (text and
match type). The campaign can show for those searches again at once,
which can raise what a running campaign spends. Only the campaign's
negative keywords are looked at: a keyword it bids on, an excluded
location or any other setting is never changed.
Text is matched ignoring case and extra spaces, and the match type must
match too. A keyword the campaign does not have as a negative is
reported in not_found and nothing is done for it; when none is found,
nothing is sent.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
campaign_id: The ID of the campaign (digits only).
keywords: List of keyword objects, each with:
- text: The keyword text (e.g., "free LMS").
- match_type: One of: EXACT, PHRASE, BROAD. Default: BROAD,
as in add_negative_keywords.
Returns:
Dictionary with removed (text, match_type and resource_name of each
negative keyword taken out), not_found (each keyword the campaign
did not have) and keywords_removed.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | 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?
Adds substantial behavior beyond annotations: removal can immediately raise spend, matching is case/space-insensitive and match-type-sensitive, unmatched keywords are reported in not_found, and no request is sent if none match. These details make the destructive and idempotent annotation hints actionable.
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?
Front-loads purpose, then uses clear Args/Returns structure. Despite its length, each section serves parameter clarification or mutation 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 destructive partial-failure mutation, it covers scope, side effects, matching rules, not_found handling, and return fields. With annotations and an output schema also present, an agent has enough information to invoke 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 fully documents all three parameters: customer_id format, campaign_id digits-only, and keywords objects with text plus match_type enum/default. This compensates for the absent 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?
States a specific mutation ('Takes negative keywords back out of a campaign') and identifies itself as the inverse of add_negative_keywords. It also scopes the operation to campaign negative keywords and explicitly excludes bid keywords, excluded locations, and other settings, making it distinguishable from broader removal 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?
Frames typical use as undoing add_negative_keywords by passing the same text and match type, and warns about spend impact. It clearly scopes to campaign negatives, but does not explicitly route the agent to remove_from_negative_keyword_list or remove_account_negatives instead, leaving that alternative selection partly inferential.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rsa_asset_reportGoogle Ads: responsive search ad asset reportARead-onlyIdempotentInspect
Report every responsive-search-ad headline and description with Google's BEST / GOOD / LOW label, plus ad strength, headline and description counts, pinning, and how recently the ad group's creative was last changed. Proposes a replacement ad that keeps the winners and drops the losers. campaign_id (digits) narrows it to one campaign. Read-only.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| detail | No | summary | |
| render | No | both | |
| campaign_id | No | ||
| customer_id | Yes | ||
| max_findings | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and non-destructive behavior. The description adds useful context beyond annotations by explaining the report contents and clarifying that it merely proposes a replacement ad rather than applying changes.
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-loads the main reporting capability. The final revision line and the repeated 'Read-only' note add little for tool selection, but the core content is efficiently structured.
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?
With an output schema and strong annotations, the description does not need to explain return formatting. However, for a six-parameter report tool with zero schema descriptions, it omits how days, detail, render, and max_findings affect the report, leaving some operational gaps.
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 all six parameters. It only explains campaign_id as digits that narrows to one campaign; days, detail, render, customer_id, and max_findings are left to the schema titles/defaults without added semantic guidance.
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: reporting responsive-search-ad headlines and descriptions with Google labels, ad strength, counts, pinning, and recency. It is clearly distinguishable from creation and general audit siblings because it focuses on RSA asset-level reporting and replacement proposal.
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 makes the reporting use case clear and notes that campaign_id narrows scope, but it does not explicitly say when to choose this tool over alternatives such as full_audit, quality_score_breakdown, list_recommendations, or create_responsive_search_ad. Usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_org_contextAdCopilot: save business notes and progressADestructiveInspect
Stores what the user has said about their business, the onboarding stage reached, an optional decision record, an optional routine, and a note about this session, so a later conversation can continue from it. Partial merge — fields not sent are left unchanged; a field that is sent replaces its saved value, and the earlier value is not kept. stage accepts one of: new, profile, first_read, first_build, first_enable, routine, done. Some profile fields are server-owned (what is verified, what was activated, the decision log) and are not writable here; the first campaign is recorded by the server when it is built. A routine with a daily entry signs the workspace up for AdCopilot's emailed daily check-in. Returns saved, refused and warnings describing what the server did with the request.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | No | ||
| stage | No | ||
| routine | No | ||
| decision | No | ||
| session_note | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it explains partial-merge semantics, that a sent field replaces its saved value with no history kept (matching destructiveHint=true), which profile fields are server-owned and unwritable, that a daily routine enrolls the workspace in emailed check-ins, and what the response contains (saved/refused/warnings). This is exactly the extra behavior context annotations can't convey.
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?
Front-loaded with what gets stored, then merge semantics, then stage values and caveats, then return shape. Dense but each sentence carries information; the long compound sentences are the only minor cost to readability.
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?
No output schema exists, but the description names the return fields, and annotations cover the destructive/idempotency profile. For a 5-parameter mutation tool it is nearly complete; the remaining gap is guidance on the many `patch` sub-fields, which are only documented inside the schema.
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% at the top level, so the description must carry the load. It does well for `stage` (full enum listing), `routine` (email signup side effect) and `decision`, but the large `patch` object with dozens of writable profile keys is left to the nested $defs, and `session_note` is only alluded to. Partial compensation, not full.
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 names a specific verb (stores) and enumerates exactly what is persisted: business notes, onboarding stage, decision record, routine, and session note. It also states the payoff ('so a later conversation can continue from it'), which distinguishes it cleanly from the read-side sibling get_org_context.
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 gives a clear intended context — persisting what the user said so a later conversation can resume — and implicitly frames this as the write counterpart to reading context. It never explicitly names get_org_context as the alternative or states when not to save, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchGoogle Ads: run a report (GAQL)ARead-onlyIdempotentInspect
Reads rows from one Google Ads resource.
The tool writes the GAQL query from these parameters:
SELECT `fields` FROM `resource` WHERE `conditions` (joined with AND)
ORDER BY `orderings` LIMIT `limit`.
Args:
customer_id: The customer ID, digits only (123-456-7890 is
1234567890).
fields: The fields to return, each written in full, e.g.
"campaign.id".
resource: The one resource the rows come from, e.g. "campaign".
conditions: Filters, one GAQL condition each, e.g.
"campaign.id = 123"; every one must hold.
orderings: Sort order, e.g. "metrics.clicks DESC".
limit: The maximum number of rows to return.
start_date: Report start date (YYYY-MM-DD). Adds a quoted `segments.date`
filter — use this instead of hand-writing dates into `conditions`.
On change_event/change_status it filters their own date-time.
end_date: Report end date (YYYY-MM-DD). Combined with start_date this
produces a finite `segments.date BETWEEN 'start' AND 'end'` filter
(on change_event/change_status, a range on their own date-time
instead).There is no parameter for a whole query string, and a parameter not listed above is refused rather than ignored.
Example
The enabled ads of one campaign, by ad group:
resource="ad_group_ad"
fields=["ad_group.name", "ad_group_ad.ad.id", "ad_group_ad.status"]
conditions=["campaign.id = 12345678901",
"ad_group_ad.status = 'ENABLED'"]
orderings=["ad_group.name"]
Clicks and cost by campaign for August:
resource="campaign"
fields=["campaign.name", "metrics.clicks", "metrics.cost_micros"]
start_date="2026-08-01", end_date="2026-08-31"GAQL reference, for writing fields and conditions
Overview: https://developers.google.com/google-ads/api/docs/query/overview
Language Grammar: https://developers.google.com/google-ads/api/docs/query/grammar
Resources and fields: https://developers.google.com/google-ads/api/fields/v23/overview
get_resource_metadata returns the fields a resource can select, filter
and sort by, and the list of valid resources when the name given is not
one. Field names are written in full ('campaign.id', not 'id'); wildcards
and partial field names are not accepted. Common resources: campaign,
ad_group, ad_group_ad, ad_group_criterion, keyword_view,
search_term_view, campaign_budget, customer, asset, change_event.Dates
start_date and end_date (YYYY-MM-DD) add a correctly quoted
`segments.date` filter (change_event and change_status are the
exception, see below), which avoids the most common query error. A date
written into `conditions` is a quoted string, e.g.
segments.date BETWEEN '2026-08-01' AND '2026-08-28' (an unquoted date is
a GAQL syntax error). Date literals from the Grammar (e.g. DURING
LAST_7_DAYS) are not supported here.Keyword and search-term reporting
Metrics on keyword_view and search_term_view are attributed only to the
matched keyword/term, so they will NOT sum to the campaign or ad_group
totals. The remainder is traffic with no single matched keyword, plus
low-volume search terms Google withholds below a privacy threshold. This
is expected Google attribution, NOT a data error; top-line numbers
reconcile at the campaign or ad level.change_event and change_status
Pass start_date AND end_date plus a limit of at most 10000. The dates
filter change_event.change_date_time / change_status.last_change_date_time
(these resources forbid segments.date). Google keeps change_event for the
last 30 days and change_status for the last 90 days.Conversions
Upload issues: offline_conversion_upload_conversion_action_summary
(https://developers.google.com/google-ads/api/docs/conversions/upload-summaries).Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| fields | Yes | ||
| end_date | No | ||
| resource | Yes | ||
| orderings | No | ||
| conditions | No | ||
| start_date | 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?
Goes well beyond the readOnly/idempotent annotations: unknown parameters are 'refused rather than ignored', there is no whole-query-string parameter, unquoted dates are a syntax error, GAQL date literals are unsupported, and change_event/change_status retain data for only 30/90 days. The keyword_view/search_term_view attribution caveat preempts a likely false 'data error' conclusion.
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?
Front-loaded with the query template and an Args block, then clearly headed sections and two worked examples, so length is largely earned. The cost is duplication: the start_date/end_date filter behavior and the change_event/change_status exception are each stated in the Args block and again in the 'Dates' and 'change_event' sections.
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, low-level query tool with an output schema (so return values need no explanation), nothing an agent needs is missing: query construction, field-naming rules, date handling, per-resource constraints, and interpretation caveats for keyword/search-term metrics. The get_resource_metadata handoff covers field discovery.
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 carries the full burden and does: customer_id format rules, fields must be written in full (no wildcards), resource is exactly one, conditions are AND-joined, orderings syntax, and limit semantics. start_date/end_date get the richest treatment, including the exception that they filter the resource's own date-time on change_event/change_status.
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?
Opens with a specific verb+resource: 'Reads rows from one Google Ads resource', then shows the exact GAQL shape it constructs from the parameters. An agent can immediately distinguish this general report runner from siblings like get_resource_metadata, analyze_search_terms or rsa_asset_report.
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 concrete routing rules: use start_date/end_date 'instead of hand-writing dates into conditions', and consult get_resource_metadata for valid fields and the resource list. It also states resource-specific preconditions (change_event/change_status require both dates and limit <= 10000). It stops short of saying when to prefer this over the many purpose-built report tools, e.g. analyze_search_terms or keyword_opportunities.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_ad_group_asset_statusGoogle Ads: pause or resume ad group assetsADestructiveIdempotentInspect
Pauses or re-enables assets linked to one ad group.
PAUSED stops the asset serving on this ad group's ads; the asset and its
other links are untouched, and ENABLED switches it back on. It never
deletes: status REMOVED is refused. Use list_asset_links first to find
the ad group, asset IDs and field type.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
ad_group_id: The ID of the ad group the assets are linked to.
asset_ids: The asset IDs to change (or asset resource names). All must
be linked to this ad group with the same field_type.
field_type: The field type of the link, e.g. CALL, SITELINK, CALLOUT,
STRUCTURED_SNIPPET, PRICE, AD_IMAGE.
status: PAUSED or ENABLED.
Returns:
Dictionary with the updated ad group asset link resource names.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| asset_ids | Yes | ||
| field_type | 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?
Beyond the annotations, the description explains exactly what PAUSED and ENABLED do, clarifies that the asset and its other links are untouched, and states that deletion is refused. This adds meaningful behavioral context for a mutating, idempotent 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 front-loaded with the operation and key semantics, then uses compact Args and Returns sections. Every sentence adds useful information without repetition.
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 five required parameters, no schema descriptions, and a mutating status-change operation, the description covers prerequisites, allowed values, side effects, refusal behavior, and return shape. An output schema exists, but the added return note is still concise and useful.
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 carry parameter meaning, and it does: customer_id format, ad group linkage, asset ID/resource-name support, required shared field_type, and allowed status values. This fully compensates for the bare 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 states a specific verb and resource: pauses or re-enables assets linked to one ad group. It distinguishes the scope from campaign-level, customer-level, and linking tools by emphasizing one ad group and status-only changes.
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 gives a clear prerequisite ('Use list_asset_links first') and a refusal condition ('status REMOVED is refused'), which helps the agent avoid misuse. However, it does not explicitly name sibling alternatives such as link_asset_to_ad_group or set_campaign_asset_status, so routing guidance is slightly incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_ad_scheduleGoogle Ads: add ad scheduleADestructiveInspect
ADDS ad schedule windows to a campaign; its existing windows stay.
This never replaces a schedule: the windows the campaign already has are
left as they are. A campaign with no schedule serves at all hours, and
its first windows narrow it to them; on a campaign that already has
windows, an added one widens when ads show rather than narrowing it.
Narrowing an existing schedule needs windows removed in Google Ads
(Campaign → Ad schedule), which this server never does, so tell the user
the old windows stay until they remove them there.
Controls which days and hours ads are shown.
Args:
customer_id: The Google Ads customer ID.
campaign_id: The ID of the campaign.
schedules: List of schedule objects, each with:
- day_of_week: One of MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY, SUNDAY.
- start_hour: Start hour (0-23).
- start_minute: One of ZERO, FIFTEEN, THIRTY,
FORTY_FIVE. Default: ZERO.
- end_hour: End hour (0-23). Use 24 for midnight.
- end_minute: One of ZERO, FIFTEEN, THIRTY,
FORTY_FIVE. Default: ZERO.
Returns:
Dictionary with created schedule criteria.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| schedules | 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?
Goes well beyond the annotations by disclosing the additive merge semantics and the important consequence that a first window narrows serving while a later window widens it. It does not reconcile this 'never replaces / leaves things as they are' framing with destructiveHint=true, which an agent could find mildly inconsistent given that adding windows can restrict delivery. Still, the behavioral context is far richer than the annotations alone.
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?
Front-loaded with the core behavior and no wasted preamble, but the second paragraph repeats the 'existing windows stay' point across three sentences. Slightly verbose, though every clause is substantive.
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 plus a stated return shape ('dictionary with created schedule criteria') means return values need no further explanation, and the params are fully specified. Nothing an agent needs to call this correctly 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% and the schedules array is a free-form object with additionalProperties, so the description carries the full burden — and it does: every field is documented, including allowed enum values for day_of_week and minutes, the 0-23 hour range, the 24-for-midnight convention, and defaults for start_minute/end_minute.
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?
Opens with a specific verb+resource+scope: 'ADDS ad schedule windows to a campaign; its existing windows stay.' An agent can distinguish this from sibling mutators like update_campaign or set_device_bid_adjustment from the first clause alone.
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?
Explicitly states what the tool does not do ('never replaces a schedule'), explains the semantics of first vs. subsequent windows, and routes the agent elsewhere for narrowing ('needs windows removed in Google Ads… which this server never does'), including an instruction to tell the user the old windows stay. This is exactly the when/when-not guidance the dimension asks for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_campaign_asset_statusGoogle Ads: pause or resume campaign assetsADestructiveIdempotentInspect
Pauses or re-enables assets linked to one campaign.
PAUSED stops the asset (a phone number, sitelink, callout...) serving on
this campaign's ads; the asset and its other links are untouched, and
ENABLED switches it back on. It never deletes: status REMOVED is refused.
Use list_asset_links first to find the campaign, asset IDs and field type.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
campaign_id: The ID of the campaign the assets are linked to.
asset_ids: The asset IDs to change (or asset resource names). All must
be linked to this campaign with the same field_type.
field_type: The field type of the link, e.g. CALL, SITELINK, CALLOUT,
STRUCTURED_SNIPPET, PRICE, BUSINESS_NAME, BUSINESS_LOGO.
status: PAUSED or ENABLED.
Returns:
Dictionary with the updated campaign asset link resource names.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| asset_ids | Yes | ||
| field_type | 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?
Annotations already declare destructiveHint=true and idempotentHint=true; the description adds genuine context beyond that by clarifying the blast radius — only this campaign's serving stops, the asset and its other links are untouched — and that removal is refused rather than silently performed. That materially softens the alarming destructiveHint and prevents an agent from over-warning the user.
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?
Front-loaded with the effect, then the constraint, then the navigation hint, then per-parameter detail. No sentence is redundant, and the argument block is compact rather than prose-heavy.
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 5-required-parameter mutation with no schema descriptions, the definition covers purpose, preconditions, per-parameter formats and constraints. An output schema exists, so the brief return note (updated link resource names) is sufficient rather than required detail.
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% (bare titles only), so the description carries the full burden and does: it specifies the customer_id format (numbers only, no hyphens), the cross-parameter constraint that all asset_ids must share one field_type and belong to the campaign, and enumerates the field_type and status values.
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 pair (pauses / re-enables) and a precise resource scope (assets linked to one campaign), which cleanly separates it from set_ad_group_asset_status and set_customer_asset_status in the sibling list. The parenthetical examples of asset types (phone number, sitelink, callout) make the object concrete.
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 an explicit prerequisite ('Use list_asset_links first to find the campaign, asset IDs and field type') and an explicit exclusion (REMOVED is refused). It does not explicitly state when to prefer this over the ad-group or customer-level status siblings, but the 'one campaign' scope makes that inference easy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_campaign_statusGoogle Ads: pause or enable campaignADestructiveIdempotentInspect
Pauses or enables a Google Ads campaign.
It never deletes: status REMOVED is refused. PAUSED stops the campaign
serving and ENABLED switches it back on.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
campaign_id: The ID of the campaign.
status: The new status. One of: ENABLED, PAUSED.
over_comfort_ack: The user's own words or reason when they asked to
switch on a campaign whose daily budget is above their saved
comfort (e.g. "user said turn it on at 6,000/day on 2026-09-23").
Recorded with the change by the hosted connector; never sent to
Google. Optional.
Returns:
Dictionary with the updated resource name and confirmation message.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| campaign_id | Yes | ||
| customer_id | Yes | ||
| over_comfort_ack | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: guarantees the tool never deletes, defines what each allowed status does in serving terms, and discloses that over_comfort_ack is recorded locally by the hosted connector and never sent to Google. It does not mention permission scope or where the over-comfort budget threshold is read from, but the safety profile is far richer than the hints alone.
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?
Front-loaded with the one-line purpose and the no-delete constraint before the Args block. The Args/Returns list is slightly verbose for a 4-parameter tool, but each entry carries information not present in the schema.
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?
A mutation tool with 0% schema coverage needs the description to explain every parameter and the exact state effect, and it does; the return value is covered by the existing output schema. Nothing an agent needs to call it 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 carries the full burden and does: customer_id format (numbers only, no hyphens), campaign_id meaning, the enum-like allowed values for status, and a full explanation of the otherwise-unguessable over_comfort_ack including an example format.
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 pair and resource ('Pauses or enables a Google Ads campaign') and immediately scopes it ('never deletes'). It is distinguishable from the many create_/update_ siblings, though it never names update_campaign as the place to change other fields.
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 when-to-use semantics: PAUSED stops serving, ENABLED switches back on, REMOVED is refused. The over_comfort_ack paragraph also tells the agent exactly when that argument applies. It omits explicit routing to an alternative tool for non-status edits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_customer_asset_statusGoogle Ads: pause or resume account-level assetsADestructiveIdempotentInspect
Pauses or re-enables assets linked at the account (customer) level.
An account-level asset serves on every eligible campaign. PAUSED stops
it serving account-wide; the asset and any campaign or ad group links
are untouched, and ENABLED switches it back on. It never deletes: status
REMOVED is refused. Use list_asset_links first to find the asset IDs and
field type.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
asset_ids: The asset IDs to change (or asset resource names). All must
be linked at account level with the same field_type.
field_type: The field type of the link, e.g. CALL, SITELINK, CALLOUT,
STRUCTURED_SNIPPET, BUSINESS_NAME, BUSINESS_LOGO.
status: PAUSED or ENABLED.
Returns:
Dictionary with the updated customer asset link resource names.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| asset_ids | Yes | ||
| field_type | 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?
Beyond the annotations, it explains exactly what PAUSED does (stops serving account-wide), what survives (the asset and all campaign/ad group links are untouched), that ENABLED reverses it, and that REMOVED is rejected. That is precisely the impact-and-reversibility context an agent needs before invoking a destructiveHint=true mutation, and it is consistent with idempotentHint=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?
Front-loads the action and scope in the first sentence, then impact, then constraints, then parameters. The Args block repeats parameter names but is justified because the schema carries no descriptions; no sentence is 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?
Covers scope, side effects, refused values, prerequisite discovery step, and all four required parameters, while the return value is already captured by the output schema. Nothing needed to invoke this mutation correctly and 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 carry all parameter meaning, and it does: customer_id format (numbers only, no hyphens), the cross-field constraint that all asset_ids must be account-level with the same field_type, field_type examples including CALL/SITELINK/CALLOUT, and the status enum PAUSED/ENABLED.
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 pair (pauses/re-enables) and a precisely scoped resource (assets linked at the account/customer level), then explains that such an asset serves on every eligible campaign. This scope statement cleanly distinguishes it from set_campaign_asset_status and set_ad_group_asset_status without needing to name 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?
Gives a concrete prerequisite ("Use list_asset_links first to find the asset IDs and field type") and a clear exclusion ("It never deletes: status REMOVED is refused"). It never explicitly names the campaign- or ad-group-level siblings as the alternative for non-account-level assets, so the routing rule is implied by scope rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_device_bid_adjustmentGoogle Ads: set device bid adjustmentADestructiveIdempotentInspect
Sets a bid adjustment for a specific device type on a campaign.
Use this to increase or decrease bids for Mobile, Desktop, or Tablet
devices, or to exclude a device entirely with bid_modifier=0.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
campaign_id: The ID of the campaign.
device_type: Device type. One of: MOBILE, DESKTOP, TABLET.
bid_modifier: Bid adjustment as a multiplier.
0.0 = -100% (exclude device entirely).
0.5 = -50% bid reduction.
1.0 = no adjustment (0%).
1.5 = +50% bid increase.
Range: 0.0 to 10.0.
Returns:
Dictionary with the updated criterion and confirmation message.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | ||
| customer_id | Yes | ||
| device_type | Yes | ||
| bid_modifier | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true; the description earns credit by explaining the concrete destructive outcome (bid_modifier=0.0 excludes the device entirely) and the valid 0.0–10.0 range, which an agent cannot infer from the hints alone. It does not cover permission or auth prerequisites.
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?
Front-loaded purpose sentence followed by actionable usage and a compact Args/Returns block. The 'Returns' section restates a value already covered by the output schema, and 'Bid adjustment as a multiplier' mildly duplicates the scale table, but there is no real bloat.
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 4-required-parameter mutation tool with annotations and an output schema, everything an agent needs to call it correctly is present: formats, enum values, numeric range, and the meaning of edge values. Return details are already covered by the output schema.
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%, so the description must compensate and does: each of the four parameters is documented, including the 'numbers only, no hyphens' format for customer_id, the enumerated device types, and the full multiplier scale with worked examples (0.5 = -50%, 1.5 = +50%).
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 (sets), resource (bid adjustment), and scope (a specific device type on a campaign). This clearly separates it from nearby siblings like set_campaign_status, update_campaign, and set_geo_targets.
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 second paragraph gives concrete usage context: increase or decrease bids for Mobile/Desktop/Tablet, or exclude a device with bid_modifier=0. It stops short of naming explicit alternatives or when-not-to-use conditions, so it is clear context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_geo_targetsGoogle Ads: add location targetsADestructiveInspect
ADDS location criteria to a campaign; its existing locations stay.
This never replaces targeting: the locations and exclusions the campaign
already has are left as they are. Moving a campaign from country A to
country B therefore also needs A removed in Google Ads (Campaign →
Locations), which this server never does, so tell the user the old
location stays until they remove it there. A campaign with no location
criteria serves everywhere; the first location added narrows it.
Add locations to TARGET with `location_ids`, and/or locations to EXCLUDE with
`excluded_location_ids` (e.g. target India but exclude one city). Provide at
least one of the two.
Common location IDs (Google Ads geo target constants):
US=2840, UK=2826, Canada=2124, Australia=2036,
India=2356, Singapore=2702, UAE=2784,
Germany=2276, France=2250
Find more IDs at:
https://developers.google.com/google-ads/api/data/geotargets
Args:
customer_id: The Google Ads customer ID.
campaign_id: The ID of the campaign.
location_ids: Geo target constant IDs to TARGET. Optional.
excluded_location_ids: Geo target constant IDs to EXCLUDE. Optional.
Returns:
Dictionary with created location criteria.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | ||
| customer_id | Yes | ||
| location_ids | No | ||
| excluded_location_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds the crucial nuance the annotations cannot: this is purely additive, existing targets and exclusions are never touched, and removal requires manual action in the Google Ads UI. It also explains the targeting semantics (no criteria = serves everywhere; first location narrows). The only gap is that it does not explain why the operation is flagged destructive (narrowing reach).
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?
Front-loaded with the key behavioral fact in the first sentence, then organized into behavior, parameters, ID reference, and returns. Effectively sized; the common-location-ID table is long but earns its place by removing a lookup step. Minor redundancy between the opening line and the "never replaces targeting" sentence.
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 4-parameter mutation with an output schema present, the description covers the additive semantics, the exclusivity requirement, ID sourcing, and a user-facing caveat — nothing an agent needs to call it correctly is missing. Return values are covered by the output schema, so the brief 'Returns' line is sufficient.
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 carries the full burden and largely meets it: it distinguishes TARGET vs EXCLUDE arrays with a worked example ("target India but exclude one city"), states the at-least-one requirement, and supplies concrete geo target constant IDs plus a reference URL. customer_id and campaign_id are only restated ("The Google Ads customer ID"), adding little, but they are self-evident identifiers.
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 and resource ("ADDS location criteria to a campaign") and immediately disambiguates the scope with "its existing locations stay." The name 'set_geo_targets' could suggest replacement, and the description explicitly corrects that, so an agent knows exactly which operation this is without consulting any sibling.
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 concrete when-to-use conditions (target with location_ids, exclude with excluded_location_ids), the prerequisite "Provide at least one of the two," and a real-world caveat about moving a campaign from country A to B. It even tells the agent what to communicate to the user when removal is needed elsewhere, which is exactly the guidance an agent needs before invoking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shopping_product_issuesGoogle Ads: Shopping products that cannot showARead-onlyIdempotentInspect
List the Merchant Center products that cannot show in Shopping and Performance Max ads: counts by status, the issues behind them by error code and attribute with Google's description, fix text and help link, sample items, and their clicks and cost over 30 days. campaign_id (digits) narrows it. Read-only.
Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | summary | |
| render | No | both | |
| max_items | 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?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered; the description reinforces 'Read-only' and adds that the window is 30 days and what the report contents are. It does not mention pagination limits or how max_items ties to sampling, but overall adds useful behavioral context beyond annotations.
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?
Front-loaded with the core verb and resource, followed by the payload breakdown and the campaign_id constraint in two short sentences. Dense but every clause carries information, aside from the redundant 'Read-only' tail.
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 read-only reporting tool with an output schema, the description covers scope, report contents, time window and the one narrowing filter. The gaps (max_items behavior, customer_id format) are minor against an existing output schema and full annotation set.
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% across 5 parameters, so the description carries the burden; it only explains campaign_id ('digits') and leaves detail, render, max_items and customer_id entirely undocumented in both places. Two enums (detail, render) are self-describing by value names, but max_items and customer_id semantics remain unexplained.
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 ('List') and a precisely scoped resource ('Merchant Center products that cannot show in Shopping and Performance Max ads'), then enumerates the payload (status counts, error codes, fix text, sample items, 30-day clicks/cost). No sibling covers Shopping product diagnostics, so it is easy to route to.
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 explains that campaign_id (digits) narrows the scope, which is meaningful usage guidance, but it never states when to prefer this tool over a broader audit tool like full_audit or account_health_score. Usage is implied by the resource description rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ad_groupGoogle Ads: update ad groupADestructiveIdempotentInspect
Updates an existing ad group's settings.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
ad_group_id: The ID of the ad group to update.
name: New ad group name. Optional.
status: New status. One of: ENABLED, PAUSED. REMOVED is refused:
this server never deletes, pause instead. Optional.
cpc_bid_micros: New default max CPC bid in micros of the account's currency. Optional.
Returns:
Dictionary with the updated resource name and confirmation message.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| status | No | ||
| ad_group_id | Yes | ||
| customer_id | Yes | ||
| cpc_bid_micros | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true; the description adds genuine context beyond that by stating REMOVED is refused and the server never deletes, which materially reframes how the agent should treat the destructive hint. It also describes the return payload, though it omits permission/scope requirements.
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?
Front-loaded summary sentence followed by scannable Args/Returns blocks, with no filler. Slightly verbose in repeating 'Optional.' for three parameters, but it is uniformly structured and easy to parse.
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 5-parameter mutation tool with an output schema present, the description covers every input, the critical refusal behavior, and the return shape. Minor gaps remain around permission requirements and whether multiple fields can be changed in one call, but nothing needed to call it correctly 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 carries the full burden and does so well: customer_id format (numbers only, no hyphens), ad_group_id meaning, optionality of name/status/cpc_bid_micros, the allowed status values with the REMOVED exclusion, and the unit for cpc_bid_micros (micros of the account's currency). Nothing essential is left 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?
States a specific verb and resource ('Updates an existing ad group's settings') and enumerates the mutable fields, so the agent knows exactly what changes. It does not explicitly distinguish itself from siblings like update_campaign or update_ad_status, but the resource naming makes the boundary inferable.
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?
There is no explicit 'use this when...' guidance versus alternatives, but the status argument carries a real usage rule: status may only be ENABLED or PAUSED because 'this server never deletes, pause instead.' That is a meaningful operating constraint embedded in parameter docs rather than a standalone when-to-use section.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ad_statusGoogle Ads: pause or enable adADestructiveIdempotentInspect
Pauses or enables an ad.
It never deletes: status REMOVED is refused. PAUSED stops the ad serving
and ENABLED switches it back on.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
ad_group_id: The ID of the ad group containing the ad.
ad_id: The ID of the ad to update.
status: New status. One of: ENABLED, PAUSED.
Returns:
Dictionary with the updated resource name and confirmation message.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | Yes | ||
| status | 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?
Annotations already declare non-readOnly, destructive, idempotent and open-world, and the description adds meaningful context on top: exactly which mutation is refused (REMOVED), what pausing does to serving, and that the result is a resource name plus confirmation. The 'never deletes' framing usefully softens the destructiveHint=true annotation by explaining the change is reversible; this is complementary, not contradictory. Permissions/auth requirements are not mentioned.
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?
Front-loaded with the one-line purpose, then refusals, then an Args block — efficient and scannable. The Returns block is mostly redundant since an output schema exists, which is the only place words are spent without adding 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?
A destructive write tool with four undocumented params and no schema descriptions is well covered: parameters, allowed values, what is refused, and the response shape are all addressed. Error behavior beyond the REMOVED case and auth/permission prerequisites are the remaining gaps.
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% (bare titles only) yet the description supplies meaning for all four parameters, including the practical detail that customer_id is numbers only with no hyphens and that status accepts only ENABLED or PAUSED. This fully compensates 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?
States a specific verb pair and resource ('Pauses or enables an ad') and the status semantics that follow make the operation unambiguous. Among the many set_*/update_* siblings, this is the only one scoped to an individual ad's status, so an agent can route to it without opening the schema.
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 concrete guidance on what each status value does ('PAUSED stops the ad serving and ENABLED switches it back on') and a clear exclusion ('status REMOVED is refused'). It does not name the sibling tools (e.g. set_campaign_status, set_ad_group_asset_status) whose scopes differ, but the ad-level scope is implicit in the args.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_campaignGoogle Ads: update campaign settingsADestructiveIdempotentInspect
Updates an existing Google Ads campaign's settings.
search_partners, display_network and geo_target_type change the same
three settings create_campaign sets, so a campaign created earlier, or
created outside this server, can be changed here; PRESENCE targets only
people in the targeted locations. Each is applied only when passed.
languages applies to Performance Max, Display and Video campaigns,
including one created outside this server; a campaign with no language
setting may show to people who use any language.
languages sets exactly the given list: languages the campaign has that
are not in it are removed, missing ones added, and the result reports the
campaign's languages before and after (an empty list means every
language). Read the campaign's current languages first and pass every
language to keep: a language left out of the list is removed. Read them
with search: resource campaign_criterion, fields campaign.id,
campaign_criterion.language.language_constant, conditions campaign.id =
<campaign_id>, campaign_criterion.type = 'LANGUAGE',
campaign_criterion.status != 'REMOVED'. Performance Max uses the setting
on YouTube, Display, Discover and Gmail, not on Google Search.
Search campaigns have no language setting: Google Ads removed it in late
September 2026 and matches Search ads by the language they are written
in, so languages is refused on a Search campaign. Language criteria an
older Search campaign still carries are returned by reads but no longer
used by Google. A languages change and the other campaign settings in the
same call are applied together or not at all; a budget change is a
separate request, sent first.
bidding_strategy_type switches the campaign to a standard bidding
strategy, replacing the one it has (including a portfolio strategy). The
usual fix for a new Search campaign that is not winning auctions on manual
CPC is TARGET_SPEND (Maximize Clicks) with a cpc_bid_ceiling_micros cap.
Supported, by campaign type — anything else is refused before any change:
SEARCH: MANUAL_CPC, TARGET_SPEND, MAXIMIZE_CONVERSIONS, TARGET_CPA,
MAXIMIZE_CONVERSION_VALUE, TARGET_ROAS.
PERFORMANCE_MAX: MAXIMIZE_CONVERSIONS, TARGET_CPA,
MAXIMIZE_CONVERSION_VALUE, TARGET_ROAS.
Moving to TARGET_SPEND requires cpc_bid_ceiling_micros. Re-sending
TARGET_SPEND without a cap on a campaign already using it keeps the
existing cap; nothing clears a cap. For the conversion strategies a target
left out is cleared (e.g. MAXIMIZE_CONVERSIONS removes a target CPA).
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
campaign_id: The ID of the campaign to update.
name: New campaign name. Optional.
budget_amount_micros: New daily budget in micros of the account's currency (10000000 = 10.00: ₹10 on an INR account, $10 on a USD one).
On a budget shared by several campaigns the new amount applies
to all of them; the result's budget_shared says how many.
Optional.
start_date: New start date in YYYY-MM-DD format. Optional.
end_date: New end date in YYYY-MM-DD format. Optional.
search_partners: False stops the campaign serving on the Google Search
Partners network, True allows it. Optional.
display_network: False stops the campaign serving on the Google
Display Network, True allows it. Optional.
geo_target_type: New positive location targeting. One of: PRESENCE
(only people in the targeted locations), PRESENCE_OR_INTEREST
(also people elsewhere who show interest in them), SEARCH_INTEREST.
Optional.
bidding_strategy_type: New bidding strategy. One of: MANUAL_CPC,
TARGET_SPEND (Maximize Clicks), MAXIMIZE_CONVERSIONS, TARGET_CPA
(Maximize Conversions with a target cost per conversion),
MAXIMIZE_CONVERSION_VALUE, TARGET_ROAS (Maximize Conversion Value
with a target return on ad spend). See the list above for which
campaign types accept which. Optional.
cpc_bid_ceiling_micros: Maximize Clicks' max CPC cap — the most
Google may bid for one click — in micros of the account's currency
(10000000 = 10.00: ₹10 on an INR account, $10 on a USD one). Only
with TARGET_SPEND; required when moving to it, optional (the
existing cap is kept) when the campaign already uses it.
target_cpa_micros: Target cost per conversion in micros of the
account's currency (10000000 = 10.00: ₹10 on an INR account, $10
on a USD one). Required with TARGET_CPA, refused otherwise.
target_roas: Target return on ad spend as a ratio (e.g., 2.0 for
200%). Required with TARGET_ROAS, refused otherwise.
languages: Google Ads language codes (e.g. en, hi, es, pt, de, fr,
ja, zh_CN); sets exactly this list, removing the rest, so pass
every current language to keep. ["all"]
removes every language setting. Performance Max (used on YouTube,
Display, Discover, Gmail; not on Google Search), Display and
Video campaigns only; refused on Search. Optional.
over_comfort_ack: The user's own words or reason when they asked for
a budget above their saved comfort (e.g. "user asked for 6,000/day
on 2026-09-23"). Recorded with the change by the hosted connector;
never sent to Google. Optional.
Returns:
Dictionary with the updated resource names and a confirmation message;
with languages, also languages: {before, after, changed}; with a
budget shared by several campaigns, also budget_shared: {campaigns}.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| end_date | No | ||
| languages | No | ||
| start_date | No | ||
| campaign_id | Yes | ||
| customer_id | Yes | ||
| target_roas | No | ||
| display_network | No | ||
| geo_target_type | No | ||
| search_partners | No | ||
| over_comfort_ack | No | ||
| target_cpa_micros | No | ||
| budget_amount_micros | No | ||
| bidding_strategy_type | No | ||
| cpc_bid_ceiling_micros | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (destructive/idempotent/openWorld) by disclosing atomicity ('applied together or not at all'), the destructive semantics of languages (omitted languages are removed, empty list means every language), cap/target clearing rules, and that a shared budget change affects all campaigns. over_comfort_ack being recorded locally and never sent to Google is exactly the kind of side-effect context annotations cannot express.
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?
Front-loaded and organized by concern, but the length is inflated by repetition: the language-setting semantics are explained in the preamble and again under languages, and the bidding-strategy support matrix appears both in prose and in the parameter entry. The content earns its place; the duplication does not.
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 15 parameters, mutation risk and an output schema, the description covers everything needed: prerequisites for reading current languages, refusal conditions, partial-failure semantics, and how results report before/after languages and shared budget counts. No material gap remains for an agent to call this 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?
With 0% schema description coverage across 15 parameters, the description carries the full burden and does: micros conversion with currency examples, date format, enums for geo_target_type and bidding_strategy_type, per-strategy parameter requirements (target_cpa_micros, target_roas, cpc_bid_ceiling_micros), and language code format. This is the main reason the tool is usable at all.
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?
Opens with a specific verb and resource ('Updates an existing Google Ads campaign's settings') and names the concrete settings it governs, which separates it from set_campaign_status, set_geo_targets, update_ad_group and create_campaign. An agent can tell what this tool does without opening the schema.
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 strong conditional guidance: which campaign types accept each bidding strategy, when TARGET_SPEND requires a cap, when targets are cleared, and that a budget change is a separate earlier request. It also points at the read path for current languages. It stops short of explicitly routing whole tasks to siblings (e.g. pausing belongs to set_campaign_status), so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_keywordGoogle Ads: update keyword status or bidADestructiveIdempotentInspect
Updates a keyword's status or bid.
It never deletes: status REMOVED is refused. PAUSED stops the keyword
serving and ENABLED switches it back on.
Args:
customer_id: The Google Ads customer ID (numbers only, no hyphens).
ad_group_id: The ID of the ad group containing the keyword.
criterion_id: The criterion ID of the keyword.
status: New status. One of: ENABLED, PAUSED. Optional.
cpc_bid_micros: New CPC bid in micros of the account's currency. Optional.
Returns:
Dictionary with the updated resource name and confirmation message.Tools revision: 5c9bea8f.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ||
| ad_group_id | Yes | ||
| customer_id | Yes | ||
| criterion_id | Yes | ||
| cpc_bid_micros | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare mutation, open-world, idempotent, and destructive behavior. The description adds valuable non-obvious behavior: REMOVED is refused, PAUSED stops serving, ENABLED resumes serving, and the return includes the updated resource name.
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, structured into purpose, behavioral constraints, Args, and Returns. Every sentence adds useful information 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 mutation tool with rich annotations and an output schema, the description covers purpose, update constraints, parameter meanings, and return shape. An agent has enough information to invoke 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 description coverage is 0%, so the description carries the full burden. It documents all five parameters, including customer ID formatting, the allowed status values, optionality, and that cpc_bid_micros is in micros of the account currency.
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: update a keyword's status or bid. This clearly distinguishes it from creation tools such as add_keywords and from ad-group or campaign updates.
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 gives clear usage context and an explicit when-not: status REMOVED is refused because the tool never deletes. It does not name a specific alternative tool for deletion, so it falls short of fully explicit alternative routing.
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.
121 tool updates
- First observed
account_health_score - First observed
add_account_negatives - First observed
add_assets_to_asset_group - First observed
add_keywords - First observed
add_negative_keywords - First observed
add_to_negative_keyword_list - First observed
analyze_search_terms - First observed
analyze_waste - First observed
attach_negative_keyword_list - First observed
bidding_audit - First observed
budget_pacing - First observed
change_history - First observed
conversion_setup_audit - First observed
create_ad_group - First observed
create_asset_group - First observed
create_call_asset - First observed
create_callout_asset - First observed
create_campaign - First observed
create_conversion_action - First observed
create_image_asset - First observed
create_lead_form_asset - First observed
create_negative_keyword_list - First observed
create_performance_max_campaign - First observed
create_price_asset - First observed
create_promotion_asset - First observed
create_responsive_search_ad - First observed
create_sitelink_asset - First observed
create_structured_snippet_asset - First observed
create_text_asset - First observed
create_youtube_video_asset - First observed
day_of_week - First observed
explain_conversion_gap - First observed
full_audit - First observed
ga4_create_conversion_event - First observed
ga4_create_custom_dimension - First observed
ga4_create_custom_metric - First observed
ga4_create_data_stream - First observed
ga4_create_google_ads_link - First observed
ga4_create_property - First observed
ga4_get_attribution_settings - First observed
ga4_get_metadata - First observed
ga4_list_account_summaries - First observed
ga4_list_conversion_events - First observed
ga4_list_custom_dimensions - First observed
ga4_list_custom_metrics - First observed
ga4_list_data_streams - First observed
ga4_list_google_ads_links - First observed
ga4_list_properties - First observed
ga4_provision_account - First observed
ga4_run_cohort_report - First observed
ga4_run_funnel_report - First observed
ga4_run_pivot_report - First observed
ga4_run_realtime_report - First observed
ga4_run_report - First observed
ga4_update_attribution_settings - First observed
ga4_update_conversion_event - First observed
ga4_update_custom_dimension - First observed
ga4_update_custom_metric - First observed
ga4_update_data_stream - First observed
ga4_update_property - First observed
get_keyword_forecast - First observed
get_keyword_ideas - First observed
get_keyword_metrics - First observed
get_org_context - First observed
get_resource_metadata - First observed
gsc_inspect_url - First observed
gsc_list_sitemaps - First observed
gsc_list_sites - First observed
gsc_request_indexing - First observed
gsc_search_analytics - First observed
gsc_submit_sitemap - First observed
gtm_create_folder - First observed
gtm_create_tag - First observed
gtm_create_trigger - First observed
gtm_create_variable - First observed
gtm_enable_built_in_variable - First observed
gtm_list_accounts - First observed
gtm_list_built_in_variables - First observed
gtm_list_containers - First observed
gtm_list_folders - First observed
gtm_list_tags - First observed
gtm_list_triggers - First observed
gtm_list_variables - First observed
gtm_list_version_headers - First observed
gtm_list_workspaces - First observed
gtm_update_folder - First observed
gtm_update_tag - First observed
gtm_update_trigger - First observed
gtm_update_variable - First observed
keyword_opportunities - First observed
link_asset_to_ad_group - First observed
link_asset_to_campaign - First observed
link_assets_to_customer - First observed
list_accessible_customers - First observed
list_asset_links - First observed
list_audiences - First observed
list_auto_apply_subscriptions - First observed
list_recommendations - First observed
lsa_leads - First observed
lsa_rate_lead - First observed
paid_vs_organic - First observed
pause_auto_apply_subscription - First observed
quality_score_breakdown - First observed
remove_account_negatives - First observed
remove_from_negative_keyword_list - First observed
remove_negative_keywords - First observed
rsa_asset_report - First observed
save_org_context - First observed
search - First observed
set_ad_group_asset_status - First observed
set_ad_schedule - First observed
set_campaign_asset_status - First observed
set_campaign_status - First observed
set_customer_asset_status - First observed
set_device_bid_adjustment - First observed
set_geo_targets - First observed
shopping_product_issues - First observed
update_ad_group - First observed
update_ad_status - First observed
update_campaign - First observed
update_keyword
Publisher details
- Operator
- Atromx Intelligence Private Limited · Publisher source
- Operator website
- https://adcopilot.cloud · Publisher source
- Vendor relationship
- Independent
- Documentation
- https://adcopilot.cloud/docs/ · Publisher source
- Trust center
- https://adcopilot.cloud/security · Publisher source
- Restrictions
- Sign in with Google. Free plan: 10 operations a day, no card. Paid plans from $19 a month (500 operations a day per person), with a 5-day Pro trial on the first workspace. · Publisher source
Related MCP Servers
- AlicenseNot gradedqualityBmaintenancePerplexity for social: ask what competitors are running across social and get answers grounded in real ad and creative data, not guesses.2Apache 2.0
- AlicenseCqualityBmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs119 npm54 PyPIMIT
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.164 npm1MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.