AdsAgent — Google Ads MCP
Server Details
Hosted Google Ads MCP with OAuth, bounded reads, and prepare/confirm writes.
- Status
- Healthy
- Uptime
- 60.8% over 62 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 161 tools
Despite highly detailed descriptions, the set contains many overlapping tools: generic compatibility entrypoints (google_ads_management_prepare/confirm, google_ads_experiment_action_prepare/confirm) duplicate the specific named prepare/confirm pairs, and several read tools overlap (insights_query_consistent vs google_ads_insights_overview_query/query_daily, google_ads_accounts_pull vs google_ads_accounts_sync, tasks_get_status vs google_ads_task_get). With ~80 prepare/confirm pairs plus generic alternatives, an agent can plausibly misselect. Boundaries exist but are buried in prose rather than structural.
Most tools are snake_case with a *_prepare/*_confirm pairing, which is fairly predictable, but conventions are mixed: some use resource_action_phase (google_ads_ad_group_create_confirm) while others use action_resource (google_ads_status_pause_confirm), and many tools drop the google_ads prefix entirely (creatives_*, insights_query_consistent, approval_plan_*, mmp_*, support_*, tasks_*, setup_*). Readable but not uniformly patterned.
161 tools is an extreme mismatch for a single MCP server; even a rich Google Ads domain does not justify this many. The count includes generic aliases alongside specific tools, multiplying near-duplicate entries. This volume alone will overwhelm tool selection.
Coverage is genuinely broad: campaigns, ad groups, ads, keywords, assets, budgets, bidding, experiments, recommendations, conversion actions, insights, plus adjacent MMP/task/support surfaces, with create/update/remove lifecycles. Minor gaps remain (e.g., some resource types lack explicit delete), but agents can generally complete workflows.
Available Tools
161 toolsapproval_plan_confirmADestructiveInspect
After explicit user approval of every displayed item, execute the stored mixed advertising plan identified by approval_ref and expected_plan_digest. Supply the exact expected_changes returned by prepare so the host can inspect targets and effects; the server rejects any mismatch. May create, copy, edit, remove or change delivery, budgets and bids of advertising resources, affecting spend. Only registered operation-specific executors run, with their current permissions and validation. Execution is sequential, not atomic at the provider. Stop on failure or uncertainty; preserve per-item receipts. A repeat returns the existing outcome or resumes only proven-unsent quota-deferred items after retry_at within the original approval expiry. Present one approval for the complete requested change set within this platform. Show account and target names, operation, before/after values, warnings and expiry. Keep approval refs, draft IDs, digests, tokens and protocol JSON in tool traffic, not normal chat. Ask for one confirmation of the whole displayed plan. Report each completed, submitted, waiting, failed or uncertain item accurately. A submitted background task is not a verified provider change. Never replay an uncertain write or retry a host safety denial. A waiting_quota plan retains its confirmation only until its original expiry; resume the exact plan after retry_at without asking for another confirmation. Changed or expired plans require review.
| Name | Required | Description | Default |
|---|---|---|---|
| approval_ref | Yes | ||
| expected_changes | Yes | ||
| connection_context | No | ||
| expected_plan_digest | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint/openWorldHint annotations, it discloses a lot: sequential non-atomic execution at the provider, stop-on-failure behavior, per-item receipts, idempotent repeat semantics with quota-deferred resume after retry_at bounded by approval expiry, and that only registered executors with current permissions run. This is unusually rich behavioral context for a mutation 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 core action is front-loaded, but the text is bloated and repetitive ('present one approval' and 'ask for one confirmation of the whole displayed plan' restate the same rule, and the expiry/retry_at rule is given twice). Much of it is agent chat-presentation policy rather than guidance for invoking this tool, which crowds out the operative 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 destructive, multi-resource, no-output-schema tool, the description covers failure handling, idempotency, permissions and item-level outcomes. It stops short of describing the receipt/result shape an agent should expect back, and omits the connection_context parameter.
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 the description must carry the parameters, and it does substantially: approval_ref identifies the stored plan, expected_plan_digest must match, and expected_changes must be the exact values from prepare so the host can inspect targets and effects. Only connection_context is left 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?
The description states a concrete verb (execute) and resource (the stored mixed advertising plan identified by approval_ref/expected_plan_digest), and it implicitly distinguishes itself from the prepare step by requiring values 'returned by prepare'. It does not name the sibling confirm/deny/get tools, 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?
It clearly states the precondition (explicit user approval of every displayed item) and several exclusions (never replay an uncertain write, never retry a host safety denial, changed/expired plans require review), plus the quota-deferred resume path. It never names approval_plan_prepare, approval_plan_deny or approval_plan_get as the alternatives, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approval_plan_denyADestructiveInspect
Discard a prepared or quota-waiting mixed approval, preserving completed receipts; no Google changes.
| Name | Required | Description | Default |
|---|---|---|---|
| approval_ref | Yes | ||
| connection_context | No | ||
| expected_plan_digest | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (destructiveHint=true). Explicitly states what is preserved ('preserving completed receipts') and that there are 'no Google changes', which are non-obvious and important behavioral guarantees that the structured fields do not 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?
Single sentence, front-loaded with the action and immediately followed by the two key behavioral guarantees. Zero 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?
Behavioral context is strong for a denial operation, but the 0% parameter coverage and absence of output schema mean the agent gets no guidance on approval_ref format or what expected_plan_digest is for. Complete enough to attempt the call, not to call it correctly under all conditions.
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 there are no parameter descriptions anywhere. The description mentions 'prepared or quota-waiting' but does not explain approval_ref, expected_plan_digest (e.g., concurrency guard, stale plan detection), or connection_context. With three undocumented parameters, this is a significant 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?
Clear verb+resource: 'Discard a prepared or quota-waiting mixed approval'. The qualifier 'mixed approval' and scope 'prepared or quota-waiting' distinguishes it from siblings like approval_plan_confirm (which proceeds) and approval_plan_get (reads). Not a perfect 5 because 'mixed approval' is an undefined term for external readers.
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 scopes the action to 'prepared or quota-waiting' approvals, implicitly excluding already-confirmed ones. However, it does not explicitly name approval_plan_confirm as the alternative or state when to deny vs confirm, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approval_plan_getBRead-onlyInspect
Read one stored mixed approval and its receipts. No provider requests or writes.
| Name | Required | Description | Default |
|---|---|---|---|
| approval_ref | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered. The description adds the useful detail that no live provider request is made, but that largely restates readOnly + no-network and discloses nothing about what state is read or how stale the stored plan may be.
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 front-loaded sentences with zero filler; the read-only/no-write constraint is stated immediately after the purpose.
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 no output schema, the agent gets only a hint that receipts are returned and no idea of the response shape, status fields, or failure modes. For a read tool whose safety annotations are complete, this is adequate but thin.
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 not. 'one stored approval' loosely ties to approval_ref, but connection_context (with its mctx_v1_ pattern) is never explained and there is no indication how either value is obtained.
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 (Read) and resource (one stored mixed approval plus its receipts), and the phrasing implies it is the retrieval counterpart to approval_plan_prepare/confirm/deny. It does not explicitly name a sibling to contrast against, and 'mixed approval' is internal jargon an outsider cannot fully decode.
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 'No provider requests or writes' clause signals this is a safe pure-read path, but there is no explicit when-to-use guidance such as 'use after approval_plan_prepare to inspect a plan' or when to prefer approval_plan_confirm/deny. Usage is only implied by the name and sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approval_plan_prepareAInspect
Combine 1–20 owned, unexpired, unconfirmed advertising drafts into one immutable approval. Supports mixed operation types within this platform through the existing validated prepare/confirm adapters. Stores a private approval; sends no advertising changes. The source drafts become members and cannot be confirmed separately. Present one approval for the complete requested change set within this platform. Show account and target names, operation, before/after values, warnings and expiry. Keep approval refs, draft IDs, digests, tokens and protocol JSON in tool traffic, not normal chat. Ask for one confirmation of the whole displayed plan. Report each completed, submitted, waiting, failed or uncertain item accurately. A submitted background task is not a verified provider change. Never replay an uncertain write or retry a host safety denial. A waiting_quota plan retains its confirmation only until its original expiry; resume the exact plan after retry_at without asking for another confirmation. Changed or expired plans require review. For video uploads supply the original source URL in source_urls keyed by draft ID; URLs are encrypted at rest and omitted from the review.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_ids | Yes | ||
| source_urls | No | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only declaring readOnlyHint=false and destructiveHint=false, the description carries substantial extra load: it states a private approval is stored, no advertising changes are sent, the approval is immutable, source drafts are consumed as members and cannot be confirmed individually, and it defines the waiting_quota confirmation-retention semantics and the no-replay/no-retry rules for uncertain writes and safety denials. These are real behavioral traits not conveyed by 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 is front-loaded in sentence one, but the body runs long as a single dense block mixing workflow policy, error semantics, and a trailing parameter note. Sentences like 'Report each completed, submitted, waiting, failed or uncertain item accurately' are generic and dilute the sharper content. Content mostly earns its place, but structure could be tighter and better grouped.
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 no output schema, the description does an adequate job covering return-relevant behavior: approval refs, draft IDs, digests, tokens, plan states, and expiry handling, plus where that data should be surfaced. Nested source_urls is addressed. Minor gaps remain, such as the unexplained connection_context parameter and no note on the shape of the prepared plan object.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains that draft_ids are owned/unexpired/unconfirmed and capped at 1–20, and that source_urls must be keyed by draft ID for video uploads with URLs encrypted at rest and omitted from review. The third parameter, connection_context, is never mentioned in the description or schema, leaving one 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?
The first sentence gives a specific verb and resource with concrete scope: 'Combine 1–20 owned, unexpired, unconfirmed advertising drafts into one immutable approval.' It also clarifies that no advertising changes are sent, which separates it from the confirm step. It never names its siblings (approval_plan_confirm/deny/get) explicitly, so differentiation is inferred from the workflow 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?
It gives clear usage context: this is the prepare step of a prepare/confirm flow, drafts cannot be confirmed separately, and the agent must 'ask for one confirmation of the whole displayed plan.' It also handles the waiting_quota resume case and the changed/expired-plan re-review case. It does not state when to choose this over the sibling approval tools, but the implied workflow is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creatives_cloud_statusARead-onlyInspect
Read-only Google Drive cloud-library status for the current user. This is not the upload library. Binding is done by a person in the Google Drive section of https://adsagent.md/dashboard/creatives/browse, not the settings page. When next_action is bind_in_browser or rebind_in_browser, give the user bind_url. When no service account email is configured the error_code is cloud_service_account_unconfigured and next_action is not bind_in_browser. MCP does not report remaining quota; a download over the daily cap returns error_code cloud_daily_egress_exceeded. Supported types: image/gif, image/jpeg, image/png, image/webp, video/mp4, video/quicktime, video/webm. Maximum file size is 524288000 bytes (500 MiB). A larger file returns error_code cloud_file_too_large. Any other type returns error_code cloud_file_type_unsupported. No writes.
| Name | Required | Description | Default |
|---|---|---|---|
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnlyHint annotation by disclosing quota behavior (MCP does not report remaining quota), the daily-cap error path, the exact supported MIME types, the 500 MiB size ceiling, and the mapping of failure conditions to error_codes and next_action values. This is unusually rich for a status 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?
Front-loaded purpose, then tightly packed operational facts. Dense but every sentence carries information an agent needs; the enumeration of MIME types and error codes is verbose but justified by their absence from any 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?
With no output schema, the description carries the return-shape burden and does so well by naming the fields an agent must react to (next_action, bind_url, error_code). It does not describe the success-path payload structure, which is the remaining 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?
One parameter (connection_context) with 0% schema description coverage, and the description never explains it. It is likely a system-injected context token, so the gap is tolerable, but the description does nothing 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?
Opens with a specific verb+resource+scope: 'Read-only Google Drive cloud-library status for the current user.' It explicitly disambiguates from a near sibling ('This is not the upload library'), which is exactly the differentiation an agent needs.
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 operational guidance: when next_action is bind_in_browser/rebind_in_browser, surface bind_url, and clarifies that binding is done by a person in the dashboard rather than settings. It does not, however, state when to prefer this over creatives_list_cloud.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creatives_list_cloudARead-onlyInspect
List files from the Google Drive cloud-library index. This is not creatives_list_folders and not the upload library. Optional parent_id is a Drive folder id copied from an earlier item's parent_id; it is not an upload-library folder id and not a Drive URL. Empty Drive folders are absent because only files are indexed. Each item includes modified_time (Drive modified time, timezone-aware ISO-8601, or null) and indexed_at. There is no month parameter: compare modified_time yourself. A null modified_time cannot be placed in a calendar month. indexed_at is when the index saw the file, not the file's month. An item may include error_code cloud_file_too_large or cloud_file_type_unsupported; do not use that file in an ad. Supported types: image/gif, image/jpeg, image/png, image/webp, video/mp4, video/quicktime, video/webm. Maximum file size is 524288000 bytes (500 MiB). A larger file returns error_code cloud_file_too_large. Any other type returns error_code cloud_file_type_unsupported. Google Ads images are limited to 5242880 bytes (5 MiB). No writes.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | ||
| limit | No | ||
| parent_id | No | Drive folder id copied from an earlier item parent_id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/destructiveHint annotations, it discloses non-obvious behavior: empty folders are absent, no month parameter exists, null modified_time can't be month-bucketed, indexed_at is ingestion time not file month, and which error_codes block ad use. This is exactly the context 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?
Long but dense—nearly every sentence carries a constraint (size limits, type list, error semantics). Front-loaded with the core purpose, though the size/type enumeration 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?
No output schema exists, so the description carries return-value burden and does: it names the returned fields (modified_time, indexed_at, error_code) and their semantics. Combined with the constraints, an agent has enough to call and interpret results.
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 only 25% (only parent_id documented in-schema), and the description richly explains parent_id (not a URL, not an upload-library id) plus the deliberate absence of a month filter. However, q and limit remain unexplained in both schema and description, leaving gaps for two of four params.
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 ('List files from the Google Drive cloud-library index') and explicitly distinguishes itself from creatives_list_folders and the upload library. An agent can identify the 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?
Explicitly negates two alternatives (creatives_list_folders, upload library) and clarifies parent_id's provenance and what it is not. Lacks a positive 'use this when...' framing, but the negative routing is strong enough to steer selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_account_eligibility_snapshotBRead-onlyInspect
Read account status, currency, timezone and base evidence. Discovery does not grant permission; restricted qualifications remain unverified.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description earns credit by adding behavioral context beyond that: discovery does not confer permission and restricted qualifications stay unverified, which tells the agent how to interpret the returned status.
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 sentences, no filler, with the read-only scope stated first and the caveat second. It is tight, though 'base evidence' and 'discovery' are jargon that cost clarity without costing many 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?
For a low-risk read-only tool with no output schema and only two parameters, this is minimally sufficient: the agent knows what it reads and that results carry caveats. However, what 'base evidence' actually returns and how the snapshot relates to eligibility remain unspecified, leaving a real gap for a discovery-style 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 only 50%: customer_id is documented in the schema, but connection_context (a strict mctx_v1_ pattern token) is undocumented. The description adds nothing about either parameter, so it fails to compensate for the coverage 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?
The description gives a concrete verb ('Read') and enumerates the resource it returns: account status, currency, timezone and 'base evidence'. That is clear enough for an agent to know what it fetches, but nothing distinguishes it from nearby siblings like google_ads_accounts_list, google_ads_accounts_pull or setup_get_status, and the connection to 'eligibility' in the tool name is never made 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?
There is no statement of when to call this versus the many accounts_* and setup_* siblings. The line about discovery not granting permission is a caveat about interpreting results, not guidance on tool selection. An agent must guess its place in the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_accounts_listARead-onlyInspect
List accessible Google Ads accounts (synced data by default). Manager accounts are listed but cannot be queried for metrics; only enabled non-manager accounts can.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | Read source; defaults to synced data ('ledger'). 'live' sweeps the API. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuine behavioral context beyond that: manager accounts appear in the result but are unusable for metrics, and results come from synced data unless overridden. Return format and pagination remain undisclosed, keeping it out of 5 territory.
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 sentences with no filler; the verb+resource leads and the caveat follows. Slightly dense in the second sentence, but every 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?
With no output schema and only partial parameter documentation, the description should say more about what the returned accounts look like and how connection_context must be supplied. The metric-eligibility caveat is valuable but leaves the auth parameter and result shape 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 coverage is 50%: the 'source' enum is fully documented in the schema, and the description reinforces its default ('synced data by default'). connection_context has no description anywhere, and the description does not compensate. Baseline 3 is appropriate since the schema carries most of the parameter meaning.
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 ('List accessible Google Ads accounts') and scopes it to synced data by default. It does not name or contrast with the closely related siblings google_ads_accounts_pull, google_ads_accounts_sync, or google_ads_connections_list, so the agent must infer which of these to pick.
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 a meaningful precondition for downstream use ('only enabled non-manager accounts can' be queried for metrics), which implies the tool's role. But it never says when to call this versus the pull/sync/connections siblings, and there is no explicit exclusion guidance, leaving selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_accounts_pullADestructiveInspect
Pull structure, daily and entity metrics and the creative inventory for the named already-registered accounts only (no account discovery), under the same daily quota and time budget as any sync. Accounts outside this tenant return customer_not_owned. Requires mcp.assets.refresh and allow_pull; no Google mutation. Then read google_ads_insights_query_daily or the overview. An account with no rows in a window after a completed pull reads as empty, not needs_sync.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_ids | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: required permissions (mcp.assets.refresh, allow_pull), the customer_not_owned error for out-of-tenant accounts, quota/time budget behavior, and the empty-vs-needs_sync reading rule. 'No Google mutation' clarifies that refresh is local, consistent with destructiveHint=true referring to the local snapshot rather than Google state. It could still say more about what the local refresh destroys/overwrites.
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?
Single dense paragraph, front-loaded with the purpose and scope before the operational caveats. Sentences like the error-code and permission clauses earn their place, though the run-on packaging of quota, permissions, downstream reads, and empty semantics is heavier than needed.
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 write-to-local tool with no output schema and 2 undocumented params, the description covers most of what an agent needs: scope, permissions, quota, error behavior, and downstream read targets. The one gap is connection_context, which is neither in the schema nor the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the parameter burden. It implies customer_ids ('named already-registered accounts', out-of-tenant returning customer_not_owned) but gives no format or limit guidance, and never mentions connection_context at all. Partial compensation only.
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 (Pull) plus exactly what is pulled: structure, daily and entity metrics, and the creative inventory. It immediately scopes the resource to 'named already-registered accounts only (no account discovery)', distinguishing it from discovery/list siblings, so an agent can identify 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?
Clear when-to-use context: named already-registered accounts, no discovery, then read google_ads_insights_query_daily or the overview afterward. It also names the quota/time-budget constraints and the empty-vs-needs_sync interpretation. It does not explicitly contrast itself with the sibling google_ads_accounts_sync, which is the closest alternative, so the routing is slightly incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_accounts_syncADestructiveInspect
Explicitly sync account registration for one owned connection after needs_sync or a live-discovered account is missing from the ledger. Requires mcp.assets.refresh and allow_pull. Reuses account discovery; no metrics/assets pull, Google mutation or MCC linking. Then re-read google_ads_accounts_list before account reads. Do not infer missing Google access from customer_not_owned.
| Name | Required | Description | Default |
|---|---|---|---|
| connection_ref | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, and the description adds rich context beyond that: required permissions (mcp.assets.refresh, allow_pull), the exact scope boundary (no metrics/assets pull, no Google mutation, no MCC linking), and the fact that it reuses account discovery. This tells the agent precisely what state changes and what does not.
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 a tight, front-loaded block with no padding; each sentence carries prerequisite, scope, or sequencing information. It is dense with internal jargon (needs_sync, allow_pull, customer_not_owned) but does not waste 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?
No output schema exists, yet the description covers preconditions, scope limits, and the required post-sync re-read, so an agent knows how to invoke and sequence it. It stops short of full completeness only because parameter roles remain unstated.
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 implies connection_ref identifies 'one owned connection', but connection_context is never explained, and neither parameter's format/role is clarified beyond the regex patterns already in the schema. This leaves most parameter 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?
States a specific verb and resource ('sync account registration for one owned connection') with explicit scope. It clearly separates itself from siblings like google_ads_accounts_list and the mutation/prepare-confirm pairs by naming what it does not do (no metrics/assets pull, no Google mutation, no MCC linking).
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 triggering conditions ('after needs_sync or a live-discovered account is missing from the ledger'), prerequisites ('Requires mcp.assets.refresh and allow_pull'), a follow-up action ('re-read google_ads_accounts_list before account reads'), and a caution ('Do not infer missing Google access from customer_not_owned'). This is a full when/when-not/next-step specification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_ad_group_create_confirmCInspect
Confirm an ad-group-create draft.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds only 'confirm' and 'draft'—no side effects, irreversibility, auth requirements, or rate-limit context beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is appropriately terse for a confirm operation, though its extreme brevity overlaps with under-specification that other dimensions capture.
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 in a prepare/confirm pair, with a required but undocumented draft_id and no output schema, the description is too thin. It omits how the draft is produced and what confirmation actually results in.
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 33% (only customer_id is documented). The description mentions no parameters at all, so draft_id and connection_context receive no semantic clarification from either the description or 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 verb and resource, but 'confirm' is ambiguous about whether it executes creation, validates approval, or finalizes a draft. It does not differentiate from google_ads_ad_group_create_prepare or other confirm siblings, leaving the actual effect vague.
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 mention that it should follow google_ads_ad_group_create_prepare, and no prerequisites or alternatives are named. The agent must infer the prepare/confirm workflow from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_ad_group_create_prepareCInspect
Prepare creating a paused ad group.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| campaign_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| ad_group_type | No | ||
| cpc_bid_micros | No | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is partly covered. The description does add one genuinely useful behavioral fact beyond the annotations: the created ad group is paused. It does not, however, explain the prepare/confirm handshake, whether anything is mutated before confirmation, or how long the preparation remains valid.
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?
It is a single front-loaded sentence with no wasted words, which is structurally fine. But at six words it is under-specified rather than truly concise, omitting information the caller 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 six-parameter mutation tool with 17% schema coverage, no output schema and no annotations covering the workflow, the description omits the two-step prepare/confirm contract, all non-trivial parameter meaning, and what the caller receives or does after preparing. It leaves too much to be inferred from sibling names.
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 17% (just customer_id), so the description carries the burden of clarifying name, campaign_id, ad_group_type, cpc_bid_micros and connection_context. It adds nothing about any parameter — not the micros unit for cpc_bid_micros, not the allowed ad_group_type values, and not the meaning of connection_context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Prepare creating a paused ad group" names a verb (prepare) and a resource (ad group), and the word "paused" hints at the resulting state. However, the bare verb "prepare" is ambiguous on its own (draft? task? step in a workflow?) and the description never distinguishes this tool from its obvious sibling google_ads_ad_group_create_confirm, so an agent cannot fully route between them from the text 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 when-to-use guidance, no statement that this is the first step of a prepare/confirm pair, and no mention of prerequisites such as an existing campaign or the need to later call the confirm tool. The only routing signal comes from the sibling tool names, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_ad_status_update_confirmADestructiveInspect
After explicit approval, change one supported ad's status to PAUSED or ENABLED. Accepts only a matching draft from google_ads_ad_status_update_prepare; verifies operation kind, approval integrity and state drift before sending. Uncertain outcomes must be reconciled without replay.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, and the description adds real behavioral context beyond that: approval gating, draft matching, verification of operation kind/approval integrity/state drift before sending, and a no-replay rule for uncertain outcomes.
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 dense sentences, front-loaded with the action and gate, followed by acceptance constraints and the failure-handling rule. 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, no-output-schema mutation tool this covers approval, validation, and uncertain-outcome handling well. It stops short of describing error/failure surfaces or what a successful confirmation returns, which 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 description coverage is only 33% – only customer_id is documented in the schema. The description adds meaning for draft_id by tying it to the prepare step, but says nothing about customer_id or the connection_context token, so it only partially compensates for the coverage 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 ('change one supported ad's status'), names the exact allowed values (PAUSED or ENABLED), and explicitly ties itself to the sibling google_ads_ad_status_update_prepare, distinguishing it from the other confirm 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 explicit preconditions ('After explicit approval', 'Accepts only a matching draft from google_ads_ad_status_update_prepare'), an explicit prohibition ('Uncertain outcomes must be reconciled without replay'), and the reconciliation route instead of retrying.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_ad_status_update_prepareAInspect
Prepare to change one supported ad's status to PAUSED or ENABLED. Saves a private draft after Google validate-only and a complete affected-resource snapshot; does not send the change. Show the draft for explicit approval before calling google_ads_ad_status_update_confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only tell the agent this is a non-read, non-destructive, closed-world operation. The description adds substantive behavior beyond that: it runs Google validate-only, saves a private draft plus a complete affected-resource snapshot, and explicitly does NOT send the change — the key fact an agent needs to avoid assuming the mutation happened.
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 purpose and behavior, ending with the required next action. No filler or redundant restatement of 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?
With no output schema, the description carries the return-value burden and does explain the artifact produced (a private draft, validated, with a resource snapshot) and how to act on it. The remaining gap is the unexamined 'supported ad' restriction and how the agent should verify eligibility.
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 33% (only customer_id is documented; body fields and connection_context are not). The description partially compensates by identifying the target as a single supported ad and its status values, but it never explains customer_id format, connection_context, or what 'supported' excludes. Baseline 3 given the partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Prepare to change ... ad's status to PAUSED or ENABLED'), scopes it to 'one supported ad', and names the enum values. It is clearly distinguishable from its confirm sibling, which it names 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?
The description lays out the full workflow condition: call this to stage the change, show the draft for explicit approval, then call google_ads_ad_status_update_confirm. Use-of-alternative is explicit rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_ad_text_update_confirmADestructiveInspect
After explicit approval, replace Display, Demand Gen or App ad headlines and descriptions across the explicitly listed ad groups. Accepts only a matching draft from google_ads_ad_text_update_prepare; verifies operation kind, approval integrity and state drift before sending. Uncertain outcomes must be reconciled without replay.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known. The description adds real value beyond that: it requires explicit approval, discloses internal verification of operation kind, approval integrity and state drift, and states a no-replay reconciliation policy for uncertain outcomes. It does not say whether the replacement is reversible or what a partial failure returns, keeping 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?
Three tight sentences, each carrying distinct information: action/scope first, then the input precondition, then verification and reconciliation behavior. No filler and the most decision-relevant fact (approval required) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive confirm tool with no output schema and only safety annotations, the description covers the approval gate, validation steps, and failure-handling policy an agent needs. It stops short of describing the success/failure response shape or partial-application semantics, which are minor gaps given no output schema exists.
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 low (33%): only customer_id is documented in the schema. The description meaningfully clarifies draft_id by requiring a matching draft from the prepare tool, but says nothing about connection_context and adds no format or constraint detail for customer_id. Partial compensation for a low-coverage schema lands at the baseline.
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 (replace) and resource (Display, Demand Gen or App ad headlines and descriptions) with an explicit scope (the explicitly listed ad groups). It also names the sibling it depends on (google_ads_ad_text_update_prepare), so an agent can distinguish it from the prepare step and the many other *_confirm tools 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?
Gives a clear precondition ("After explicit approval") and a hard input constraint ("Accepts only a matching draft from google_ads_ad_text_update_prepare"). It also implies the correct path for ambiguous results ("reconciled without replay"), though it never names google_ads_mutation_reconcile as the alternative, leaving the agent to infer the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_ad_text_update_prepareAInspect
Prepare to replace Display, Demand Gen or App ad headlines and descriptions across the explicitly listed ad groups. Saves a private draft after Google validate-only and a complete affected-resource snapshot; does not send the change. Show the draft for explicit approval before calling google_ads_ad_text_update_confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=false; the description adds substantial behavioral context beyond them: it saves a private draft, runs Google validate-only, takes a complete affected-resource snapshot, and crucially does not send the change. That is exactly what an agent needs to know about a mutation-prepare tool. Auth requirements and rate limits are not covered, hence not 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?
Two tight sentences with the core scope front-loaded ahead of the workflow and safety note. No filler; slightly dense but every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nested-body mutation-prepare tool with no output schema, the description covers the workflow, the safety stance (no send), and the handoff to confirm. It could add a note on what the draft/snapshot returns, but nothing essential 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 only 33%, so the description must carry param meaning. It maps well to headlines, descriptions, and affected_ad_group_ids ('explicitly listed ad groups'), but leaves ad_id and the ad_format enum (DISPLAY/DEMAND_GEN/APP) implicit. It partially, not fully, compensates for the coverage 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?
Specific verb (replace) plus resource (Display/Demand Gen/App ad headlines and descriptions) and scope (explicitly listed ad groups). It also names the sibling google_ads_ad_text_update_confirm, so an agent can distinguish this prepare step from the confirm step 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?
Explicitly states the next step and the condition that gates it: show the draft for approval before calling google_ads_ad_text_update_confirm. It does not state when NOT to use this tool or other alternatives, but the prepare/confirm routing is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_analysis_families_listCRead-onlyInspect
List supported deep-analysis families.
| Name | Required | Description | Default |
|---|---|---|---|
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered and the description carries a lower bar. It nonetheless adds nothing beyond the name: no indication of whether families are static or connection-scoped, and no return shape (there is no output schema either).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, which is proportionate for a simple read-only listing tool. The sparseness is a completeness problem more than a structural one, so it stays at 4 rather than 5.
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, no-output-schema listing tool, an agent still needs to know what a "family" is and what the response looks like, neither of which is stated. Safety behavior is covered by annotations, so the remaining gap is the opaque connection_context and undefined return values.
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 parameter connection_context has 0% schema description coverage and a strict regex pattern, yet the description says nothing about it — not whether it is optional, what a connection context represents, or when it must be supplied. With a parameter present the baseline-4 zero-parameter allowance does not apply, and 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?
The description gives a specific verb and resource ("List supported deep-analysis families"), which is clearly distinct from the sibling google_ads_deep_analysis_query/export that consume those families. It stops short of naming that relationship explicitly, so an agent must infer that this is the enumeration step preceding a deep-analysis query.
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, and no mention of the two obvious sibling tools (google_ads_deep_analysis_query, google_ads_deep_analysis_export) that the returned families presumably feed into. The agent is left to guess why it would call this list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_asset_diagnosticsCRead-onlyInspect
Read policy and observed asset coverage evidence with campaign metrics. Missing policy is not approval; no invented per-asset attribution.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, non-destructive, and non-open-world, so the safety profile is covered. The description adds genuine behavioral context beyond that: the output is evidence rather than approval, and per-asset attribution should not be fabricated. That tells the agent how to treat the results, not just that the call is safe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the scope statement is front-loaded before the caveat. The phrasing of the caveat ('no invented per-asset attribution') is terse enough to be slightly cryptic, but nothing is wasted.
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 nested-body diagnostics tool with no output schema and two-thirds of parameters undocumented, the description does not explain the shape or meaning of the result, what distinguishes 'policy' coverage from 'observed' coverage, or what the date range controls. Annotations cover safety but the functional gaps remain large.
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 33% — just customer_id ('10-digit Google Ads customer id'). The nested body fields (campaign_id, date_from, date_to) and connection_context carry no description in either the schema or the tool description, and the description contributes no parameter meaning at all, so it fails to compensate for the low coverage.
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 verb ('Read') and resource area ('policy and observed asset coverage evidence with campaign metrics') are stated, so an agent knows this is a read-oriented diagnostics call. However, 'coverage evidence' is abstract jargon and the description never differentiates it from close siblings such as google_ads_asset_inventory_list or google_ads_asset_requirements_get. The agent can guess the domain but not what it actually returns.
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 statement and no named alternative among the many asset-related siblings. The only guidance present ('Missing policy is not approval') is an interpretation caveat about the data, not a condition for selecting this tool over another.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_asset_group_link_confirmADestructiveInspect
After explicit approval, link an existing asset to a Performance Max asset group. Accepts only a matching draft from google_ads_asset_group_link_prepare; verifies operation kind, approval integrity and state drift before sending. Uncertain outcomes must be reconciled without replay.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the write/safety profile is covered. The description adds genuinely new context beyond that: approval gating, operation-kind and state-drift verification before sending, and the no-replay reconciliation rule. It stops short of describing what a partial failure leaves behind or the response shape, so not 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?
Three tight sentences with no filler; the precondition leads and the verification/reconciliation behavior follows. Every clause carries operational weight.
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 confirm tool with no output schema, the description covers approval, input provenance, pre-send validation, and the uncertain-outcome rule. It omits what success returns or how a rejected draft surfaces, which keeps it short of 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 coverage is only 33%, with customer_id described and draft_id and connection_context bare. The description compensates for draft_id by defining it as a draft produced by the prepare tool, but adds nothing about connection_context or the customer id format beyond the schema. Partial compensation justifies the mid baseline.
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 ('link an existing asset to a Performance Max asset group') and names the sibling that produces its required input (google_ads_asset_group_link_prepare). An agent can distinguish it from google_ads_asset_link_confirm and the unlink variants 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 an explicit precondition ('After explicit approval'), restricts valid input to a matching draft from the prepare tool, and prescribes behavior for the uncertain-outcome case ('reconciled without replay'). When-to-use, prerequisite, and failure-path guidance are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_asset_group_link_prepareAInspect
Prepare to link an existing asset to a Performance Max asset group. Saves a private draft after Google validate-only and a complete affected-resource snapshot; does not send the change. Show the draft for explicit approval before calling google_ads_asset_group_link_confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, destructiveHint=false, openWorldHint=false. The description adds genuinely new behavior: Google validate-only execution, a private persisted draft, a 'complete affected-resource snapshot', and the fact that no change is actually sent. That resolves the ambiguity of a mutating-looking tool that does not mutate.
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, all load-bearing: what it does, what it persists/does not send, and the required approval step. The purpose is front-loaded and 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 prepare/stage tool with no output schema, the description covers the workflow, the side effect (draft + snapshot) and the handoff to confirm, and 'Show the draft' implies the draft is returned. It stops short of describing what the draft object contains or how long it stays valid, which is the only remaining 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 only 33% (only customer_id is documented), so the description must compensate. It conveys that an asset and an asset group are involved, mapping to asset_id and asset_group_id, but says nothing about field_type (the enum that determines placement) or connection_context. Partial compensation only.
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 ('prepare to link an existing asset to a Performance Max asset group') and explicitly distinguishes itself from the sibling google_ads_asset_group_link_confirm, which it names. An agent can pick it correctly 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?
Gives explicit ordering: call this to stage, show the draft for approval, then call google_ads_asset_group_link_confirm. It also names the alternative sibling, so the when-to-use and when-to-use-next conditions are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_asset_group_unlink_confirmADestructiveInspect
After explicit approval, remove an existing asset link from a Performance Max asset group. Accepts only a matching draft from google_ads_asset_group_unlink_prepare; verifies operation kind, approval integrity and state drift before sending. Uncertain outcomes must be reconciled without replay.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation profile is covered. The description adds substantive context beyond that: pre-send verification of operation kind, approval integrity and state drift, plus the rule that uncertain outcomes must be reconciled rather than replayed. It stops short of disclosing reversibility or downstream effects on the Performance Max 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?
Three dense sentences, no filler. The approval prerequisite and draft binding come first, then verification behavior, then failure handling, which is the correct order for an agent deciding whether it may invoke this.
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 covers the invocation precondition, the pre-send checks and the failure-mode policy. What remains missing is what the tool returns on success and how the caller should reconcile an uncertain result.
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 33% (only customer_id is documented). The description gives some meaning to draft_id by tying it to the prepare sibling's output, but connection_context and its mctx_v1 format are explained nowhere, and no parameter formats, constraints or error conditions are added.
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: remove an existing asset link from a Performance Max asset group. This distinguishes it from the many sibling confirm/prepare pairs, including the non-asset-group google_ads_asset_unlink_confirm and the opposite-direction google_ads_asset_group_link_confirm.
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?
Explicit prerequisites and routing: 'After explicit approval' and 'Accepts only a matching draft from google_ads_asset_group_unlink_prepare'. An agent knows it must first call the prepare sibling and cannot substitute a draft from a different operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_asset_group_unlink_prepareAInspect
Prepare to remove an existing asset link from a Performance Max asset group. Saves a private draft after Google validate-only and a complete affected-resource snapshot; does not send the change. Show the draft for explicit approval before calling google_ads_asset_group_unlink_confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing that the tool runs a Google validate-only pass, captures a complete affected-resource snapshot, stores a private draft, and does not transmit the change. That behavior (a prepare/draft that is non-destructive but writes state, consistent with readOnlyHint=false and destructiveHint=false) is not inferable from the 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?
Three sentences, front-loaded with purpose, then behavior, then the required follow-up step. Every sentence adds information; 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?
With no output schema and a nested body object, the description still conveys what the tool produces (a private draft plus snapshot) and the required downstream call. The main remaining gap is the undocumented field_type enum, which the agent must infer from the schema 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 only 33% (just customer_id), and the description adds no parameter-level meaning. The nested body fields asset_group_id, asset_id, and especially field_type (an enum of link types) are never explained in prose, so the description does not compensate for the coverage 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: prepare removal of an existing asset link from a Performance Max asset group. It is clearly distinguishable from the sibling google_ads_asset_group_link_prepare (adds vs removes) and google_ads_asset_unlink_prepare (asset-group level vs asset level). No tautology.
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 workflow: prepare a draft, show it for approval, then call google_ads_asset_group_unlink_confirm. The named alternative and the gating condition are clear, though it never states when NOT to choose this over the plain asset-level unlink prepare.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_asset_group_update_confirmADestructiveInspect
After explicit approval, replace a Performance Max asset group's status or final URLs. Accepts only a matching draft from google_ads_asset_group_update_prepare; verifies operation kind, approval integrity and state drift before sending. Uncertain outcomes must be reconciled without replay.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and openWorldHint=false, but the description adds genuinely non-redundant behavior: it verifies operation kind, approval integrity and state drift before sending, and it warns that uncertain outcomes must not be replayed. That replay/idempotency guidance is not derivable from the annotations and is the highest-value content here.
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 gated on approval before any mechanism detail. Slightly dense with unglossed terms like 'operation kind' and 'state drift', but no filler 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 destructive confirm tool with no output schema, the description covers the approval gate, input provenance, pre-send verification and failure handling. It stops short of saying what the agent should do next on an uncertain outcome beyond 'reconcile', which is a small gap against the 33% param 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 coverage is only 33% (only customer_id is described), so the description carries extra burden. It does clarify that draft_id must be a 'matching draft' produced by the prepare tool, which adds real meaning, but connection_context and the draft_id format remain undocumented in both description and 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: 'replace a Performance Max asset group's status or final URLs.' It is immediately distinguishable from its prepare sibling, which the description names explicitly, so an agent knows this is the execution half of a two-step flow.
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 precondition ('After explicit approval'), a hard input constraint ('Accepts only a matching draft from google_ads_asset_group_update_prepare'), and an anti-pattern ('Uncertain outcomes must be reconciled without replay'). It lacks a pointer to the concrete reconciliation path (e.g. google_ads_mutation_reconcile), which is the only missing routing hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_asset_group_update_prepareAInspect
Prepare to replace a Performance Max asset group's status or final URLs. Saves a private draft after Google validate-only and a complete affected-resource snapshot; does not send the change. Show the draft for explicit approval before calling google_ads_asset_group_update_confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover safety flags (write-but-not-destructive, non-open-world); the description adds real behavior: a private draft is saved, Google validate-only runs, a complete affected-resource snapshot is captured, and no change is sent. That is meaningful context 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?
Three sentences, purpose front-loaded, each sentence adding distinct information (what it does, how it validates/stores, what to do next). 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?
Complete enough for a prepare tool: purpose, validation, snapshot, and next step are stated, and no output schema exists to duplicate. It does not say what the response contains (e.g., a draft/plan identifier) or how the draft is retrieved, which is a minor gap for the approval handoff.
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 33% (only customer_id is documented), so the description must compensate. It does name the two key body fields (status, final URLs), but says nothing about asset_group_id, the enum values, the URL array limits, or connection_context. Baseline 3 for partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Prepare to replace a Performance Max asset group's status or final URLs,' naming the exact mutable fields and entity. It is immediately distinguishable from the sibling google_ads_asset_group_update_confirm, which it names.
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 sequencing: prepare first, then 'Show the draft for explicit approval before calling google_ads_asset_group_update_confirm.' It also states the negative condition ('does not send the change'), so the agent knows not to use this for execution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_asset_inventory_listARead-onlyInspect
Read the last complete stored creative inventory, with freshness, filters and snapshot-bound pagination. Missing sync is unknown, not empty; never pulls Google live. Use only returned continuation with the same customer and filters.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| search | No | ||
| page_size | No | ||
| asset_type | No | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| continuation | No | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds substantive behavior beyond that: snapshot-bound pagination, the 'unknown, not empty' semantic for unsynced data, and the no-live-pull guarantee. It omits freshness/rate-limit or auth details, so not 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?
Three tight sentences with the core purpose front-loaded and no filler. Each sentence adds a distinct, load-bearing constraint (snapshot source, unknown-vs-empty semantics, pagination rule).
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 read tool with no output schema and low schema coverage, the description supplies the key behavioral caveats but leaves most parameters unexplained. It is adequate for the tool's core semantics but incomplete for correct invocation of its filters.
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 only 14% (just customer_id documented), so the description must carry parameter meaning. It only partially does: it explains continuation must be paired with the same customer and filters, but sort, search, page_size, asset_type and connection_context remain undocumented 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: reading the last complete stored creative inventory, and clarifies it is a stored snapshot rather than a live Google pull. It does not name the closest sibling (google_ads_assets_list) to disambiguate, so an agent must infer which inventory source it wants.
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 an explicit rule for continuation reuse ('same customer and filters') and warns that missing sync means unknown, not empty, and that it never pulls live data. However, it never states when to prefer this tool over siblings like google_ads_assets_list or creatives_list_cloud, leaving the selection decision implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_asset_link_confirmCDestructiveInspect
Confirm an asset-link draft.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered structurally. The description adds nothing beyond that: it does not state that the draft becomes live, whether the action is reversible, whether the draft is consumed, or any permission requirements. With annotations carrying the safety burden, the added context here is close to zero.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or repetition. It is appropriately short for its content, though brevity here stems partly from 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 mutation tool with no output schema and two-thirds of its parameters undocumented, the definition is materially incomplete. The essential workflow facts — that a draft_id from a prepare step is required and that this commits the change — are absent, leaving the agent dependent on inference from sibling names.
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 33% — customer_id is documented, but draft_id and connection_context are not. The description adds no parameter meaning whatsoever; the phrase "asset-link draft" only faintly hints that draft_id identifies a previously prepared draft. It does not compensate for the coverage 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?
The description names a specific verb and resource ("confirm" + "asset-link draft"), so it is more than a bare tautology. However, it never explains what confirming actually does (applies/commits the prepared draft) and gives no differentiation from the many sibling confirm tools (asset_group_link_confirm, asset_unlink_confirm, etc.) beyond the resource word in the name.
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. Critically, the description never says a draft must first be created via the sibling google_ads_asset_link_prepare tool, nor what conditions make confirming appropriate versus abandoning the draft. The agent must infer the entire prepare/confirm workflow from naming conventions alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_asset_link_prepareCInspect
Prepare linking an asset to customer/campaign/ad group/asset group.
| Name | Required | Description | Default |
|---|---|---|---|
| target_id | No | ||
| field_type | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| target_type | Yes | ||
| connection_context | No | ||
| asset_resource_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the safety profile is partly covered. The description adds nothing beyond the word 'Prepare' – it does not say that no change is applied until the matching confirm tool runs, whether the prepared state expires, or what the tool returns to feed the confirm call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, naming the operation and its scope immediately. It is efficient, though the brevity is more under-specification than concision given the six-parameter surface.
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 six-parameter, four-required mutation-staging tool with no output schema and near-zero schema descriptions, the single sentence leaves major gaps: the confirm follow-up, the meaning of field_type/target_type values, and identification of the asset. Not sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17% (customer_id is the sole documented property), so the description must compensate. It lightly maps target_type by naming the four target kinds, but field_type, asset_resource_name, and target_id are given no meaning, and the expected connection_context pattern is never referenced.
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 ('Prepare linking') and resource ('an asset') plus the four candidate target scopes, so the intent is clear. What is missing is differentiation from the very similar sibling google_ads_asset_group_link_prepare, which the listed targets ('asset group') visibly overlap 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?
No when-to-use guidance, no mention that this is the staging half of a prepare/confirm pair (google_ads_asset_link_confirm is a sibling), and no exclusions relative to asset_group_link_prepare or asset_unlink_prepare. The agent must infer the workflow from the naming pattern alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_asset_requirements_getCRead-onlyInspect
Return asset requirements for a Google Ads channel type.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | 10-digit Google Ads customer id. | |
| channel_type | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so the safe-read profile is covered. The description adds that results are scoped by channel type, but says nothing about output shape or whether requirements vary by customer, which would matter for a lookup 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?
One short, front-loaded sentence with no waste. Appropriately sized, though it is perhaps too terse given the gaps in parameter semantics.
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 three-parameter lookup with no output schema and poor schema coverage needs more than one sentence. The absent enum for channel_type and the unexplained connection_context parameter are material omissions for an agent trying 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?
Schema coverage is only 33%: customer_id is documented, but channel_type has no description and no enum, and connection_context is unexplained. The description does not compensate by listing valid channel types or explaining the connection_context requirement.
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 asset requirements for a channel type. Clear what it does, but doesn't differentiate from nearby creation-prep tools like google_ads_creation_capabilities_get or asset_upload_prepare which also touch asset requirements.
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 alternates such as google_ads_creation_capabilities_get, google_ads_field_metadata, or the asset_upload_prepare flow. The agent must infer that this is a lookup step before asset creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_assets_listCRead-onlyInspect
List a bounded page of Google Ads creative assets for one customer.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum assets returned. The response reports total and truncation metadata. | |
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds only that the page is bounded; it says nothing about ordering, default page contents, or truncation behavior beyond what the schema's limit description provides.
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 compact sentence with no filler and the scope constraint ('one customer') front-loaded. It is perhaps too terse given the surrounding operational toolset, but nothing is wasted.
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-list tool in a large mutation-oriented sibling set, the description omits how results are ordered, what truncation metadata looks like (no output schema), and which alternative to use for inventory versus page listing. Annotations carry only the safety profile, so the gap is significant.
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 67% and the schema itself documents limit and customer_id, including bounds and truncation metadata. connection_context is undocumented in both schema and description, so the description adds no parameter meaning beyond the schema baseline.
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 (Google Ads creative assets) scoped to one customer. It is distinguishable from asset_upload/asset_link and from asset_inventory_list, though it doesn't explicitly differentiate from the closely named inventory 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?
No when-to-use guidance, no exclusions, and no pointer to alternatives such as google_ads_asset_inventory_list or google_ads_asset_diagnostics. The description only supplies purpose, not selection context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_asset_unlink_confirmCDestructiveInspect
Confirm an asset-unlink draft.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the risky nature is signalled structurally. The description adds nothing beyond that: it does not say the unlink is irreversible, what the asset is being detached from, or whether a mutation receipt is returned. It essentially restates the title.
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, front-loaded sentence with zero filler. It is concise but that brevity comes at the cost of being under-specified for a destructive operation, so it earns a middling score rather than a high one.
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 output schema and two of three parameters undocumented, the description is far too thin. It omits the prerequisite draft, the effect of confirmation, and any result information, leaving real gaps an agent would need to 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 only 33% (only customer_id is documented), and draft_id and connection_context are undocumented. The description mentions 'draft' but adds no format, source, or meaning for draft_id, so it fails to compensate for the coverage 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?
The description states a specific verb and resource ('Confirm an asset-unlink draft'), so the agent knows this finalizes a pending unlink. However, it does not distinguish itself from the obvious sibling google_ads_asset_unlink_prepare, nor does it explain what 'confirm' actually executes. It is minimally viable rather than 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 beyond the implicit requirement that a draft must already exist. The description never names google_ads_asset_unlink_prepare as the prerequisite step or explains when confirmation should be withheld, despite the whole family being built on a prepare/confirm workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_asset_unlink_prepareCInspect
Prepare unlinking an asset from customer/campaign/ad group/asset group.
| Name | Required | Description | Default |
|---|---|---|---|
| target_id | No | ||
| field_type | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| target_type | Yes | ||
| connection_context | No | ||
| asset_resource_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, which is somewhat counterintuitive for an 'unlink' operation but does signal that this call itself is non-destructive. The description adds nothing beyond restating the name: it does not explain that this stages a pending operation requiring confirmation, what state it leaves behind, or any permission 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?
A single, front-loaded sentence with no filler or repetition. It is efficient, though its terseness borders on under-specification for a 6-parameter mutation-staging 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 tool with 6 parameters, low schema coverage, and no output schema, the description is inadequate. It omits the confirm follow-up, the meaning of the target/field parameters, and any behavioral context, leaving an agent unable to invoke it confidently without inspecting 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 only 17% (just customer_id), and the description does not compensate. The target levels mentioned loosely hint at target_type, but target_id, field_type, asset_resource_name, and connection_context remain undocumented in both schema and description, including no allowed values for the string-typed target_type/field_type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Prepare unlinking') and resource ('an asset'), and enumerates the four target levels (customer/campaign/ad group/asset group). It is clearly understandable on its own, though it never explicitly distinguishes itself from the sibling google_ads_asset_unlink_confirm, leaving the prepare-vs-execute split to be inferred from the name.
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, nor any mention that a prepare step is normally followed by google_ads_asset_unlink_confirm. The two-step staging workflow that the naming convention implies is left entirely unstated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_asset_upload_confirmAInspect
Confirm an image asset upload by resubmitting the same base64 image data or the same gdrive: selection_key.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| base64_data | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| content_type | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false (a write) but destructiveHint=false, so the safety profile is already given. The description usefully adds that confirmation requires re-sending identical data, implying an idempotency/verification check, but says nothing about failure behavior on a payload mismatch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the confirmation mechanism is stated first and no redundant restatement of the name or title is present.
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 confirm step with no output schema and annotations covering safety, the description covers the core mechanic but omits the link to the prepare step and the draft_id it generates, leaving the agent to infer the workflow.
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 only 20% (customer_id alone is documented), so the description must carry more weight. It does clarify the semantics of base64_data (must be the same data) and the gdrive: prefix for selection_key, but draft_id and content_type remain 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?
Clear specific verb ('Confirm') and resource ('image asset upload'), and it names the exact payload mechanism needed (same base64 data or same gdrive: selection_key). It reads clearly as the second half of the prepare/confirm pair with google_ads_asset_upload_prepare, though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'resubmitting the same base64 image data or the same gdrive: selection_key' clause is real guidance on how to invoke it, but there is no statement of when to call this versus the prepare step, what happens if the data differs, or any precondition tied to draft_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_asset_upload_prepareBInspect
Prepare an image asset upload from base64 image data, or pass a gdrive: selection_key from creatives_list_cloud as base64_data. No Google mutate.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | ||
| base64_data | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| content_type | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so safety is partly covered; the description's 'No Google mutate' usefully clarifies that the non-read-only flag reflects internal staging rather than an external write. It says nothing about whether an approval/task handle is produced, whether the prepared upload expires, or what permissions are required.
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, front-loaded with the action and input forms, with the scope-limiting 'No Google mutate' note kept to a fragment. No redundancy, though the clipped fragment style slightly reduces 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?
With no output schema and no annotations explaining staging behavior, the description should say what preparation yields (e.g. a task/receipt id) and what the agent does next. It covers the input contract but leaves the outcome and confirm handoff unstated for a 5-parameter, 4-required 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 description coverage is only 20% (just customer_id), so the description must compensate. It does add real meaning for base64_data, which can be either raw base64 or a 'gdrive: selection_key' string, but filename, content_type and connection_context remain undocumented in both places.
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 ('Prepare an image asset upload') plus the accepted input forms, which cleanly distinguishes it from the sibling google_ads_asset_upload_confirm. It does not explicitly name that sibling, but the prepare/confirm naming and 'No Google mutate' make the stage 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?
Tells the agent two ways to supply the payload: raw base64 image data, or a 'gdrive: selection_key' obtained from creatives_list_cloud, which implicitly routes to that sibling for sourcing assets. It never states when not to use it or that a confirm step follows the prepare, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_audience_attributesBRead-onlyInspect
Read bounded native audience_attributes insight. Restricted services require fresh server-verified access and otherwise refuse. No writes or access grants.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so safety is covered. The description adds genuinely new behavioral context: restricted services demand fresh server-verified access and will refuse otherwise, and no writes or access grants occur. It stops short of defining what 'restricted' or 'fresh' mean, but it clears the lower bar set by 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?
Three tight sentences with the core read purpose front-loaded, followed by the access constraint and the no-write guarantee. Slightly jargon-heavy ('bounded native', 'fresh server-verified'), but nothing is 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?
No output schema exists and the input contains a required nested object with an enum-constrained dimension list, yet the description explains neither the request body shape nor the returned insight. For a tool with this schema complexity, the description leaves too much for the agent to infer.
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 33% — just customer_id is documented — and the description adds nothing about the nested body object, its required dimensions/query_text fields, the five-item dimension cap, or connection_context. With low coverage the description is expected to compensate and it 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 (Read) and resource (native audience_attributes insight), which maps directly onto the tool name and distinguishes it from sibling data tools such as google_ads_audience_dates and google_ads_insights_overview_query. It does not, however, explain what the insight actually contains or how it differs from the other insight/audience siblings, so the differentiation is only implicit.
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 an access precondition ('Restricted services require fresh server-verified access and otherwise refuse') but never says when to choose this tool over the many sibling insight and audience tools, nor when not to use it. Usage is only implied by the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_audience_datesCRead-onlyInspect
Read bounded native audience_dates insight. Restricted services require fresh server-verified access and otherwise refuse. No writes or access grants.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description does add real behavioral context beyond that: restricted services require fresh server-verified access and otherwise refuse, and there are no writes or access grants. The gap is that 'restricted services' is left undefined and no return/scope behavior is described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the purpose front-loaded and no filler. The phrasing is dense with undefined terms ('bounded', 'native', 'restricted services'), which costs a little clarity, but the structure is otherwise 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?
No output schema exists, so the description could carry more about what the insight returns, but it does not. For a read-only tool whose annotations already cover safety, it is minimally adequate, yet the empty body object and connection_context remain unexplained and the access precondition is vague. There are clear 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 only 33%: customer_id is documented, but body (an empty nested object) and connection_context (pattern-only) are undocumented in both schema and description. The description adds no parameter meaning whatsoever, so it fails to compensate for the low coverage. With effectively one meaningful documented parameter, this is below the baseline.
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 verb (Read) and a resource (audience_dates insight), so the general action is clear. However, 'bounded native audience_dates insight' is opaque jargon and the description never distinguishes this from close siblings like google_ads_audience_attributes or google_ads_benchmark_dates. An agent knows it reads something, but not clearly what or how it differs.
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 and no named alternative among the many audience/insight siblings. The only conditional statement ('Restricted services require fresh server-verified access and otherwise refuse') is a precondition, not a routing rule. The agent must infer usage 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.
google_ads_benchmark_datesCRead-onlyInspect
Read bounded native benchmark_dates insight. Restricted services require fresh server-verified access and otherwise refuse. No writes or access grants.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds that restricted services need fresh server-verified access and will otherwise refuse, which is genuine extra context about an auth/refusal behavior. It stops short of saying what happens on refusal or how fresh access is established.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, purpose front-loaded, no padding. But two of the sentences are vague or redundant — "No writes or access grants" merely re-states the readOnlyHint annotation, and the access sentence is opaque rather than informative.
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, 33% param coverage, and a nested empty body object leave the agent without enough information to invoke this confidently. The description never explains what a "benchmark_dates" result contains or how it relates to the other benchmark endpoints.
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 33% (only customer_id is documented). The body is an empty object with additionalProperties=false and connection_context has a pattern but no prose, so the description's single word "bounded" is the only hint about what the body accepts or what the bounding constraint is. It does not compensate for the coverage 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 verb ("Read") and a resource ("benchmark_dates insight"), so the basic action is legible. However, it largely restates the tool name and does nothing to distinguish it from the four sibling benchmark tools (benchmark_locations, benchmark_metrics, benchmark_products, benchmark_sources). What "dates" returns versus the other benchmark dimensions is left to inference.
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 call this versus the benchmark_sources/locations/metrics/products siblings, nor any precondition tied to customer_id or connection_context. The only usage-adjacent sentence ("Restricted services require fresh server-verified access and otherwise refuse") is a cryptic constraint rather than guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_benchmark_locationsCRead-onlyInspect
Read bounded native benchmark_locations insight. Restricted services require fresh server-verified access and otherwise refuse. No writes or access grants.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so "No writes or access grants" is largely redundant. The description does add one piece of context beyond annotations: that restricted services require fresh server-verified access and will otherwise refuse, which hints at an auth failure mode. It says nothing about rate limits, response shape, or what "bounded" means.
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 action front-loaded, so it is not bloated. But the compression comes at the cost of clarity — phrases like "bounded native" and "access grants" are cryptic rather than efficient, so the brevity is only partially earned.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a nested object parameter, an empty body schema, 33% schema coverage, and no output schema, the description is far too thin. It omits what the body should contain, what the response returns, and how this tool relates to its benchmark 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 only 33% (just customer_id), and the body parameter is an empty object with additionalProperties=false whose required fields or payload shape are entirely undocumented. The description provides no parameter information at all, so it fails to compensate for the low schema coverage.
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 verb ("Read") and a resource ("benchmark_locations insight"), so the basic action is discernible. However, the qualifiers "bounded native" are opaque jargon, and nothing distinguishes this from the many sibling benchmark tools (benchmark_dates, benchmark_metrics, benchmark_products, benchmark_sources). An agent must fall back on the tool name alone to tell it apart.
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 only guidance offered is an access constraint ("Restricted services require fresh server-verified access and otherwise refuse"), which is a precondition, not a when-to-use. No alternative tool is named and no scenario or exclusion is described, so the agent gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_benchmark_metricsCRead-onlyInspect
Read bounded native benchmark_metrics insight. Restricted services require fresh server-verified access and otherwise refuse. No writes or access grants.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful context beyond that: restricted services need fresh server-verified access and otherwise refuse, and it explicitly disclaims writes and access grants. This helps the agent anticipate refusal behavior, though return format is still unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the read-only nature and access constraint front-loaded; little waste. It loses a point for vague filler like 'bounded native' that consumes space without adding meaning.
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?
There is no output schema and the tool takes a rich nested body whose sub-fields are undocumented. The description omits what metrics are returned, the shape of the response, and guidance on the body payload, so it is not complete enough for an agent to call this correctly without additional assumptions.
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 33% (customer_id is documented, the nested body and connection_context are not), so the description should compensate and instead mentions no parameters at all. The required nested body fields (location_id, industry_vertical_id, product_codes, dates, currency_code) are left entirely to the schema, which does not describe them.
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 verb and resource ('Read ... benchmark_metrics insight'), so the core purpose is inferable. However, the phrasing is jargon-heavy ('bounded native') and it offers no differentiation from the several sibling benchmark tools (google_ads_benchmark_dates, _locations, _products, _sources), leaving the agent to guess what is unique here.
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 and no comparison to alternatives. The sentence about 'restricted services require fresh server-verified access' is an access precondition rather than a statement of when this tool should be selected over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_benchmark_productsCRead-onlyInspect
Read bounded native benchmark_products insight. Restricted services require fresh server-verified access and otherwise refuse. No writes or access grants.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds context beyond that: it discloses an authorization precondition (restricted services need fresh server-verified access and otherwise refuse) and reinforces scope ('No writes or access grants'). It stops short of explaining what 'bounded' means or what the refusal looks like, hence a 4 rather than 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?
Three short sentences, front-loaded with the core read purpose before the caveats, with no filler. It loses a point only because the opening clause 'bounded native benchmark_products insight' is compressed to the point of being cryptic rather than 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?
With no output schema and no explanation of what the 'benchmark_products insight' actually contains, the description leaves the agent unable to anticipate the return shape or the semantics of the body argument. For a 3-parameter tool with a nested object and low schema coverage, more explanation is required than is 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 33%: only customer_id is documented ('10-digit Google Ads customer id'), while body and connection_context carry no description. The description adds nothing about any parameter, so it does not compensate for the gap. Notably it never explains the body object at all, which appears to have no properties, leaving the agent unclear on what to send.
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 verb ('Read') and a resource ('benchmark_products insight'), so the general intent is recoverable. But 'bounded native' is unexplained jargon, and the tool is not distinguished from its close siblings google_ads_benchmark_dates/locations/metrics/sources beyond the shared 'benchmark_products' label. An agent can guess the domain but not precisely what this returns.
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 choose this tool over the four other google_ads_benchmark_* siblings, nor when-not to use it. The only conditional ('Restricted services require fresh server-verified access and otherwise refuse') is an auth precondition, not usage routing. No guidance is provided for the actual selection decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_benchmark_sourcesBRead-onlyInspect
Read bounded native benchmark_sources insight. Restricted services require fresh server-verified access and otherwise refuse. No writes or access grants.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/destructiveHint=false, so 'No writes or access grants' largely restates structured data. The one genuine addition is that restricted services demand fresh server-verified access and otherwise refuse, which discloses an auth/failure behavior not in 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?
Three short, front-loaded sentences with no filler; the read action leads and constraints follow. Slightly dense jargon ('bounded native') costs it the top 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?
For a read-only tool with no output schema and safety annotations, the description covers the access constraint but omits return-shape expectations and leaves the empty required 'body' parameter unaddressed. Adequate but with visible 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 only 33%, yet the description says nothing about any parameter. The required 'body' object is empty with additionalProperties=false, which is unexplained, and connection_context's purpose is left to the schema pattern 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?
States a specific verb ('Read') and resource ('benchmark_sources insight'), and the resource name cleanly separates it from the benchmark_dates/locations/metrics/products siblings. The qualifier 'bounded native' is jargon that adds little precision, but the core action is identifiable.
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 choose this tool over the sibling benchmark_* tools, nor when it is appropriate versus google_ads_insights_* tools. The 'restricted services require fresh server-verified access' line is a precondition, not usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_bidding_update_confirmCDestructiveInspect
Confirm a bidding update draft.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=false, so the safety profile is covered structurally. The description adds nothing beyond that: it does not state that the change is applied irreversibly, what gets mutated, or whether confirmation consumes/invalidates the draft.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. It is appropriately terse, though the brevity borders on under-specification rather than deliberate economy.
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 in a two-phase confirm flow with no output schema and sparse parameter documentation, the description omits prerequisites (draft must exist), the irreversible nature of confirmation, and any indication of what the agent receives back. It is not sufficient to call the tool correctly with confidence.
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 only 33% (only customer_id is documented). draft_id and connection_context have no schema description, and the description supplies no meaning for them, nor does it clarify that draft_id comes from the prepare step. The description fails to compensate for the low coverage.
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 ('Confirm') and resource ('bidding update draft'), and the name pair with google_ads_bidding_update_prepare makes the two-phase flow evident. However, the description never explains what confirming actually does (execute/apply the drafted bid change), so it is clear but not fully differentiated in the text itself.
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 draft must first exist via google_ads_bidding_update_prepare, and no mention of when confirmation is inappropriate. The agent must infer the entire prepare-then-confirm workflow from sibling naming.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_bidding_update_prepareCInspect
Prepare updating a campaign bidding strategy.
| Name | Required | Description | Default |
|---|---|---|---|
| roas | No | ||
| strategy | Yes | ||
| campaign_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| amount_micros | No | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is partly covered. However, the description never explains the defining behavioral trait of a 'prepare' tool in this family — that it stages a change and does not apply it until confirm — nor does it mention permissions or approval 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?
It is a single clean, front-loaded sentence with no filler, which is structurally fine. But at eight words it is under-specified rather than concise — the brevity comes at the cost of all actionable detail.
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 six-parameter mutation-staging tool with no output schema and near-empty parameter coverage, the description should carry the workflow and parameter burden. It omits the confirm counterpart, what the prepare step returns, and the meaning of the strategy/roas/amount_micros inputs.
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 17% (just customer_id), leaving strategy, roas, amount_micros, campaign_id and connection_context undocumented. The phrase 'bidding strategy' loosely gestures at the strategy param but supplies none of the allowed strategy values or the ROAS/micros relationship, so it fails to compensate for the coverage 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?
The description pairs a specific verb ('Prepare updating') with a specific resource ('a campaign bidding strategy'), so the agent knows exactly which object is touched. It does not, however, distinguish this from its sibling google_ads_bidding_update_confirm or explain what 'prepare' produces, 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?
There is no when-to-use guidance, no mention of the required follow-up confirm step, and no reference to alternatives despite a near-identical confirm sibling in the tool list. The agent must infer the two-phase workflow entirely from naming.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_billing_get_setupBRead-onlyInspect
Billing setup for one customer (ledger by default). No invoice retrieval.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | Read source; defaults to synced data ('ledger'). 'live' sweeps the API. | |
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds real value by disclosing the default read source and explicitly bounding scope ('No invoice retrieval'), but it says nothing about what the returned setup contains or freshness/auth requirements beyond the ledger/live distinction.
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, front-loaded sentences with no filler. It is efficient, though the terse phrasing ('Billing setup for one customer') leans on the tool name to disambiguate that this is a read.
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 tool with annotations covering safety and no output schema, the description covers scope but not the shape of the returned billing setup. It is adequate but leaves a gap an agent would want filled given the missing 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 67%: customer_id and source are documented in the schema, while connection_context has only a pattern and no description. The description reinforces the source default but adds no syntax or meaning beyond the schema, so the baseline 3 fits.
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: retrieving the billing setup for one customer. The parenthetical '(ledger by default)' and 'No invoice retrieval' sharpen scope, but no sibling tool is named for contrast, 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?
'No invoice retrieval' is a useful when-not exclusion, and the '(ledger by default)' note implies the synced-data read path. However, there is no explicit statement of when to call this versus other account/billing-adjacent tools, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_budget_update_confirmCDestructiveInspect
Confirm a budget update draft.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description is not the sole source of the safety profile. Still, for a destructive mutation it adds nothing: it does not say the live budget is actually changed, whether the change is reversible, or that confirmation is final.
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 short sentence with the action front-loaded and zero filler. It is efficient, though arguably under-specified rather than genuinely well-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 destructive mutation with no output schema, 33% parameter coverage, and an unaddressed sibling (shared budget confirm), the description is too thin. It omits the prepare-then-confirm workflow and any note on what the confirmation actually commits.
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 33% — only customer_id is documented, while draft_id and connection_context have no schema descriptions. The description's mention of 'draft' loosely maps to draft_id but adds no format, origin, or provenance detail to compensate for the 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?
The verb 'Confirm' and resource 'budget update draft' are specific enough to tell this is the commit step of a prepare/confirm pair. However, it does not distinguish itself from the near-identical sibling google_ads_shared_budget_update_confirm, so the scope (campaign budget vs shared budget) is left to the reader.
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 word 'draft' hints that a prior prepare step is required, but the description never names google_ads_budget_update_prepare or states the precondition that a draft_id must already exist. There is no when-to-use vs when-not-to-use guidance at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_budget_update_prepareCInspect
Prepare updating a campaign daily budget.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| amount_micros | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the agent knows this is a non-destructive write path. The description adds nothing beyond that: it does not say whether the call actually changes the budget or only stages it, whether the change awaits a separate confirm, or whether it is idempotent. No contradiction with annotations, but no added behavioral value either.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no padding or redundancy. It is not verbose, but its brevity comes at the cost of specification rather than from efficient communication, so it sits at the minimum-viable level rather than being a model of concision.
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-preparation tool with four parameters, no output schema, and a low-coverage input schema, the description omits everything an agent needs beyond the bare action: the unit of amount_micros, the required follow-up confirm step, and what the prepare call returns. The burden falls almost entirely on the agent's inference from sibling names.
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 25% (just customer_id). The description contributes no parameter meaning at all, and critically omits that amount_micros is denominated in micros (1/1,000,000 of a currency unit), which is the single most error-prone field here. 'connection_context' is likewise left semantically 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 verb ('Prepare updating') and a resource ('a campaign daily budget'), which is more specific than a tautology. However, it does not explain what 'prepare' actually produces (a draft, a task, a confirmation token) and offers no differentiation from the sibling 'google_ads_budget_update_confirm' or from 'google_ads_shared_budget_update_prepare', leaving the agent to infer the tool's role from naming 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 the confirm variant, no prerequisite checks (customer access, connection context), and no indication of what must happen after the prepare call. The two-phase prepare/confirm workflow is only guessable from sibling names, not from the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_campaign_create_confirmCInspect
Confirm a campaign-create draft.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is partly covered. The description adds nothing beyond that: it does not say whether confirmation executes the real campaign creation, whether it is irreversible, whether it is idempotent, or what happens if the draft is stale. For a mutation step this is 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?
It is a single front-loaded sentence, but here brevity is achieved by omission rather than economy. The description is under-specified rather than genuinely concise, so the short form 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?
For a mutation tool with no output schema and only a third of its parameters documented, the description is far too sparse. An agent lacks the lifecycle context, prerequisite, and parameter meaning needed to invoke 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?
Schema description coverage is only 33%: customer_id is documented, but draft_id and connection_context are not. The description adds no parameter meaning whatsoever, so it fails to compensate for the low coverage, leaving two of three parameters 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: confirming a campaign-create draft. An agent can tell this is the approval step of a draft lifecycle. It does not, however, name or contrast with the paired google_ads_campaign_create_prepare tool or any sibling, so it stops short of full differentiation.
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. The description never says that a draft must first be produced by google_ads_campaign_create_prepare, nor when confirmation is required versus skipped. The prepare/confirm pairing is only inferable from the tool name, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_campaign_create_prepareAInspect
Prepare creating a paused campaign and budget. A SEARCH campaign requires location_ids and language_ids; without them the answer is needs_input, never a worldwide campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| roas | No | ||
| strategy | No | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| channel_type | Yes | ||
| language_ids | No | language_constant ids. Required; there is no implicit all-languages default. | |
| location_ids | No | geo_target_constant ids (country, region or city) to target. Required; resolve names with google_ads_geo_targets_suggest. | |
| amount_micros | No | ||
| budget_micros | Yes | ||
| geo_target_type | No | Defaults to PRESENCE (only people in the location). | |
| targeting_source | No | Where the targeting came from; shown in the approval summary. Defaults to user. | |
| connection_context | No | ||
| excluded_location_ids | No | geo_target_constant ids to exclude. | |
| contains_eu_political_advertising | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond the annotations: the campaign is created PAUSED, and the tool returns needs_input rather than silently defaulting to a worldwide campaign. With destructiveHint=false and readOnlyHint=false already covered by annotations, these extra disclosures are meaningful context about what the prepare step does and refuses to do.
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 sentences, zero filler, and the most important constraint (SEARCH needs targeting, never worldwide) is front-loaded after the core purpose. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter, 5-required creation-prepare tool with no output schema, the description covers the critical gotcha but omits budget/name/channel essentials and what the prepare step returns (an approval plan). Adequate but with clear gaps for something this complex.
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 only 43% schema description coverage across 14 params, the description compensates partially by reinforcing the location_ids/language_ids requirement, but it says nothing about roas, strategy, channel_type, geo_target_type, targeting_source, excluded_location_ids, or the required contains_eu_political_advertising flag. Baseline 3 given the schema does describe the two most nuanced params.
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 (prepare/create) and resources (paused campaign + budget), which cleanly distinguishes it from the sibling google_ads_campaign_create_confirm that executes. It doesn't name that sibling explicitly, but the prepare/confirm pairing is signaled by the name and description.
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 one concrete conditional rule (SEARCH campaigns require location_ids and language_ids, else needs_input), which is genuinely useful usage guidance. However, it never states when to call this versus campaign_create_confirm, or what the prerequisite flow is, so 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.
google_ads_campaign_dates_update_confirmADestructiveInspect
After explicit approval, replace a campaign's start and end dates in its account timezone. Accepts only a matching draft from google_ads_campaign_dates_update_prepare; verifies operation kind, approval integrity and state drift before sending. Uncertain outcomes must be reconciled without replay.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true and readOnly=false, but the description goes well beyond them: it discloses timezone semantics, the approval-gating requirement, the internal verifications performed (operation kind, approval integrity, state drift), and the no-replay reconciliation rule for uncertain outcomes. This is unusually rich behavioral context for a mutation 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?
Three tightly packed sentences with the approval precondition front-loaded, followed by acceptance rules and the reconciliation constraint. No filler; every clause carries operational meaning.
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 output schema, the description covers the key gaps: preconditions, verification behavior, and failure handling via the no-replay reconciliation instruction. It lacks any indication of what a successful response contains, but the essential calling context is 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 coverage is only 33% (only customer_id is documented). The description partially compensates by clarifying that draft_id must be a matching draft produced by the prepare tool, but it says nothing about connection_context or its expected format, leaving a third of the parameters undocumented 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 precise verb and resource ('replace a campaign's start and end dates in its account timezone') and explicitly names the sibling it pairs with (google_ads_campaign_dates_update_prepare), so an agent can distinguish it from the prepare step and from other date-related 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 a clear precondition ('After explicit approval') and a hard routing constraint ('Accepts only a matching draft from ...prepare'), which tells the agent exactly when this tool is callable. It stops short of stating when-not-to-use or what to do if the draft does not match, so it is 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.
google_ads_campaign_dates_update_prepareAInspect
Prepare to replace a campaign's start and end dates in its account timezone. Saves a private draft after Google validate-only and a complete affected-resource snapshot; does not send the change. Show the draft for explicit approval before calling google_ads_campaign_dates_update_confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=false and readOnlyHint=false, but the description adds crucial context beyond them: it saves a private draft, runs Google validate-only, snapshots affected resources, and does NOT send the mutation. That is a substantial behavioral disclosure. It does not mention required auth scopes or rate limits, so not 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?
Two sentences, front-loaded with purpose, second sentence covers the draft/approval lifecycle. No filler and every clause adds 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 non-mutating prepare tool with no output schema, the description covers the lifecycle (validate → draft → approval → confirm) and scope. Missing details like where the draft lives or its TTL, but the confirmation workflow is clear enough for an agent to act 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 only 33%; customer_id is documented but body's campaign_id/start_date/end_date are not described. The description mentions the resource ('campaign's start and end dates') but doesn't clarify date formats, timezone handling beyond 'account timezone', or why end_date is required with start_date optional. Baseline 3 given partial schema help.
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 ('replace a campaign's start and end dates') with a precise scope modifier ('in its account timezone'). Clearly distinguishes from its confirm sibling and other prepare tools by naming the follow-up tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it ('Prepare to replace… does not send the change') and names the alternative/next step ('Show the draft for explicit approval before calling google_ads_campaign_dates_update_confirm'). The when-not-send behavior is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_connection_permissions_setCDestructiveInspect
Set pull/create/decision policy for one owned Google connection.
| Name | Required | Description | Default |
|---|---|---|---|
| allow_pull | No | ||
| allow_create | No | ||
| allow_decision | No | ||
| connection_ref | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, so the agent knows this is a mutating, destructive operation. The description adds nothing beyond that: it never says whether setting a flag to false revokes existing capabilities, whether the change is idempotent, what authorization level is needed, or how it interacts with in-flight operations — exactly the context a destructiveHint warrants.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the scope constraint lands first. It is efficient but arguably too compressed for a destructive five-parameter tool, leaving no room for the clarifications 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 destructive mutation with no output schema, zero schema description coverage, and five parameters, the description is substantially under-specified. It omits permission prerequisites, the effect of disabling each flag, and identifier requirements, leaving the agent to guess before making a destructive 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%, so the description carries the full burden. It names the three policy axes (pull/create/decision) corresponding to allow_pull/allow_create/allow_decision, but gives no meaning for true vs false, and leaves connection_ref and connection_context (including their required ID formats) 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?
The description gives a specific verb (Set) and resource (pull/create/decision policy) scoped to 'one owned Google connection', which maps cleanly onto the allow_pull/allow_create/allow_decision parameters and separates it from google_ads_connections_list. It does not explicitly name or contrast with the nearest sibling, google_ads_customer_route_permissions_set, so the reader must infer the scope difference.
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, or alternative routing guidance. The only constraint offered is the embedded phrase 'one owned Google connection', which implies ownership but never states prerequisites or what to do for non-owned connections.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_connections_listCRead-onlyInspect
List safe Google connection health and operation policy fields.
| Name | Required | Description | Default |
|---|---|---|---|
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false, and openWorldHint=false, covering the safety profile. The description's only additional signal is the ambiguous word 'safe', which is never explained, and it omits any statement about return shape or filtering despite there being no 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?
A single front-loaded sentence with no padding or preamble. It is efficient, though the word 'safe' adds noise rather than 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 tool with an unexplained required-format parameter and no output schema, the description is too thin: it neither clarifies the opaque connection_context identifier nor explains what 'health' and 'operation policy fields' contain. Annotations cover the safety profile, but the core semantics remain underspecified.
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 parameter connection_context has 0% schema description coverage and is not mentioned at all in the description. The constraint-heavy pattern (^mctx_v1_[0-9a-f]{64}$) is left entirely unexplained, so the description does nothing to compensate for the coverage 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?
It states a verb ('List') and a resource area ('Google connection health and operation policy fields'), so the general action is clear. However, the qualifier 'safe' is undefined and the phrase 'health and operation policy fields' is jargon that doesn't pin down what is actually returned, nor distinguish it from siblings like google_ads_accounts_list or google_ads_connection_permissions_set.
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 prerequisites, and no mention of the adjacent sibling tools (e.g. google_ads_connection_permissions_set). The agent is left to infer the call context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_conversion_action_create_confirmBDestructiveInspect
Confirm one prepared WEBPAGE conversion-action create draft.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the agent knows this is a mutating operation, and 'Confirm' is consistent with that. The description adds the draft-confirmation concept but says nothing about what actually gets created, whether the operation is idempotent, or permission 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?
A single tight sentence with the verb and object front-loaded and no filler. It is arguably under-specified rather than verbose, but as pure structure it is clean.
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 no output schema, the description should say more about the outcome of confirming (what is created, what happens to the draft) and the required upstream prepare step. Annotations carry the safety profile, but the workflow context is thin for a destructive 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 only 33%: only customer_id is documented. The description alludes to a 'draft' (hinting at draft_id) but does not explain draft_id's origin or what connection_context is, so it fails to compensate for the coverage 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 (Confirm) and resource (WEBPAGE conversion-action create draft), and the word 'prepared' plus 'draft' implicitly ties it to the prepare sibling. It is distinguishable from google_ads_conversion_action_create_prepare, but it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Confirm one prepared ... draft' implies the two-step prepare/confirm workflow, but does not explicitly instruct the agent to call google_ads_conversion_action_create_prepare first or state when this tool should not be used. Usage is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_conversion_action_create_prepareBInspect
Prepare one WEBPAGE conversion action. Runs validate-only and defaults primary_for_goal to false.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | No | ||
| category | No | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| counting_type | No | ||
| default_value | No | ||
| primary_for_goal | No | ||
| connection_context | No | ||
| default_currency_code | No | ||
| always_use_default_value | No | ||
| view_through_lookback_window_days | No | ||
| click_through_lookback_window_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the full safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), lowering the burden. The description adds that execution is validate-only and that primary_for_goal defaults to false, which is useful, but it says nothing about what the prepared artifact is, its lifetime, or how it is consumed next.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the purpose front-loaded and no filler. It is efficient as written, though the extreme brevity for a 12-parameter tool borders on under-specification rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, 8%-covered, no-output-schema creation tool, the description omits the confirm follow-up, the prepared-plan identifier, prerequisites such as connection_context, and almost all parameter meaning. An agent could invoke it, but not confidently.
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 8% across 12 parameters, so the description must carry the load, yet it only clarifies two things: the type is WEBPAGE and primary_for_goal defaults to false. Ten parameters (name, category, counting_type, default_value, currency, lookback windows, connection_context, always_use_default_value) remain unexplained 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 (prepare) plus resource and type scope ('one WEBPAGE conversion action'), so it is distinguishable from sibling create/update/remove conversion-action tools. It does not explicitly name the confirm counterpart, but the prepare/confirm naming pattern makes intent legible.
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?
'Runs validate-only' implies this is a dry-run staging step ahead of google_ads_conversion_action_create_confirm, which is actionable context. However, no explicit when-to-use, when-not-to-use, or named alternative is given, so usage must be inferred from the naming convention.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_conversion_action_remove_confirmBDestructiveInspect
Confirm permanent removal of one prepared WEBPAGE conversion action.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description does add meaning beyond that by stressing 'permanent removal' of exactly 'one' action, but it omits any warning that the operation is irreversible or what happens to the referenced draft.
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 tight sentence with the key constraint ('permanent') front-loaded and zero filler. Nothing could be trimmed without losing 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 destructive confirm step with no output schema and two undocumented parameters, the description is adequate but thin. It establishes the action and its permanence, yet omits the prerequisite prepare step and the meaning of draft_id, leaving gaps an agent must infer.
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 only 33% (only customer_id is documented) and the description supplies nothing about draft_id or connection_context. The agent gets no explanation of where draft_id comes from or that it references the prepared mutation, so the description fails to compensate for the coverage 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?
The description names a specific verb (confirm permanent removal), the resource (conversion action), and scopes it to a single prepared WEBPAGE conversion action. It implicitly pairs with the remove_prepare sibling via 'prepared', though it never names that sibling 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?
Usage is only implied: 'prepared' hints this is the second half of a prepare/confirm workflow, but the description never states that a prior google_ads_conversion_action_remove_prepare call is required, nor when not to call it. No alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_conversion_action_remove_prepareBInspect
Prepare permanent removal of one owned WEBPAGE conversion action.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No | ||
| conversion_action_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is mostly covered. The description adds that removal is 'permanent' and limited to 'owned WEBPAGE' actions, but omits what the prepare step creates (e.g., a plan id) or that a confirm call is required before any actual deletion.
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?
Single front-loaded sentence with no filler; every word contributes to scope and action.
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-prepare tool with no output schema and low schema coverage, the description is too thin: it doesn't tell the agent how prepare relates to confirm, what a successful prepare returns, or the required connection context. The agent can identify the tool but lacks the workflow context to invoke it confidently.
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 only 33% (customer_id is documented, conversion_action_id and connection_context are not). The description adds a meaningful constraint for conversion_action_id — it must reference an owned WEBPAGE conversion action — but leaves connection_context and the required format of conversion_action_id 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 ('Prepare permanent removal') and resource ('one owned WEBPAGE conversion action'), scoping the entity type and ownership. The 'Prepare' prefix distinguishes it from the paired confirm tool, but it never names that sibling to make the two-step workflow 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?
No when-to-use guidance, alternatives, or prerequisites are given beyond the implied prepare-before-confirm pattern. It does not mention google_ads_conversion_action_remove_confirm or other removal-prepare siblings, leaving selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_conversion_actions_listBRead-onlyInspect
List conversion actions for the effective Google Ads conversion customer. Returns the conversion_customer_id required for writes.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds genuine value by disclosing the key output side effect (yielding conversion_customer_id needed for writes) and the 'effective' customer scoping, but says nothing about pagination, limit behavior, or result shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no padding, and the core action plus its scoping qualifier are front-loaded. The second sentence is slightly terse ('required for writes' leaves the specific write workflow implicit) but 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?
Without an output schema, the description usefully names one returned value, but omits the rest of the return shape, pagination/limit semantics, and how connection_context should be supplied. Adequate for a simple list tool but with clear 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 only 33% – only customer_id is documented. The description adds no meaning for the two undocumented parameters (limit with its default/max, and connection_context with its mctx_v1 pattern), so it fails to compensate for the coverage gap on a 3-parameter tool.
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 conversion actions') plus a scoping qualifier ('for the effective Google Ads conversion customer'), which tells an agent this lists existing conversion actions rather than creating/updating one of the many sibling conversion_action_* tools. It stops short of explicitly naming the confirm/prepare siblings it complements, so it is clear but not maximally differentiated.
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 'Returns the conversion_customer_id required for writes' implies this is a prerequisite call before conversion-action write flows, which is useful implied usage. However, it never states when to choose this over alternatives (e.g., accounts_list), nor any preconditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_conversion_action_update_confirmBDestructiveInspect
Confirm one prepared WEBPAGE conversion-action update draft.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation/safety profile is covered. The description adds no behavioral context beyond the workflow framing: it never says the live conversion action is mutated, that the change is irreversible, whether the draft is consumed, or what happens when confirmation fails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the object of the action and its scope are immediately clear.
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 output schema and two undocumented parameters, the description is too thin. An agent cannot tell what confirming applies, whether it is reversible, or how to recover from a failed/expired draft.
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 only 33% — customer_id is documented but draft_id and connection_context are not. The description only alludes to 'one prepared ... draft', giving no format, source, or lifetime for draft_id and no explanation of connection_context, so it fails to compensate for the coverage 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 (Confirm) and a specific resource (a prepared WEBPAGE conversion-action update draft), scoping it to one draft, one action type. It is distinguishable from its prepare counterpart by the verb alone, though it never names the 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?
The phrase 'prepared ... draft' implies the confirm step must follow a prior prepare call, which is useful implied workflow guidance. There is no explicit when-to-use/when-not, no stated alternative, and no mention of what to do if the draft is stale or missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_conversion_action_update_prepareCInspect
Prepare a typed update to one WEBPAGE conversion action. Type is immutable.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| type | No | ||
| status | No | ||
| category | No | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| counting_type | No | ||
| default_value | No | ||
| primary_for_goal | No | ||
| connection_context | No | ||
| conversion_action_id | Yes | ||
| default_currency_code | No | ||
| always_use_default_value | No | ||
| view_through_lookback_window_days | No | ||
| click_through_lookback_window_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), lowering the bar. The description usefully adds that this is a preparation step and that type is immutable, but does not disclose what preparation yields (a staged mutation, a token for confirm, validation-only) or whether any resource is actually changed.
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, front-loaded sentences with no filler: the action is stated first, the key constraint second. Nothing is redundant. It is terse to the point of under-specification, but not bloated.
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-preparation tool with no output schema, low schema coverage, and a required prepare→confirm handshake, the description omits far too much: which fields are updatable, what preparation returns, and how the confirm step consumes it. An agent cannot call this correctly without opening the schema and guessing at the workflow.
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 7% — customer_id is the sole documented parameter — so the description carries the burden and largely fails. It conveys only that type is a fixed WEBPAGE and immutable, leaving name, status, category, counting_type, values, lookback windows, and connection_context unexplained beyond bare 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: 'Prepare a typed update to one WEBPAGE conversion action.' The prepare/confirm pairing with sibling google_ads_conversion_action_update_confirm and the create/remove siblings makes the resource scope clear. It does not explicitly distinguish itself from the confirm step, so it falls 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?
No when-to-use, when-not-to-use, or alternative guidance. The two-phase prepare/confirm workflow that the sibling set implies is never mentioned, nor is any prerequisite (e.g., that a confirm call follows). The agent must infer the workflow from sibling naming alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_copy_ad_confirmCInspect
Confirm an ad-copy draft.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, so the agent knows this is a non-destructive mutation. The description adds nothing beyond that: it does not say whether confirming consumes a pending draft, whether it is reversible, whether it requires the prepare step first, or what happens on success/failure. No annotation contradiction.
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 short sentence that is front-loaded, so there is no waste. But it is undersized for a mutation tool with a workflow dependency; brevity here reflects under-specification rather than tight conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-read-only mutation with no output schema, 3 params, and low schema coverage, the description should at minimum explain the prepare-then-confirm relationship and the effect of confirmation. None of that is present, leaving the agent to guess how 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 only 33% — only customer_id is documented in the schema. draft_id and connection_context are undocumented in both schema and description, and the description lists no parameters or formats, so the gap is not compensated.
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 verb (confirm) and resource (ad-copy draft), so the basic action is inferable. However it gives no differentiation from the large family of sibling *_confirm tools or from its obvious pair google_ads_copy_ad_prepare, and does not explain what 'confirm' actually does to the draft.
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 google_ads_copy_ad_prepare or any other confirm tool. The prepare/confirm workflow, which is clearly the intended usage pattern given the sibling naming, is never mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_copy_ad_prepareCInspect
Prepare copying a responsive search ad into a target ad group.
| Name | Required | Description | Default |
|---|---|---|---|
| headlines | No | ||
| final_urls | No | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| descriptions | No | ||
| source_ad_id | Yes | ||
| connection_context | No | ||
| target_ad_group_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so safety is partly covered. The description's use of 'Prepare' usefully signals that the copy is not committed by this call, adding context beyond the annotations, but it omits what gets staged, whether source ad settings (headlines/URLs/descriptions) are carried over, and what the caller receives.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words; the resource and target are stated immediately. It is efficient, though so terse that it under-specifies relative to the tool's 7-parameter surface.
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, no-output-schema mutation-staging tool with undocumented params, one sentence is inadequate. There is no explanation of the prepare/confirm workflow, where the resulting plan/task id comes from, or how the optional override arrays interact with the source ad.
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 only 14% (just customer_id documented) across 7 parameters, so the description must compensate and does not. It says nothing about source_ad_id, target_ad_group_id, or the optional headline/final_url/description override arrays, leaving their role completely 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: 'Prepare copying a responsive search ad into a target ad group.' Combined with the sibling google_ads_copy_ad_confirm, an agent can infer the two-phase staging pattern. It does not explicitly name the confirm sibling or explain what 'prepare' returns, 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?
No when-to-use guidance and no mention of alternatives. Critically, it never says this is the first half of a prepare/confirm pair that must be followed by google_ads_copy_ad_confirm, which is the single most important usage fact for a 'prepare' tool in this family.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_creation_capabilities_getARead-onlyInspect
Discover implemented campaign types, exact prepare/confirm tools, deployment gates and asset workflows for one owned customer. Availability is not authorization or Google eligibility.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it a safe read (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is low. The description still adds real behavioral context: it discloses what is actually returned (campaign types, prepare/confirm tool names, deployment gates, asset workflows) and warns that 'availability is not authorization or Google eligibility', which guards against misuse. It omits return shape and any pagination/rate details.
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 sentences, no filler, with the discovery scope front-loaded and the caveat held back as a qualifier. Every clause carries information (returned categories, customer scope, non-authorization warning).
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?
There is no output schema, so the description must convey the return surface; it lists the categories of information discoverable but not their structure or shape. Combined with an undocumented connection_context and an unstated call-ordering relationship to the eligibility snapshot, it is adequate but leaves real gaps for an agent deciding how to use the result.
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 50%: customer_id is documented in the schema as a 10-digit id, while connection_context carries only a pattern. The description adds the constraint that the customer must be an 'owned' one, which is meaningful context the schema does not state. Baseline 3 is appropriate given the schema does most of the 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 (discover) and enumerates exactly what is returned: implemented campaign types, the exact prepare/confirm tools, deployment gates, and asset workflows for one customer. That scope cleanly separates it from the many google_ads_*_prepare/_confirm siblings, though it never names an alternative 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 trailing caveat implicitly contrasts this tool with google_ads_account_eligibility_snapshot ('Availability is not authorization or Google eligibility'), and 'one owned customer' implies a scoping precondition. But there is no explicit statement of when to call this versus the eligibility snapshot or the individual prepare/confirm tools, so usage is only inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_creator_channelsCRead-onlyInspect
Read bounded native creator_channels insight. Restricted services require fresh server-verified access and otherwise refuse. No writes or access grants.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the read-only nature is covered. The description does add genuine behavioral context by disclosing a failure mode ('restricted services ... otherwise refuse') and access requirements, though 'No writes or access grants' largely restates 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?
Three short, front-loaded sentences with no filler. It is efficient, though terms like 'bounded' and 'native' spend words without adding clarity.
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 tool with a required nested body object and no output schema, the description omits what the returned insight contains and gives no indication of the body semantics. With only 33% schema coverage, the description is too thin to make the tool reliably callable.
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 33%: only customer_id is documented, while the nested body fields (channel_ids, country_ids, planning_group) and connection_context carry no descriptions. The description adds no meaning about any parameter, so it fails to compensate for the coverage 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?
The description names a read operation and a resource ('creator_channels insight'), which distinguishes it from mutation siblings. However, 'bounded native ... insight' is vague jargon that doesn't tell an agent what data is actually returned or how it differs from adjacent insight tools like google_ads_audience_attributes or google_ads_trending_topics.
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 and no named alternative among the many sibling insight/attribute tools. The only contextual hint is that restricted services need fresh server-verified access, which is a precondition rather than usage orientation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_customer_route_permissions_setCDestructiveInspect
Set pull/create/decision policy for one owned connection/customer route.
| Name | Required | Description | Default |
|---|---|---|---|
| allow_pull | No | ||
| customer_id | Yes | ||
| allow_create | No | ||
| allow_decision | No | ||
| connection_ref | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose destructiveHint=true and readOnlyHint=false, so the safety profile is partly covered, but the description adds almost nothing beyond them. It does not say whether disabling a flag revokes existing access, whether the change is reversible, what permissions are required to set another party's policy, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. It is efficient, though its brevity contributes to the missing behavioral and parameter detail rather than reflecting genuine economy of expression.
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 mutation with no output schema, 0% parameter coverage, and no annotation-supplied detail about effects. For a permission-changing tool on a third-party ad account, the description omits the identity of the actor, the scope of the change, and the consequences of toggling each flag off.
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 6 parameters, so the description carries the full burden — and it only partially compensates by naming the three policy dimensions (pull/create/decision) that map to allow_pull/allow_create/allow_decision. connection_ref, customer_id, and connection_context are left entirely unexplained, as is what happens when a boolean is omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Set") and resource ("pull/create/decision policy") scoped to one connection/customer route, which is far better than a tautology. It fails to distinguish this from the near-identical sibling google_ads_connection_permissions_set, and the phrase "customer route" is jargon left undefined, capping it below 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?
No when-to-use, when-not-to-use, or prerequisite guidance. With a sibling named google_ads_connection_permissions_set, the agent is given no basis for choosing between the two, which is exactly the situation usage guidance exists for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_deep_analysis_exportBInspect
Persist a single-use 10-minute download grant and return its CSV export URL for a bounded whitelisted deep-analysis query. No rows are returned in the MCP response.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| family | Yes | ||
| date_to | Yes | ||
| date_from | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavioral context beyond annotations: the grant is single-use with a 10-minute lifetime, scoped to a bounded whitelisted query, and crucially that no rows come back in the MCP response. This is important for an agent not to expect inline data. It does not, however, state auth/permission requirements or what happens on an expired/reused grant.
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 sentences, front-loaded with the core action and artifact, and the response-shape caveat placed last. 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?
With no output schema the description usefully states the return is a URL and not rows, and annotations are consistent (readOnlyHint=false matches a persisting grant). But the low parameter coverage and absence of auth/expiry-edge details leave meaningful gaps for a query tool with 6 params.
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 only 17% (just customer_id documented), and 6 parameters exist. 'Bounded' faintly hints at the limit cap and 'whitelisted' at the family enum-like constraint, but family, date_from, date_to, limit, and connection_context receive no meaning in the description, so the large coverage gap is not compensated.
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 specific verbs (persist, return) and the concrete artifact (a single-use download grant / CSV export URL) for a bounded whitelisted deep-analysis query. It is clear what the tool does, but it never names google_ads_deep_analysis_query, the obvious sibling it differs from, so an agent must infer the export-vs-inline 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 explicit when-to-use or when-not-to-use guidance. The presence of google_ads_deep_analysis_query suggests this is the export path for the same query family, but the description never says to pick this one when you want a file rather than rows. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_deep_analysis_queryCRead-onlyInspect
Run a whitelisted deep-analysis query for one customer.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| family | Yes | ||
| date_to | Yes | ||
| date_from | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| detail_level | No | summary returns totals plus at most 20 top rows; rows explicitly returns at most 200 rows. | summary |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds two useful behavioral facts beyond the annotations: the query is restricted to a whitelist of families, and it operates on exactly one customer. It says nothing about result caps, latency, or rate limits, so the added value is real 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?
A single front-loaded sentence with no filler or redundancy. It is efficient, though the brevity 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 7-parameter analytical query with no output schema, an opaque "whitelist" concept, and a sibling tool dedicated to listing valid families, the description leaves the agent without the information needed to construct a correct call. The read-only annotations cover safety, but the operational guidance 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 only 29% across 7 parameters: only customer_id and detail_level are documented, leaving family, date_from, date_to, limit, and connection_context unexplained in both schema and description. The description names no parameters and only obliquely implies the single-customer scope, so it fails to compensate for the coverage 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?
The description gives a verb ("Run") and a resource ("deep-analysis query") scoped to one customer, which is more than a tautology. However, "whitelisted" is left unexplained, and it does nothing to distinguish this tool from close siblings like google_ads_analysis_families_list, google_ads_deep_analysis_export, or google_ads_insights_query_daily. An agent cannot tell from this sentence alone when this tool is the right one.
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 mention of the prerequisite step of discovering valid `family` values (a sibling tool exists for that), and no routing to the export variant or the insights query siblings. The word "whitelisted" hints at a constraint but does not tell the agent what is allowed or how to satisfy it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_entity_remove_confirmADestructiveInspect
Confirm one irreversible entity-removal draft after explicit user approval.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=false. The description adds value beyond them by emphasizing the operation is 'irreversible' and gated on explicit user approval. It still omits details such as auth requirements or exactly what will be removed, but with annotation coverage this is a meaningful addition.
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 a single front-loaded sentence that clearly communicates the action, its irreversible nature, and the approval condition with 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?
For a destructive confirmation tool with no output schema and incomplete parameter descriptions, the definition is minimally adequate. Annotations cover the safety profile, but the description does not explain the prepare/confirm workflow, parameter roles, or post-confirmation 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 only 33%, with customer_id documented but draft_id and connection_context undocumented. The description refers to a 'draft' but does not explain draft_id, connection_context, or the significance of the required parameters, so it fails to compensate for the low schema coverage.
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 ('Confirm') and resource ('entity-removal draft'), and notes the operation is irreversible. It is clear but does not explicitly name the sibling prepare tool or otherwise differentiate itself from the many other *_confirm siblings beyond the entity-removal resource.
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 a clear prerequisite: the draft must be confirmed only 'after explicit user approval.' This provides useful usage context, though it does not name alternatives or explicitly say a corresponding prepare call must happen first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_entity_remove_prepareAInspect
Prepare an irreversible campaign, ad-group, ad-group-ad, or keyword removal. Runs Google validate-only and returns the current entity snapshot; no change is applied.
| Name | Required | Description | Default |
|---|---|---|---|
| ad_id | No | ||
| ad_group_id | No | ||
| campaign_id | No | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| criterion_id | No | ||
| entity_level | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Explicitly discloses the irreversible nature of the operation being prepared and states that no change is applied and Google validate-only is run, returning an entity snapshot. This goes beyond annotations, which only claim destructiveHint=false (accurate for the prepare step) and readOnlyHint=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?
Two tightly front-loaded sentences with no wasted words. The irreversible warning and the no-change guarantee are both prominent.
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, safety, and lack of mutation adequately. However, with seven parameters and no output schema, it omits how to select the correct ID for each entity_level and what the returned snapshot contains, leaving gaps for an agent to infer.
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 very low (14%); only customer_id has a description. The description does not compensate by explaining which parameters (ad_id, campaign_id, etc.) correspond to which entity_level, or the connection_context purpose. Baseline 3 applies for minimal semantic 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?
States a specific verb ('Prepare'), resource (entity removal), and the exact entity levels supported (campaign, ad-group, ad-group-ad, keyword). Clearly distinguishes itself from google_ads_entity_remove_confirm by the 'Prepare' prefix and the 'no change is applied' clause.
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 usage as a precursor to confirm ('Prepare an irreversible removal') and clarifies it is validate-only. It does not explicitly say 'use before google_ads_entity_remove_confirm' or list exclusions, but the prepare/confirm sibling pattern is transparent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_entity_update_confirmBDestructiveInspect
Confirm one typed entity-update draft after reviewing its before/after diff.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, so the agent knows this commits a mutation. The description adds that confirmation applies to a single typed draft reviewed via a diff, which is useful context, but says nothing about reversibility, idempotency, draft expiry, or what happens if the draft is stale.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler, front-loading the action and the object, and packing the review precondition into the same clause.
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 confirm step with no output schema, the description should at least note that it executes the pending mutation and what the caller gets back (e.g., a mutation receipt). The prepare/confirm pattern is inferable from siblings, so the gap is moderate rather than severe.
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 only 33%: only customer_id is documented. The description's 'draft' wording implicitly explains draft_id, but connection_context (a patterned context token) and the required-ness semantics of draft_id get no explanation in either schema or 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 (confirm) and resource (one typed entity-update draft), and the phrase 'after reviewing its before/after diff' ties it to the prepare/confirm workflow. It doesn't name the sibling google_ads_entity_update_prepare explicitly, but the draft concept makes the pairing 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?
'Confirm one typed entity-update draft after reviewing its before/after diff' implies the precondition (a draft exists and its diff was reviewed) but never states when NOT to use it, that it must follow google_ads_entity_update_prepare, or how it differs from other *_confirm siblings such as google_ads_management_confirm.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_entity_update_prepareAInspect
Prepare a typed campaign, ad-group, responsive-search-ad, or keyword update. Runs Google validate-only and returns a before/after draft; no change is applied.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| ad_id | No | ||
| status | No | ||
| headlines | No | ||
| final_urls | No | ||
| ad_group_id | No | ||
| campaign_id | No | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| criterion_id | No | ||
| descriptions | No | ||
| entity_level | Yes | ||
| cpc_bid_micros | No | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover safety flags (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description adds real behavioral context beyond that: it runs a Google validate-only pass and returns a before/after draft with no mutation applied. It does not describe failure modes or validation error reporting, 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?
Two tight sentences, front-loaded with the action and scope, closing with the safety-relevant constraint. 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 13-parameter, low-documentation mutation-draft tool the description is on the thin side, but it does explain the prepare semantics and the returned before/after draft. With no output schema, a bit more on what the draft contains and how it transitions to confirm would be needed for a higher score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only 1 of 13 parameters (customer_id) has schema documentation — 8% coverage — so the description must carry the load and largely does not. It hints at the entity_level values and that the update is 'typed', but gives no guidance on headlines/descriptions length limits, cpc_bid_micros units, status enum usage, or connection_context 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?
Names a specific verb (prepare) plus the four resource types it covers (campaign, ad-group, responsive-search-ad, keyword), which distinguishes it from narrower siblings like google_ads_budget_update_prepare or google_ads_bidding_update_prepare. It stops short of naming the confirm counterpart, so the distinction from its own paired sibling is left implicit.
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 change is applied" implies this is the draft step of a two-phase flow, which nudges the agent toward google_ads_entity_update_confirm. But it never says to call confirm to apply, nor when to prefer a narrower update tool (e.g. google_ads_ad_text_update_prepare, google_ads_ad_status_update_prepare) over this general one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_experiment_action_confirmADestructiveInspect
Send one approved experiment action; acknowledgement remains pending until read-only reconciliation proves completion. Never replay timeouts. Compatibility entrypoint; prefer the matching named tool: google_ads_experiment_schedule_confirm, google_ads_experiment_promote_confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavioral context the annotations don't carry: acknowledgement stays pending until read-only reconciliation proves completion, and timeouts must never be replayed (retry/idempotency semantics). The destructiveHint=true annotation already covers the safety profile, so this is genuine added value rather than repetition.
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 clauses with the core confirmation behavior front-loaded and the routing guidance last. No filler, though the compatibility note could be phrased more economically.
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 confirmation/reconciliation model well, but as a generic compatibility dispatcher with no output schema and only 33% parameter coverage, it leaves the meaning of draft_id/connection_context and the set of valid actions unexplained. Adequate but with clear 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 only 33% (customer_id alone is documented) and the description mentions no parameters at all, so draft_id and connection_context are undocumented in both places. With low coverage, the description was expected 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 (send) and resource (one approved experiment action), and distinguishes itself from siblings by naming the two named tools to prefer instead. The generic "experiment action" scope stays slightly vague, but the routing note gives an agent enough to tell it apart.
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 says this is a compatibility entrypoint and directs the agent to prefer google_ads_experiment_schedule_confirm or google_ads_experiment_promote_confirm. It does not spell out the residual case in which this generic tool is actually the right call, so it falls just short of a full when/when-not rubric.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_experiment_action_prepareAInspect
Prepare native Search experiment schedule/promote with explicit affected campaigns and complete bounded snapshot. Scheduling starts serving; promoting copies trial settings to control. No action is sent during prepare. Compatibility entrypoint; prefer the matching named tool: google_ads_experiment_schedule_prepare, google_ads_experiment_promote_prepare.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, so the safety profile is partly covered, but the description adds real behavioral context: 'No action is sent during prepare' clarifies this is a non-mutating staging step, and it explains the effect of each mode. It doesn't describe the resulting snapshot contents or what the caller receives, keeping 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?
Four tight sentences, front-loaded with the action and resource, followed by mode semantics, the no-action guarantee, and the routing note. Every clause carries information; density is high but no sentence is wasted.
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 no output schema and a nested body object at 33% coverage, the description should explain what 'prepare' produces (e.g., an approval plan) and remaining body fields; it does not. It covers the essential routing, mode semantics, and non-mutation guarantee, making it adequate but with clear 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 only 33%, so the description must compensate for undocumented parameters. It adds meaning to the 'mode' param by explaining schedule vs promote, and references 'explicit affected campaigns' (affected_campaign_ids), but says nothing about experiment_id, customer_id, connection_context, or the maxItems=2 constraint. Partial compensation justifies the baseline 3.
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 ('Prepare native Search experiment schedule/promote') and explicitly identifies itself as a compatibility entrypoint, naming the two named tools that should be preferred. An agent can distinguish it from the sibling *_prepare tools 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 routes the agent away from this tool ('prefer the matching named tool: google_ads_experiment_schedule_prepare, google_ads_experiment_promote_prepare') and distinguishes the two modes by semantics (scheduling starts serving; promoting copies trial settings to control). When-to-use and when-to-prefer-alternatives are both present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_experiment_create_confirmAInspect
After explicit approval, create a Search experiment and its control/treatment arms in SETUP without starting serving. Accepts only a matching draft from google_ads_experiment_create_prepare; verifies operation kind, approval integrity and state drift before sending. Uncertain outcomes must be reconciled without replay.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, openWorldHint=false and destructiveHint=false; the description adds real behavioral detail beyond that: it verifies operation kind, approval integrity and state drift before sending, and instructs that uncertain outcomes must be reconciled without replay (idempotency/retry safety). This is exactly the context a mutation tool needs beyond its safety 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 dense sentences, front-loaded with the action and resulting state, then the gate condition, then the failure-mode guidance. No filler and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a guarded mutation tool with no output schema, the description covers preconditions, the accepted input source, server-side verification steps, and the uncertain-outcome path. It stops short of describing the return payload (e.g. resulting experiment/draft identifiers), which an agent would need to chain into follow-up confirm calls.
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 33% (customer_id documented; draft_id and connection_context bare). The description implies draft_id is a reference to a draft produced by google_ads_experiment_create_prepare, which adds meaning, but connection_context is undocumented in both schema and description, so coverage is incomplete.
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 Search experiment and its control/treatment arms'), plus the exact resulting state ('in SETUP without starting serving'). This clearly separates it from sibling confirm tools like experiment_initiate_confirm, experiment_promote_confirm, and experiment_action_confirm without opening their 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?
Gives an explicit precondition ('After explicit approval') and an explicit input constraint ('Accepts only a matching draft from google_ads_experiment_create_prepare'), naming the predecessor tool. It also flags the reconcile path for uncertain outcomes, so an agent knows what to do when this call does not return cleanly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_experiment_create_prepareAInspect
Prepare to create a Search experiment and its control/treatment arms in SETUP without starting serving. Saves a private draft after Google validate-only and a complete affected-resource snapshot; does not send the change. Show the draft for explicit approval before calling google_ads_experiment_create_confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the mutation/safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description adds substantial context beyond that: a private draft is saved, Google validate-only runs, a complete affected-resource snapshot is captured, and no change is actually sent. That is exactly the behavioral disclosure a prepare-tool needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the purpose and scope, then behavior, then the required follow-up step. No filler; every clause (SETUP-only, no serving, validate-only, approval gate) carries meaning.
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 no output schema and a mutating prepare tool, the description covers the essential lifecycle and sequencing. It is slightly thin on the nested body semantics (left to a low-coverage schema) and on how the saved draft is later retrieved, but the core information for correct invocation is 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 33% - just customer_id is documented, while the nested body (campaign_id, control_percent, name, suffix) and connection_context have no descriptions. The description never explains these parameters or the meaning of control_percent, so it fails to compensate for the low coverage; only a faint hint comes from 'control/treatment arms'.
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 (prepare to create), a specific resource (a Search experiment with its control/treatment arms), and an explicit scope (in SETUP without starting serving). It also names the sibling it feeds into, google_ads_experiment_create_confirm, so an agent can distinguish prepare from confirm 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?
The description makes the workflow explicit: it does not send the change, and the draft must be shown for approval before calling google_ads_experiment_create_confirm. Both the when (before confirm, after draft review) and the alternative (confirm) are stated, leaving no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_experiment_halt_confirmADestructiveInspect
After explicit approval, halt an enabled Search or Display experiment. Accepts only a matching draft from google_ads_experiment_halt_prepare; verifies operation kind, approval integrity and state drift before sending. Uncertain outcomes must be reconciled without replay.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered; the description adds real context beyond that by disclosing the pre-send verification checks (operation kind, approval integrity, state drift) and the no-replay reconciliation policy. It stops short of describing failure/error surfaces or permission requirements, 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 short, front-loaded sentences with no wasted clauses; the approval precondition and draft requirement lead. The final reconciliation sentence is slightly terse/jargon-heavy but still 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, confirm-stage mutation with no output schema, the description supplies the workflow prerequisite, the verification behavior, and the uncertain-outcome policy. The remaining gap is parameter-level detail (connection_context) and explicit failure semantics, which is a modest shortfall rather than a blocking one.
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 only 33% — customer_id is documented in the schema, but draft_id and connection_context are undocumented there. The description hints at draft_id's provenance ('a matching draft from ..._halt_prepare') but adds nothing about connection_context, so it only partially compensates for the coverage 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 (halt) plus the exact resource scope (an enabled Search or Display experiment), and the precondition (after explicit approval). It is immediately distinguishable from google_ads_experiment_halt_prepare, which is the paired draft-producing 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?
Explicitly gates usage on prior approval and on 'a matching draft from google_ads_experiment_halt_prepare', naming the required predecessor tool. It also tells the agent what to do when the outcome is uncertain (reconcile, do not replay), covering the main alternative path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_experiment_halt_prepareAInspect
Prepare to halt an enabled Search or Display experiment. Saves a private draft after Google validate-only and a complete affected-resource snapshot; does not send the change. Show the draft for explicit approval before calling google_ads_experiment_halt_confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations only carrying a bland non-destructive/non-readOnly profile, the description discloses the real behavior: it runs Google validate-only, takes a complete affected-resource snapshot, saves a private draft, and explicitly does NOT send the change. This is exactly the context an agent needs and is consistent with destructiveHint=false and readOnlyHint=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?
Two tight sentences, with the core action and the safe-draft constraint front-loaded and the approval workflow following. 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 prepare-stage tool with no output schema, the description covers the full lifecycle (validate, snapshot, draft, approval, confirm) so an agent understands the return behavior and next step. The only shortfall is the thin parameter coverage, which is a minor gap 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 coverage is only 33% (body.experiment_id and connection_context are undocumented) yet the description adds no parameter detail beyond implying an experiment is involved. It does not explain the experiment_id format, the customer_id, or connection_context, so it fails to compensate for the coverage 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 ('Prepare to halt') and resource ('enabled Search or Display experiment'), and immediately distinguishes itself from the separate confirm step. An agent can tell it apart from google_ads_experiment_halt_confirm and google_ads_experiment_action_prepare 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?
Clearly frames when to call it (precondition: an enabled Search/Display experiment) and the required follow-up ('Show the draft for explicit approval before calling google_ads_experiment_halt_confirm'). It routes to the correct sibling for execution but does not contrast against the other *_prepare experiment tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_experiment_initiate_confirmADestructiveInspect
After explicit approval, initiate an existing experiment in SETUP. Accepts only a matching draft from google_ads_experiment_initiate_prepare; verifies operation kind, approval integrity and state drift before sending. Uncertain outcomes must be reconciled without replay.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered; the description adds valuable context beyond that: pre-send verification of operation kind, approval integrity and state drift, plus a no-replay idempotency rule for uncertain outcomes.
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 dense sentences, front-loaded with the action and its approval precondition, with zero filler. Each sentence carries distinct information: trigger, input provenance/validation, and failure handling.
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 confirm-step mutation with no output schema, it covers the trigger, the input provenance, pre-send validation and the uncertain-outcome path. It stops short of describing what the initiation actually does to the experiment (budget/traffic impact), which is the main remaining 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 only 33% (only customer_id is documented). The description compensates partially by explaining that draft_id must be the matching draft from the prepare step, but connection_context is left entirely to its regex pattern and no parameter format details are added.
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 (initiate) and resource (an existing experiment in SETUP), plus a precondition, which clearly distinguishes it from the sibling google_ads_experiment_initiate_prepare and from halt/action/promote 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?
Explicitly gates invocation on prior approval and on a matching draft produced by google_ads_experiment_initiate_prepare, and routes uncertain outcomes to reconciliation rather than replay. Both the trigger condition and the alternative path are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_experiment_initiate_prepareAInspect
Prepare to initiate an existing experiment in SETUP. Saves a private draft after Google validate-only and a complete affected-resource snapshot; does not send the change. Show the draft for explicit approval before calling google_ads_experiment_initiate_confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety triple; the description adds real behavioral context the annotations lack: it runs Google validate-only, persists a private draft plus a complete affected-resource snapshot, and critically does NOT send the change. This correctly reframes a non-readOnly tool as a non-mutating prep step.
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 purpose then side effects then the approval gate. Every sentence carries information the agent needs to sequence the call 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?
No output schema exists, and the description adequately covers behavior and the approval flow for a prepare tool. The main shortfall is the undocumented body/connection_context parameters, though they follow the sibling prepare conventions.
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 only 33% (only customer_id is documented) and the description adds no meaning for body.experiment_id or connection_context. With a nested object and undocumented parameters, the description fails to compensate for the coverage 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 ('Prepare to initiate an existing experiment in SETUP'), including the state constraint (SETUP) that scopes which experiments qualify. It explicitly distinguishes itself from its confirm sibling by naming 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?
Gives an explicit workflow and precondition: call this first, show the saved draft for explicit approval, then call google_ads_experiment_initiate_confirm. The when-to-use vs the confirm alternative is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_experiment_promote_confirmADestructiveInspect
After explicit approval, promote a Search experiment by copying trial settings to the control campaign. Accepts only a matching draft from google_ads_experiment_promote_prepare; verifies operation kind, approval integrity and state drift before sending. Uncertain outcomes must be reconciled without replay.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds substantive behavior beyond them: pre-send verification of operation kind, approval integrity and state drift, the constraint that only a matching draft is accepted, and the out-of-band reconciliation requirement. This is rich disclosure for a mutation 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?
Three sentences, action first, then the input constraint, then the reconciliation rule. No filler; each sentence carries a distinct operational fact.
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 write with no output schema, the description covers the critical concerns (approval gate, draft provenance, verification, drift, non-replay). It stops short of naming the reconciliation mechanism (e.g. google_ads_mutation_reconcile), leaving the recovery path slightly indirect.
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 only 33% (customer_id documented, draft_id and connection_context bare), so the description should compensate. It implies draft_id must originate from the prepare step ('a matching draft') and surfaces draft provenance, but it adds no format or meaning for connection_context or the draft identifier itself.
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+mechanism: 'promote a Search experiment by copying trial settings to the control campaign.' It is immediately distinguishable from the sibling google_ads_experiment_promote_prepare, which it explicitly names as the source of the required draft.
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 the precondition ('After explicit approval'), the required input path ('Accepts only a matching draft from google_ads_experiment_promote_prepare'), and the failure-handling rule ('Uncertain outcomes must be reconciled without replay'). Both when-to-use and the alternative/route are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_experiment_promote_prepareAInspect
Prepare to promote a Search experiment by copying trial settings to the control campaign. Saves a private draft after Google validate-only and a complete affected-resource snapshot; does not send the change. Show the draft for explicit approval before calling google_ads_experiment_promote_confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false. The description adds substantial non-obvious context beyond them: it saves a private draft, runs Google validate-only, captures a complete affected-resource snapshot, and critically does NOT send the change. It doesn't cover auth needs or the draft's lifecycle/expiry, keeping 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?
Two tight sentences, front-loaded with the purpose and followed by the safety/workflow constraint. Every clause earns its place with no 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 prepare-stage tool with no output schema and annotations already covering the safety profile, the description supplies the workflow, the validate-only behavior, and the required approval gate. The one real gap is parameter semantics for the nested body, which neither schema nor description clarifies.
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 33% – just customer_id is documented. The nested body fields experiment_id and affected_campaign_ids carry no schema descriptions, and the description never explains their semantics (e.g. the maxItems=2 on affected_campaign_ids for trial/control pairing). 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?
States a specific verb (prepare to promote), resource (a Search experiment), and action (copy trial settings to the control campaign). It explicitly distinguishes itself from the sibling google_ads_experiment_promote_confirm by naming it, so an agent can route correctly 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?
Gives explicit workflow guidance: it does not send the change, the draft must be shown for explicit approval, and the next call should be google_ads_experiment_promote_confirm. The when-to-use and the alternative/follow-up are both stated outright.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_experiment_schedule_confirmADestructiveInspect
After explicit approval, schedule a Search experiment, which starts serving. Accepts only a matching draft from google_ads_experiment_schedule_prepare; verifies operation kind, approval integrity and state drift before sending. Uncertain outcomes must be reconciled without replay.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint=true annotation, the description discloses real behavioral traits: that the call verifies operation kind, approval integrity and state drift before sending, and that uncertain outcomes must be reconciled without replay. This is exactly the idempotency/reconciliation context an agent needs for an irreversible mutation, and it is not derivable from the 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?
Three tightly packed sentences with the approval precondition front-loaded, and no filler. The middle clause listing three internal verification steps is slightly dense but each element carries operational 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?
For a destructive, no-output-schema mutation tool, this covers purpose, approval gating, input provenance, internal validation, and the reconciliation-without-replay rule, all of which are what an agent needs to avoid double-firing. Minor gap: no mention of how to confirm the outcome (e.g. mutation receipt/reconcile 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 coverage is only 33%, so the description must compensate, and it does partially by pinning draft_id's origin ('a matching draft from google_ads_experiment_schedule_prepare'). However, connection_context (the mctx pattern parameter) is left entirely unexplained, and customer_id is already documented 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?
States a specific verb+resource ('schedule a Search experiment') plus the key consequence ('which starts serving'), which separates it from sibling experiment operations like halt/initiate/promote. It names the prepare counterpart but does not explicitly distinguish itself from the other experiment *_confirm tools, so sibling differentiation is only partial.
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 precondition ('After explicit approval') and the alternative source of input ('Accepts only a matching draft from google_ads_experiment_schedule_prepare'), which routes the agent correctly. It does not state when NOT to use it versus e.g. experiment_action_confirm, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_experiment_schedule_prepareAInspect
Prepare to schedule a Search experiment, which starts serving. Saves a private draft after Google validate-only and a complete affected-resource snapshot; does not send the change. Show the draft for explicit approval before calling google_ads_experiment_schedule_confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=false; the description goes well beyond that by disclosing that it saves a private draft, runs a Google validate-only pass, captures a complete affected-resource snapshot, and critically does NOT push the change live. That resolves the apparent tension between a non-readOnly tool and a non-destructive one, which is exactly the context an agent needs before invoking 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?
Three tight sentences with zero filler, front-loading the action (prepare to schedule, starts serving) before the side-effect disclosure and the approval workflow. 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?
For a nested-body mutation-prep tool with no output schema, the description covers the safety model and workflow hand-off well, and nothing is claimed about return values that would need explaining. It could be more complete by summarizing the body contract (which ids are required) or the approval lifecycle, but it is sufficient to call 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 only 33%, so the description is expected to compensate, but it conveys nothing about experiment_id, affected_campaign_ids (including the maxItems=2 and uniqueItems constraints), or the connection_context token. The phrase "affected-resource snapshot" faintly gestures at affected_campaign_ids but adds no usable 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?
States a specific verb+resource ("Prepare to schedule a Search experiment") and explicitly frames the two-step prepare/confirm pattern by naming the sibling google_ads_experiment_schedule_confirm. It also implicitly separates itself from the other experiment_*_prepare tools (halt, promote, initiate) by naming the schedule action, so an agent can distinguish it 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 clear routing: this tool does not send the change, and the draft must be shown for explicit approval before calling google_ads_experiment_schedule_confirm. That names the required follow-up tool and the condition that selects it. It does not state when NOT to use it (e.g. vs. experiment_action_prepare or experiment_schedule_confirm directly), so it falls short of a full when/when-not/alternative treatment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_experiment_stateBRead-onlyInspect
Read native experiment lifecycle, arms and opaque operation reference; does not initiate or promote experiments.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | 10-digit Google Ads customer id. | |
| experiment_id | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds that the response includes lifecycle, arms and an opaque operation reference, but does not say whether the opaque reference must be fed elsewhere or how staleness is handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the negative constraint is placed after the core purpose. Slightly dense with stacked jargon ('arms', 'opaque operation reference'), but no 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?
There is no output schema, so the description must convey return semantics; it partially does by naming the returned concepts (lifecycle, arms, operation reference). However, with two undocumented parameters and no note on permissions or whether the operation reference is required for follow-up calls, it falls short of fully equipping the agent.
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 only 33%: customer_id is documented in the schema, but experiment_id and connection_context carry no descriptions anywhere. The description does not compensate by explaining the id format or what connection_context is, so two of three parameters are semantically opaque.
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 (Read) and resource (native experiment lifecycle, arms, opaque operation reference), which is enough for an agent to know this is a state-inspection tool. It also implicitly separates itself from the many experiment mutation siblings, though 'arms' is domain jargon that could be clearer.
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 'does not initiate or promote experiments' effectively routes the agent away from the experiment_initiate/experiment_promote siblings toward this read-only variant. It gives a clear boundary but never names the alternatives explicitly or states prerequisites (e.g., that a connection_context is needed).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_extension_asset_create_confirmBInspect
Confirm the exact unlinked extension asset plan. Linking requires separate approval.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real context by clarifying the operation is limited to unlinked assets and that linking is a separate approval step, but it does not disclose what confirmation actually does (does it commit changes, is it idempotent, can it be undone).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the operation stated first and the scope-limiting caveat second; nothing is padded. It is slightly terse for a mutation-confirmation tool but well front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a confirm-style mutation with no output schema, the definition leaves prerequisites (prior prepare run, origin of draft_id) and the effect of confirming unexplained. Annotations cover safety, but an agent still lacks enough to know the full call sequence.
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 33% – only customer_id carries a description. The description does not explain draft_id (presumably produced by the prepare step) or the opaque connection_context token, leaving two of three parameters undocumented 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 ('Confirm') and resource ('extension asset plan') and scopes it with 'unlinked', which distinguishes it from the linking tools. It does not explicitly name the sibling google_ads_extension_asset_create_prepare it pairs with, so an agent must infer the prepare/confirm relationship from naming convention.
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?
'Linking requires separate approval' tells the agent this tool stops short of linking, which is useful routing guidance. However, it never states the precondition that a draft must first be produced by the prepare tool, nor when an agent should call this versus approval_plan_confirm.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_extension_asset_create_prepareAInspect
Prepare one typed unlinked sitelink, callout, English structured snippet, call, price or promotion asset. Full provider validation; no implicit linking or upload. Requires extension flag and migration.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false/destructive=false, and the description usefully adds that this performs full provider validation without uploading or linking, clarifying the tool is a validating dry-run rather than a side-effecting mutation. It does not describe the returned handle/state that the confirm step would consume, leaving a moderate gap.
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 asset-type list and the no-side-effect disclaimer front-loaded. Dense but every clause carries information; 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 prepare step over a six-way oneOf schema with no output schema, the description covers purpose, scope and prerequisites but omits the prepare→confirm contract and what the prepared artifact is. Adequate as a minimum-viable definition, not fully self-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 coverage is only 33%, so the description must compensate, and it does partially by naming the six asset kinds that map to the body discriminator and noting 'unlinked' and 'English structured snippet'. It adds no field-level meaning for the per-kind required properties, so it only partly covers the 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 (prepare) and resource (typed unlinked extension asset) and enumerates the six supported kinds, which cleanly separates it from the link/unlink and create_confirm siblings. It stops short of naming those siblings explicitly, but the scope 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?
Gives prerequisite context ('Requires extension flag and migration') and a negative constraint ('no implicit linking or upload'), which frames when it is applicable. However, it never states the workflow relationship to google_ads_extension_asset_create_confirm or when an agent should prefer prepare over a direct create.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_field_metadataARead-onlyInspect
Resolve up to 50 exact field names with versioned provider metadata, compatibility, enum values and a 300s tenant cache. Queryability is not mutation eligibility.
| Name | Required | Description | Default |
|---|---|---|---|
| names | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/non-destructive/non-open-world, so the safety profile is covered. The description adds real behavioral context beyond that: a 300s tenant cache, a per-call limit of 50 names, and the caveat that queryable fields are not necessarily mutable. It does not describe rate limits or failure modes, so not 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?
Two tightly packed sentences, front-loaded with the capability and limit before the caveat. No filler; every clause adds 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?
No output schema, so the description appropriately enumerates the returned metadata types, which is helpful. However it leaves one of three parameters undocumented and gives no pagination or error behavior. Adequate but with visible gaps for a lookup tool an agent will chain into query building.
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 33% (only customer_id documented), so the description must compensate and only partially does. 'Up to 50 exact field names' usefully reinforces the names param's maxItems and its exact-match requirement, but connection_context and the name pattern are left entirely to 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 (resolve) and resource (exact field names) and enumerates what comes back: versioned provider metadata, compatibility, enum values. This clearly distinguishes it from the query/analysis siblings. It stops short of naming a specific alternative, so it lands at 4 rather than 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?
There is no explicit when-to-use statement and no named alternative. 'Queryability is not mutation eligibility' is a caution about interpreting results, not guidance about when to call this versus google_ads_query_preflight or google_ads_creation_capabilities_get. Usage must be inferred from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_geo_targets_suggestBRead-onlyInspect
Resolve location names to provider IDs, country, type and status. Caller must select an enabled result; not account eligibility.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| country_code | Yes | ||
| location_names | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the useful constraint that only an enabled result should be selected, but omits return format and any auth/permission prerequisites for a customer-scoped call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler, and the core capability is front-loaded. The second sentence is slightly cryptic in its phrasing of the eligibility exclusion, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with five parameters (four required), no output schema, no enums and 20% schema coverage, the description should explain input formats and what the result contains. It lists output fields (provider ID, country, type, status), which partially substitutes for the missing output schema, but leaves all four required inputs unexplained.
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 20% (just customer_id), and the description names no parameters explicitly except an oblique reference to location names. It gives no hint about locale format, country_code semantics, the location_names max of 10, or the connection_context pattern, so it fails to compensate for the coverage 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 ('resolve') and resource ('location names to provider IDs, country, type and status'), so the agent knows exactly what it returns without opening the schema. The trailing 'not account eligibility' implicitly distinguishes it from google_ads_account_eligibility_snapshot, though the sibling is not named 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?
'Caller must select an enabled result' gives a real workflow constraint, and 'not account eligibility' establishes an exclusion. However, it never names the alternative tool to use for eligibility checks (e.g., google_ads_account_eligibility_snapshot) nor when this tool should precede another call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_insights_overview_batchCRead-onlyInspect
Ledger-backed insights overview for up to 20 scopes. Use server summaries instead of summing visible rows.
| Name | Required | Description | Default |
|---|---|---|---|
| scopes | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds real context beyond that: 'ledger-backed' implies authoritative server-side totals and 'server summaries instead of summing visible rows' warns that visible rows may be a page subset, which is non-obvious pagination semantics.
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, the scope limit front-loaded and the results-handling caveat second. No filler; each sentence carries distinct 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 tool with a nested scopes array of 17 optional fields, zero schema descriptions, and no output schema, the description is too thin. It never explains what an 'insights overview' returns or how scopes are combined, leaving the agent to guess at both input semantics and result shape.
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 effectively 0% (only customer_id is annotated), so the description is expected to compensate. It adds only the 'up to 20 scopes' count, which the schema's maxItems already encodes, and explains nothing about the ~17 scope sub-fields (view_mode, consistency, window_days, query_contract_version) or connection_context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a resource ('insights overview') and a scope-batch limit ('up to 20 scopes'), so the agent knows it is a bulk read. But the verb is nominal ('overview') and it never distinguishes itself from close siblings like google_ads_insights_overview_query or google_ads_insights_query_daily, leaving ambiguity about which one to pick.
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 only guidance is 'Use server summaries instead of summing visible rows,' which tells the agent how to interpret results, not when to call this tool versus the sibling overview/query tools. No context, prerequisites, or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_insights_overview_queryCRead-onlyInspect
Ledger-backed insights overview for one scope. Defaults to 20 visible rows; summary/total covers the full filtered scope.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| search | No | ||
| date_to | No | ||
| group_by | No | ||
| sort_dir | No | ||
| sort_key | No | ||
| date_from | No | ||
| page_size | No | ||
| view_mode | No | ||
| consistency | No | cached | |
| customer_id | No | 10-digit Google Ads customer id. | |
| window_days | No | ||
| channel_type | No | ||
| status_filter | No | ||
| connection_context | No | ||
| query_contract_version | No | ||
| require_complete_range | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and a closed-world scope, so the safety profile is covered. The description adds a genuinely useful trait the annotations do not: pagination defaults to 20 rows while summary/total span the full filtered scope, which tells an agent the aggregate is not page-limited. It still leaves 'ledger-backed', the cached consistency default, and the meaning of 'one scope' unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the pagination/summary caveat comes after the scoping statement. It is efficient, though the opening jargon phrase costs clarity without earning 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 17-parameter, zero-required, no-output-schema analytics query, the description omits scope definition, required context (customer_id, connection_context), and the distinction between grouped and daily view modes. What is present is accurate but far short of what an agent needs to invoke 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?
Schema description coverage is only 6% across 17 parameters, and the description adds almost no parameter semantics beyond restating the 20-row page_size default. Critical inputs like customer_id, connection_context, group_by, view_mode, window_days and require_complete_range are left entirely to the schema, so the low coverage is not compensated.
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 resource ('insights overview') and implies a read query, but 'Ledger-backed' is unexplained jargon and 'for one scope' is vague without saying what a scope is. It does not distinguish this tool from close siblings such as google_ads_insights_query_daily, google_ads_insights_overview_batch, or insights_query_consistent, so an agent cannot tell which overview/query variant applies.
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, when-not-to-use, or alternative guidance is given despite a crowded sibling set of insights/query tools. The only conditional statement is about default row counts, which is behavioral rather than routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_insights_query_dailyARead-onlyInspect
Bounded daily spend for one enabled non-manager customer (ledger by default, narrow default window). Manager/closed/canceled accounts return a skip reason instead of metrics.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | Read source; defaults to synced data ('ledger'). 'live' sweeps the API. | |
| date_to | No | ISO date (YYYY-MM-DD). Optional. | |
| date_from | No | ISO date (YYYY-MM-DD). Optional; defaults to a narrow recent window. | |
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/no-destructive/closed-world, so the description's real value is the skip-reason behavior for manager/closed/canceled accounts and the ledger-vs-live source default. It doesn't describe pagination or the output shape (no output schema), leaving gaps despite 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?
Two tight sentences front-loading scope (bounded daily spend, one customer) then the edge-case behavior. 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?
Covers the edge cases an agent most needs (ineligible accounts skip rather than error) and the source default. Missing output/pagination detail, but for a read-only query tool with rich schema this is close to 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 coverage is 80% with self-documenting params (source enum, ISO dates, customer id pattern). The description reinforces the ledger default and narrow window but adds little syntax or meaning beyond the schema; baseline 3 holds.
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 (daily spend for one customer) with scope qualifiers (enabled non-manager, ledger by default, narrow default window). Distinguishable from insights_overview_query/batch siblings, though it doesn't 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?
Implies usage context (one enabled non-manager customer, narrow window) but never states when to choose this over google_ads_insights_overview_query or insights_overview_batch. Exclusions for manager/closed/canceled are described as outcomes, not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_keyword_create_confirmBInspect
Confirm a keyword-create draft.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as non-readOnly, non-destructive, closed-world, but the description adds nothing about what confirming does — whether it creates the keywords immediately, whether it consumes quota, whether the draft can be reused, or what happens on failure. For a mutation-confirm tool, this is a significant transparency gap.
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 short sentence, front-loaded and free of waste. It is appropriately sized but arguably too terse given what's missing.
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 confirm-style mutation with no output schema and only 33% parameter coverage, the description should state the prepare-then-confirm flow, what gets created, and the meaning of draft_id/connection_context. None of that is 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 coverage is only 33%: customer_id is documented, but draft_id and connection_context have no schema descriptions. The description says nothing about where draft_id comes from (presumably the prepare step) or what connection_context is, so it doesn't compensate for the coverage 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 (Confirm) and resource (keyword-create draft), clearly distinguishing it from its sibling google_ads_keyword_create_prepare. It doesn't explain what confirmation actually does (e.g., applies the draft to the ad account), but the pairing with _prepare is 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?
The prepare/confirm naming convention implies this is the second step after google_ads_keyword_create_prepare, but the description never says when to use this versus the prepare step, nor what prerequisites exist. Usage is implied by convention only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_keyword_create_prepareCInspect
Prepare creating a paused keyword criterion.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| negative | No | ||
| match_type | No | ||
| ad_group_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=false) tell the agent this is a non-destructive mutation but nothing about the prepare/confirm staging model, what state the account is left in after 'prepare', or whether anything is persisted. The description contributes one useful behavioral detail ('paused') but omits the core semantics of what a prepare step actually does.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words, which is structurally good, but it is under-specified rather than genuinely concise given the tool's complexity and undocumented 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 6-parameter mutation tool with 17% schema coverage, no output schema, and no parameter docs, the description is far too thin. It omits the prepare/confirm workflow, requires no explanation of required vs optional fields, and leaves an agent unable to call the tool correctly without reading the schema blindly.
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 17% (only customer_id is documented) across 6 parameters, so the description carries the burden and adds nothing: text, negative, match_type, ad_group_id, and connection_context are unexplained in both places. 'Keyword criterion' loosely gestures at text/match_type/negative but conveys no actual semantics such as match_type values or negative-keyword behavior.
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: 'prepare creating a paused keyword criterion.' The word 'prepare' plus the resource 'keyword criterion' clearly distinguishes it from read/analysis siblings like google_ads_keyword_forecast_metrics. However, it does not explicitly name the confirm step it pairs with (google_ads_keyword_create_confirm), so routing relies on the naming convention rather than the description.
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 mention that this is the first half of a prepare/confirm workflow, and no statement of prerequisites or follow-up action. The agent must infer the two-phase pattern from the sibling tool names rather than the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_keyword_forecast_metricsARead-onlyInspect
Read a hypothetical manual-CPC keyword forecast, never create a campaign. Account timezone/currency, up to 20 keywords and 31 future days. Forecasts are not guarantees.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/openWorldHint/destructiveHint=false, so the safety profile is covered. The description adds real value beyond that: hard limits (20 keywords, 31 future days), that results are account timezone/currency scoped, and that forecasts are not guarantees.
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 with no filler; the read-vs-write disambiguation and the numeric limits are placed first. Slightly clipped telegraphic style ('Account timezone/currency') but nothing wasted.
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 nested body with nine required fields, an openWorld tool with no output schema, the description covers scope and limits but omits what the forecast actually returns and how the bid/budget inputs shape it. Adequate minimum, not 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 only 33%, and the description only gestures at a few fields (keyword count, date range, currency). It does not clarify match_type, language_id, geo_target_ids, or that max_cpc_bid_micros/daily_budget_micros are bid/budget inputs in micros, so it only partially compensates for the coverage 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 ('Read a hypothetical manual-CPC keyword forecast') and rules out the write path ('never create a campaign'). The qualifier 'manual-CPC' and 'hypothetical' distinguish it from the reach/keyword-historical siblings, though those siblings are not named.
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 'hypothetical' and 'never create a campaign' framing implies when this is appropriate (pre-campaign estimates, not actual performance), but it never names the alternatives such as google_ads_keyword_historical_metrics or google_ads_reach_forecast, which is the main routing ambiguity for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_keyword_historical_metricsBRead-onlyInspect
Read bounded keyword historical metrics in the account currency; near-exact deduplication may omit inputs.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, open-world), so the bar is lower; the description nonetheless adds two real behavioral facts: results are denominated in the account currency, and near-exact deduplication may drop inputs so the response may not map 1:1 to the request. It omits any mention of the per-call input caps (20 keywords, 10 geo targets) that are only visible in the 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?
A single tightly written sentence with the operation and its two most important caveats front-loaded and no filler. 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?
With no output schema, the description carries the burden of explaining what 'historical metrics' actually returns (volume, competition, bid ranges, time window), and it does not. It also leaves the nested body parameters and their limits undocumented, which is thin for a 3-parameter tool with a nested object.
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 33% (only customer_id is documented), and the nested body fields keywords, language_id, and geo_target_ids carry no descriptions at all. The description adds no parameter meaning beyond the currency note, so it fails to compensate for the coverage 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 (Read) and resource (keyword historical metrics) plus a scope qualifier (bounded, account currency), so an agent knows it is a read of historical performance data. It does not, however, differentiate itself from nearby siblings such as google_ads_keyword_forecast_metrics, google_ads_keyword_ideas_generate, or google_ads_benchmark_metrics, leaving the agent to infer the boundary.
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 and no named alternative, despite several plausible siblings (forecast metrics, ideas generate, trending topics) that could be confused with it. The only implicit cue is 'historical' vs. future-facing tools, which the agent must derive on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_keyword_ideas_generateCRead-onlyInspect
Generate bounded Google Search keyword ideas with historical metrics for one owned customer. Read-only and hot-cached.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| limit | No | ||
| network | No | GOOGLE_SEARCH | |
| keywords | No | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| language_id | No | 1000 | |
| geo_target_ids | No | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds two useful traits beyond that: results are 'bounded' (a cap on output) and 'hot-cached' (latency/freshness behavior). It still omits rate limits, auth requirements, and what happens with the connection_context token.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the action and resource, with no filler. It is well sized; the only minor issue is that the second sentence bundles two distinct traits without elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with 13% schema coverage and no output schema, the description is too thin. It gives no sibling routing, no parameter meaning for six of eight inputs, and no indication of the shape or volume of the returned ideas.
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 13% (only customer_id is documented), so the description must carry the load and it does not. 'Bounded' loosely maps to limit and 'one owned customer' to customer_id, but url, keywords, language_id, geo_target_ids, network, and the mctx_v1 connection_context pattern are all left 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 (Generate), resource (keyword ideas) and scope (Google Search, historical metrics, one owned customer). It is clearer than a bare name, but it never distinguishes itself from close siblings like google_ads_keyword_themes or google_ads_keyword_historical_metrics, which an agent must choose between.
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 one owned customer' is a constraint, not usage guidance. There is no statement of when to pick this over google_ads_keyword_themes, keyword_historical_metrics, or keyword_forecast_metrics, and no prerequisites for the customer_id or connection_context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_keyword_themesCRead-onlyInspect
Read bounded native keyword_themes insight. Restricted services require fresh server-verified access and otherwise refuse. No writes or access grants.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false, and openWorldHint. The description adds a genuine behavioral trait — restricted services refuse without fresh server-verified access — which is useful beyond annotations, but "No writes or access grants" merely restates the readOnly hint and the auth clause is vague about which services are restricted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core purpose, with no wasted verbiage. The final clause duplicates the readOnly annotation, which is minor redundancy but otherwise the structure 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?
For a read tool with no output schema and no parameter documentation, the description should clarify what the returned insight contains and how the nested request body is shaped. It omits both, leaving the agent without the information needed to invoke and interpret the call confidently.
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 33% (only customer_id is documented), and the nested body object's required fields (final_url, language_code, geo_target_ids) have no descriptions at all. The description says nothing about any parameter, so it fails to compensate for the coverage 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 ("Read") and a specific resource ("keyword_themes insight"), so an agent can tell it retrieves keyword-theme insight data. However, it offers no differentiation from closely related siblings such as google_ads_keyword_ideas_generate, google_ads_keyword_historical_metrics, or google_ads_trending_topics, and terms like "bounded native" are opaque.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states a precondition (restricted services need fresh server-verified access) but never says when to choose this tool over the many sibling keyword/insight tools. There is no when-to-use or when-not-to-use guidance and no alternative named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_management_confirmADestructiveInspect
Confirm an exact typed management plan; state drift requires prepare again. Uncertain sends are not replayed. Compatibility entrypoint; prefer the matching named tool: google_ads_ad_text_update_confirm, google_ads_experiment_create_confirm, google_ads_experiment_initiate_confirm, google_ads_ad_status_update_confirm, google_ads_experiment_halt_confirm, google_ads_asset_group_update_confirm, google_ads_campaign_dates_update_confirm, google_ads_shared_budget_update_confirm, google_ads_portfolio_target_update_confirm, google_ads_schedule_replace_confirm, google_ads_negative_location_add_confirm, google_ads_negative_keyword_add_confirm, google_ads_retail_tree_replace_confirm, google_ads_asset_group_link_confirm, google_ads_asset_group_unlink_confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds non-obvious behavior: drift invalidation requiring a fresh prepare, and that uncertain sends are not replayed (idempotency guarantee). These are real behavioral disclosures beyond the 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?
The key clauses (drift, non-replay) are front-loaded and valuable, but roughly two-thirds of the text is a 15-item sibling name dump. The list aids routing yet is repetitive bulk that dilutes an otherwise tight 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 destructive confirm tool with annotations covering the safety profile and no output schema, the description supplies the important operational caveats (drift, non-replay, prefer named tools). It is nearly complete, with the only real gap being parameter meaning that the schema also fails to cover.
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 only 33% (customer_id documented, draft_id and connection_context not). With coverage below 50% the description is expected to compensate, but it says nothing about what draft_id or connection_context mean or how to obtain them, leaving the caller reliant on undocumented fields.
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 ('Confirm an exact typed management plan') and explicitly frames itself as a compatibility entrypoint that should defer to named siblings. The sibling list makes the relationship to other confirm tools unambiguous, though the core generic purpose is somewhat buried under the enumeration.
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 routing guidance ('prefer the matching named tool' with the exact names) and a precondition ('state drift requires prepare again'). It stops short of stating when this generic entrypoint is genuinely the right choice versus a fallback, but the when-to-use-alternative signal is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_management_prepareAInspect
Prepare a typed management change with complete affected-resource snapshot and validation; shared resources require explicit affected campaigns. No raw operations. Compatibility entrypoint; prefer the matching named tool: google_ads_ad_text_update_prepare, google_ads_experiment_create_prepare, google_ads_experiment_initiate_prepare, google_ads_ad_status_update_prepare, google_ads_experiment_halt_prepare, google_ads_asset_group_update_prepare, google_ads_campaign_dates_update_prepare, google_ads_shared_budget_update_prepare, google_ads_portfolio_target_update_prepare, google_ads_schedule_replace_prepare, google_ads_negative_location_add_prepare, google_ads_negative_keyword_add_prepare, google_ads_retail_tree_replace_prepare, google_ads_asset_group_link_prepare, google_ads_asset_group_unlink_prepare.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish it is a non-read-only, non-destructive, closed-world operation, and the description adds genuinely new behavioral context: it produces a complete affected-resource snapshot with validation, rejects raw operations, and requires explicit affected campaigns for shared resources. It does not explain that a prepare step must be followed by a confirm call, which is a notable omission but not a contradiction.
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 sentences are front-loaded and each states a real constraint (snapshot+validation, shared-resource rule, no raw operations). The sixteen-item tool list is long but is the core routing payload and each entry is a distinct alternative, so it largely 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 tool with a very large discriminated-union schema and no output schema, the description covers prepare semantics, constraints, and routing adequately, but omits what the prepare step returns and that a separate confirm step is required before changes take effect. Those are material gaps given the sibling *_confirm tools in the same family.
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 33%, so the description carries more of the burden than usual. The list of named tools maps implicitly onto the sixteen `kind` discriminator values in the body oneOf, which is useful, but the description never mentions the `body` discriminator, the `kind` field, or the `connection_context` parameter, leaving the schema to do the 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?
The description names a specific verb+resource combination ('Prepare a typed management change') and immediately signals it is a compatibility entrypoint, which lets an agent place it relative to the many *_prepare siblings. The phrase 'typed management change' is somewhat abstract on its own, but the enumeration of the sixteen matching named tools clarifies the exact scope of change kinds it accepts.
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 explicitly tells the agent to prefer the matching named tool and lists all sixteen alternatives, which is strong routing guidance and effectively a 'when not to use this' statement. What it does not state is the positive condition under which this compatibility entrypoint is the right choice, so the agent must infer that it exists only for legacy/backward-compatible callers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_mutation_receipt_getBDestructiveInspect
Get a tenant/customer-bound lifecycle receipt for one native Google mutation draft. May update private draft expiry, payload-mismatch or uncertain status. This never retries or changes Google Ads.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, which is surprising for a 'get' tool, and the description explains the mutation: it may update private draft expiry, payload-mismatch, or uncertain status. It clarifies it doesn't touch Google Ads or retry. This adds meaningful context beyond annotations, though it could say more about what 'update' entails.
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 that front-load the core action and its side effects. Every clause carries information, though 'tenant/customer-bound lifecycle receipt' is dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and sparse parameter documentation, the description misses details about the receipt format and the connection_context parameter. It covers the mutation behavior well but leaves gaps an agent would need to call it confidently.
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 only 33%; the customer_id is documented in the schema, but draft_id and connection_context are not described. The description gives no meaning for draft_id or connection_context, so it does little to compensate for the low coverage.
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: get a lifecycle receipt for one native Google mutation draft, scoped to a tenant/customer. It's clearly distinct from sibling confirm/prepare tools, though the concept of a 'lifecycle receipt' is somewhat jargon-heavy.
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 (check the receipt of a draft) but doesn't explicitly say when to use this versus google_ads_task_get or google_ads_mutation_reconcile. It does clarify it never retries or changes Google Ads, which helps exclude misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_mutation_reconcileADestructiveInspect
Check one exact Google resource for a confirmed or uncertain native mutation and update its private lifecycle receipt. It never re-submits the Google write; unsupported or ambiguous readback requires operator review.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond annotations: it explicitly says it never re-submits the Google write (clarifying the destructiveHint=true applies to the local receipt update, not a remote mutation) and discloses the ambiguous-readback escalation path. It stops short of describing what state the receipt update overwrites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core action front-loaded and the no-resubmit guarantee immediately after. 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 mutation-adjacent tool with no output schema and low schema description coverage, the description covers the flow and failure path but omits prerequisites (when a mutation counts as confirmed/uncertain) and any indication of what a reconcile result looks like.
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 only 33% — customer_id is documented but draft_id and connection_context are not. The description refers loosely to 'one exact Google resource' but does not explain what draft_id identifies, where it comes from, or the role of connection_context, so it fails to compensate for the coverage 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 action chain: check one exact Google resource for a mutation and update its private lifecycle receipt. It is clearly distinguishable from the prepare/confirm siblings and from google_ads_mutation_receipt_get, though jargon like 'lifecycle receipt' leaves the resource type somewhat abstract.
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 condition for use is implied ('for a confirmed or uncertain native mutation'), and the operator-review fallback is stated, but no sibling is named explicitly (e.g. mutation_receipt_get, or the *_confirm tools) nor is a when-not-to-use condition given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_negative_keyword_add_confirmADestructiveInspect
After explicit approval, add a negative keyword to a Search campaign. Accepts only a matching draft from google_ads_negative_keyword_add_prepare; verifies operation kind, approval integrity and state drift before sending. Uncertain outcomes must be reconciled without replay.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive=true/readOnly=false, but the description adds substantial context beyond them: it verifies operation kind, approval integrity and state drift before sending, restricts input to a matching draft, and prescribes reconciliation without replay for uncertain outcomes. This is real behavioral disclosure an agent needs for a destructive 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?
Three dense sentences, front-loaded with the approval gate and the action, then prerequisite, integrity checks, and reconciliation. Every sentence earns its place 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?
For a confirm-stage destructive mutation with no output schema, the description covers the preconditions, integrity verification, and the failure/reconciliation path, which is the critical information. It does not describe the success response or the connection_context parameter, but the essentials for correct invocation 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 coverage is only 33% (only customer_id is documented), so the description must compensate. It does clarify draft_id semantics (must be the matching draft produced by prepare), but connection_context is left entirely undocumented in both the schema and the description, leaving a 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?
Specific verb-plus-resource (add a negative keyword), scoped to a Search campaign, and it explicitly names the sibling it depends on (google_ads_negative_keyword_add_prepare). An agent can distinguish this confirm step from the many other *_confirm siblings 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?
States the precondition clearly ('After explicit approval', accepts only a matching draft from the prepare tool) and gives a when-not rule ('must be reconciled without replay'). It does not name the reconcile tool outright, 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.
google_ads_negative_keyword_add_prepareAInspect
Prepare to add a negative keyword to a Search campaign. Saves a private draft after Google validate-only and a complete affected-resource snapshot; does not send the change. Show the draft for explicit approval before calling google_ads_negative_keyword_add_confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, which alone would leave the agent unsure whether this mutates. The description resolves that by disclosing that a private draft is saved after a Google validate-only call plus a full affected-resource snapshot, and that no change is sent. That is meaningful behavioral context beyond the annotation set.
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, zero waste, and the important claims (dry-run draft, not sent, approval gate) are front-loaded. Nothing needs to be read twice or skimmed past.
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, and the description adequately covers the key return concept (a draft that must be shown for approval). It falls short only by omitting any guidance on the nested body fields and match types, which is the remaining ambiguity for calling 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 only 33%, and the description adds no parameter-level meaning at all. The match_type enum (EXACT/PHRASE/BROAD) is a format choice with materially different semantics for a negative keyword, yet neither the description nor the schema explains it; body sub-field intent is likewise 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 (prepare), a specific resource (negative keyword), the object (Search campaign), and the side-effect boundary ('does not send the change'). The prepare/confirm split is immediately distinguishable from the sibling google_ads_negative_keyword_add_confirm 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?
Explicitly names the alternative tool to call next (google_ads_negative_keyword_add_confirm) and the precondition (show the draft for explicit approval first). It also says what this tool deliberately does not do, which is the when-not clause.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_negative_location_add_confirmADestructiveInspect
After explicit approval, exclude a geographic target from a campaign. Accepts only a matching draft from google_ads_negative_location_add_prepare; verifies operation kind, approval integrity and state drift before sending. Uncertain outcomes must be reconciled without replay.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine context beyond that: it validates operation kind, approval integrity and state drift before sending, and warns that ambiguous results must not be replayed. It stops short of describing idempotency guarantees or the actual send semantics.
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 action, then the acceptance constraint, then the recovery rule. No filler and no repetition of the title or annotations.
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 confirm-step mutation with no output schema, the description covers gating, pre-send verification and failure handling, which is most of what an agent needs. The remaining gap is the undocumented connection_context parameter and any statement of what a successful confirmation returns.
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 only 33% - just customer_id ('10-digit Google Ads customer id') is documented. The description adds real meaning for draft_id by framing it as a draft emitted by the prepare tool that must match, but leaves connection_context (a patterned opaque token) entirely unexplained. Partial compensation for a low-coverage 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: 'exclude a geographic target from a campaign'. It explicitly frames itself as the confirm half of a prepare/confirm pair and names google_ads_negative_location_add_prepare as the source of the accepted draft, so an agent can distinguish it from its sibling without reading 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?
Gives an explicit precondition ('After explicit approval'), an acceptance restriction ('Accepts only a matching draft from google_ads_negative_location_add_prepare'), and a failure path ('Uncertain outcomes must be reconciled without replay'), which routes the agent to the mutation reconcile flow instead of retrying. When-to-use and when-not-to-retry are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_negative_location_add_prepareAInspect
Prepare to exclude a geographic target from a campaign. Saves a private draft after Google validate-only and a complete affected-resource snapshot; does not send the change. Show the draft for explicit approval before calling google_ads_negative_location_add_confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (destructiveHint=false, openWorldHint=false), and the description adds real context beyond them: it saves a private draft, runs a Google validate-only pass, captures a complete affected-resource snapshot, and does not transmit any change. This is exactly the kind of mutation-semantics disclosure the 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?
Three sentences, zero filler, front-loaded with purpose then behavior then next-step. Each sentence carries distinct 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?
No output schema exists, and the description does communicate that a draft is produced and should be surfaced for approval, which is the key return expectation. It stops short of explaining draft retrieval/expiry or how geo_target_id should be obtained (e.g. via google_ads_geo_targets_suggest), leaving minor gaps for a two-phase mutation 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 description coverage is low (33%) – only customer_id is documented, and the nested body fields (campaign_id, geo_target_id) plus connection_context have no schema descriptions. The description partially compensates by mapping the two body fields to their conceptual roles ('exclude a geographic target from a campaign'), but gives no format, sourcing, or connection_context 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?
Specific verb and resource: 'Prepare to exclude a geographic target from a campaign.' It immediately distinguishes itself from its sibling by noting it does not send the change and that google_ads_negative_location_add_confirm is the follow-up. An agent can route correctly 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?
Explicitly states the workflow: this is the prepare step, show the draft for explicit approval, then call google_ads_negative_location_add_confirm. The alternative tool and the condition that selects it are named directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_pmax_create_confirmBInspect
Confirm one reviewed Performance Max creation draft.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this is a non-read-only, non-destructive, closed-world mutation, so the safety profile is largely covered. The description adds only that the draft must be 'reviewed', without saying whether confirmation consumes the draft, whether the resulting creation is reversible, or what a failure returns.
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 with no filler or redundancy. It is efficient, though arguably too sparse for a commit operation rather than 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?
For a write/confirm tool with no output schema, incomplete parameter documentation, and a large prepare/confirm sibling family, the description omits the workflow context (which tool produces the draft, that this commits it) an agent needs 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 only 33% (only customer_id is documented), and the description adds no meaning for draft_id or the opaque connection_context pattern. With low coverage the description should compensate, and it 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 ('Confirm') and resource ('Performance Max creation draft'), which is enough to separate it from read/query siblings. It does not name the paired prepare tool or otherwise differentiate itself explicitly from google_ads_pmax_create_prepare.
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?
'one reviewed ... draft' implies the draft must already exist and have been reviewed via the prepare step, which is useful implied gating. But there is no explicit when-to-use statement, no mention of the prepare sibling, and no note on what to do if the draft is not yet reviewed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_pmax_create_prepareAInspect
Prepare one atomic, paused standard Performance Max campaign using existing account image assets. location_ids and language_ids are required; without them the answer is needs_input, never a worldwide campaign. The approval summary lists locations, exclusions, geo option (default PRESENCE) and languages.
| Name | Required | Description | Default |
|---|---|---|---|
| retail | No | ||
| headlines | Yes | ||
| final_urls | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| logo_assets | Yes | ||
| target_roas | No | ||
| descriptions | Yes | ||
| language_ids | No | language_constant ids. Required; there is no implicit all-languages default. | |
| location_ids | No | geo_target_constant ids (country, region or city) to target. Required; resolve names with google_ads_geo_targets_suggest. | |
| budget_micros | Yes | ||
| business_name | Yes | ||
| campaign_name | Yes | ||
| search_themes | No | ||
| long_headlines | Yes | ||
| audience_signal | No | ||
| geo_target_type | No | Defaults to PRESENCE (only people in the location). | |
| asset_group_name | Yes | ||
| bidding_strategy | Yes | ||
| targeting_source | No | Where the targeting came from; shown in the approval summary. Defaults to user. | |
| target_cpa_micros | No | ||
| connection_context | No | ||
| excluded_location_ids | No | geo_target_constant ids to exclude. | |
| marketing_image_assets | Yes | ||
| square_marketing_image_assets | Yes | ||
| contains_eu_political_advertising | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false/destructiveHint=false. The description adds substantive behavior: the campaign is created paused, it is an atomic operation, it uses existing account image assets, it returns needs_input on missing targeting, and it enumerates what the approval summary will contain. No auth or rate-limit context, but well 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?
Three sentences, front-loaded with the core action, then the targeting constraint, then the approval-summary contents. No filler and every sentence carries distinct 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?
No output schema exists, so the description must carry more weight. It covers the critical gating behavior and approval summary, but for a 25-parameter tool with nested objects and 14 required fields, it omits guidance on the asset, bidding, budget and retail inputs. Adequate but incomplete for the complexity.
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 only 24% across 25 params (14 required, plus a nested retail object). The description only touches location_ids, language_ids, geo option and exclusions, all of which already carry schema descriptions. The 19 remaining parameters (headlines, assets, bidding, retail tree, etc.) get no semantic help, so the description does not compensate for the coverage 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?
The description gives a precise verb+resource: 'Prepare one atomic, paused standard Performance Max campaign.' The qualifiers (atomic, paused, standard) and the prepare-vs-confirm naming distinguish it from the sibling google_ads_pmax_create_confirm 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?
It states an explicit when-not rule: without location_ids and language_ids the response is needs_input, 'never a worldwide campaign.' That is strong conditional guidance, but it never explicitly names the confirm sibling or the required prepare-then-approve workflow, so the alternative routing is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_portfolio_target_update_confirmADestructiveInspect
After explicit approval, change a shared portfolio CPA or ROAS target for the complete explicitly listed set of affected campaigns. Accepts only a matching draft from google_ads_portfolio_target_update_prepare; verifies operation kind, approval integrity and state drift before sending. Uncertain outcomes must be reconciled without replay.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description goes further by disclosing the pre-send validation (operation kind, approval integrity, state drift) and the no-replay reconciliation rule for uncertain outcomes, which is genuine behavioral 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?
Three dense sentences, front-loaded with the action and then constraints and reconciliation rule. Every sentence carries information, though the phrasing is somewhat compressed.
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 tool with annotations covering safety and no output schema, the description supplies the missing prerequisites, validation behavior and reconciliation guidance. Return-value detail is absent but not required given no output schema exists.
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 only 33%; customer_id is documented and connection_context has a pattern, but draft_id is bare. The description partly compensates by defining draft_id semantically (a matching draft from the prepare tool), yet it adds nothing about connection_context or the format of the affected-campaign set.
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 (change) and resource (shared portfolio CPA or ROAS target) plus the exact scope (the complete explicitly listed set of affected campaigns). It is clearly distinguishable from its sibling google_ads_portfolio_target_update_prepare, which it names.
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 precondition ('After explicit approval') and an explicit source constraint ('Accepts only a matching draft from google_ads_portfolio_target_update_prepare'). The agent knows when this tool is valid and what input it will reject.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_portfolio_target_update_prepareAInspect
Prepare to change a shared portfolio CPA or ROAS target for the complete explicitly listed set of affected campaigns. Saves a private draft after Google validate-only and a complete affected-resource snapshot; does not send the change. Show the draft for explicit approval before calling google_ads_portfolio_target_update_confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which only mark it non-read-only, non-destructive, closed-world): it discloses that it saves a private draft, runs a Google validate-only step, captures a complete affected-resource snapshot, and crucially does NOT send the change. That is precisely the mutation-safety context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action and resource, then the side effects, then the required next step. No filler and nothing repeated from 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?
For a two-phase prepare/confirm mutation with a nested body and no output schema, the description covers the essential workflow and side effects. Minor omission: it doesn't describe what the returned draft/handle looks like or how long the draft persists before confirm.
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 only 33% schema description coverage, the description carries extra weight and does add meaning: it clarifies that strategy_type is a CPA-or-ROAS choice, that target is the value being changed, and that affected_campaign_ids must be the complete, explicitly listed set. It still doesn't cover bounds like the 1-100 campaign limit or the positive-number constraint on target.
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 ('Prepare to change'), the exact resource ('shared portfolio CPA or ROAS target'), and the scope ('complete explicitly listed set of affected campaigns'). It clearly distinguishes itself from its confirm sibling, so an agent can route 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?
Explicitly routes to the alternative: show the draft for approval before calling google_ads_portfolio_target_update_confirm. It states the workflow context well but gives no explicit when-not-to-use condition (e.g., what to do if the target is unchanged or the campaign set is wrong).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_product_card_deleteBDestructiveInspect
Delete AdsAgent-owned product-card metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known. The description adds real context beyond that: only AdsAgent-owned cards can be deleted, implying other cards will not be affected. However, it omits irreversibility, prerequisite auth/permissions, and behavior when the card is not owned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the scope qualifier is placed where it is most useful. It is efficient, though arguably too terse for a destructive operation — its brevity is more under-specification than 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?
Annotations carry the destruction warning and the description carries the ownership scope, but the tool has no output schema, no prepare/confirm sibling, undocumented parameters, and no statement of what the agent gets back or whether the deletion is reversible. Adequate but with clear gaps for a destructive mutation.
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?
Two parameters with 0% schema description coverage, so the schema supplies only names and types. The description says nothing about card_id format or the connection_context token, but card_id is a self-evident identifier, keeping this at a baseline-adjacent 3 rather than a severe 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 (Delete) and resource (product-card metadata) in a single clear phrase. The qualifier 'AdsAgent-owned' narrows scope meaningfully, though it never names or contrasts with siblings like google_ads_product_card_update or google_ads_product_cards_list. An agent can infer purpose, but sibling differentiation is left implicit.
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, when-not-to-use, or alternative is given. Notably, unlike almost every other mutation in this sibling set, this delete has no prepare/confirm counterpart, and the description does not explain whether confirmation is required or when deletion is appropriate versus update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_product_card_saveCDestructiveInspect
Save AdsAgent-owned product-card metadata, replacing any existing card with the same product_key.
| Name | Required | Description | Default |
|---|---|---|---|
| merge_keys | No | ||
| description | No | ||
| product_key | Yes | ||
| display_name | Yes | ||
| funnel_events | No | ||
| decision_rules | No | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the write/destructive nature is known. The description adds genuine value by stating it replaces the existing card with the same product_key (an upsert-clobber), but omits whether unspecified fields are wiped, auth requirements, and the merge_keys behavior implied by the 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?
A single tightly-worded sentence with the replacement constraint front-loaded and no filler. Appropriately sized, though it is arguably too terse given the 7 undocumented parameters it must compensate for.
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 destructive mutation with no output schema and 0% schema description coverage, the one-sentence description is not complete enough. It lacks field semantics, merge/merge_keys behavior, and required-field guidance needed to 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% across 7 parameters, so the description must carry the burden and largely does not. Only product_key is indirectly referenced; display_name, merge_keys, funnel_events, decision_rules, and connection_context are undocumented anywhere, leaving an agent unable to populate the required display_name meaningfully.
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: 'Save AdsAgent-owned product-card metadata', specifying it operates on AdsAgent-owned cards. It even discloses replacement semantics ('replacing any existing card with the same product_key'). However, it does not differentiate against the sibling google_ads_product_card_update, so an agent cannot tell save-vs-update apart from the text.
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 is given. With siblings product_card_update, product_card_delete, and product_cards_list present, the description never states when save is preferred over update or how they differ. The replacement clause is a behavioral note, not usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_product_cards_listBRead-onlyInspect
List ledger-backed Google product cards for a date window.
| Name | Required | Description | Default |
|---|---|---|---|
| date_to | Yes | ||
| date_from | Yes | ||
| customer_id | No | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered and the description does not contradict it. The description adds the 'ledger-backed' qualifier and date scoping, but says nothing about pagination, result caps, or whether the query requires a connection context — modest added value on top of 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?
A single tight sentence with the resource and the date-window constraint front-loaded and no padding. It is arguably too terse for a four-parameter tool, but there is zero 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?
No output schema exists, so the description would ideally say something about what a 'product card' record contains and whether results are paginated or scoped per customer. Given the annotations cover the safety profile and the schema covers most of the parameters, the definition is minimally sufficient but leaves the return shape and multi-customer behavior unexplained.
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 only 25%: customer_id is documented in the schema but connection_context is not documented anywhere. The description's 'date window' wording maps loosely onto date_from/date_to and reinforces that they are the required parameters, but it does not compensate for the undocumented connection_context or clarify whether customer_id is optional and what omitting it does.
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 product cards) plus the scope constraint (ledger-backed, date window), which is enough for an agent to distinguish this from the mutation siblings google_ads_product_card_save/update/delete. It does not, however, differentiate itself from other list siblings such as google_ads_assets_list or google_ads_asset_inventory_list, leaving the agent to infer the 'product cards' vs 'assets' 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?
There is no guidance on when to call this versus the other listing tools or the product-card mutation tools, and no mention of prerequisites or exclusions. The required date window is implied but never stated as a precondition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_product_card_updateCDestructiveInspect
Update AdsAgent-owned product-card metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | ||
| merge_keys | No | ||
| description | No | ||
| display_name | No | ||
| funnel_events | No | ||
| decision_rules | No | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, non-read-only, and closed-world, so the safety profile is conveyed structurally. The description adds only the 'AdsAgent-owned' ownership constraint; it does not say whether the update is a partial merge, what happens to omitted fields, or which values can be overwritten.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, so there is no waste. But it is under-specified rather than genuinely concise for a 7-parameter mutation 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 destructive, seven-parameter mutation with no output schema and 0% schema descriptions, the description is far too thin. Fields, merge semantics, prerequisites, and the distinction from product_card_save are all 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% across 7 parameters (including nested objects like decision_rules and connection_context), and the description supplies no field-level meaning. It neither explains merge_keys, funnel_events, nor the required card_id, so it fails to compensate for the coverage 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 (Update) and resource (product-card metadata) plus a scope qualifier (AdsAgent-owned), which is clearer than a bare tautology. However, it does not distinguish itself from the close sibling google_ads_product_card_save, leaving the save-vs-update boundary to inference.
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 is given: nothing says when to call update versus product_card_save, product_card_delete, or product_card_cards_list. An agent only learns the card must already exist and be AdsAgent-owned by implication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_query_preflightBRead-onlyInspect
Check a bounded query against native field metadata without executing it. Local compatibility is not Google validateOnly.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so safety is covered. The description adds genuine behavioral context beyond that: it never executes against Google and its local compatibility verdict is explicitly NOT equivalent to Google's validateOnly, which tells the agent how much to trust the result. It does not describe the output shape, keeping it below 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?
Two tightly written sentences with the core action front-loaded and the limitation following immediately; nothing is wasted. It is arguably too terse given the complexity of the nested body object, but structurally it is clean.
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?
There is no output schema, and the description does not say what a preflight returns (errors, warnings, a pass/fail flag) or how to interpret a failure, which matters for a validation tool. It does adequately convey the tool's scope and the fidelity caveat, making it minimally viable for a nested-object 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 description coverage is only 33%: customer_id is documented, but the nested body object and connection_context carry only patterns and limits with no prose. The description explains none of these parameters (e.g. what 'resource'/'fields' should contain, or what connection_context is for), so it fails to compensate for the low coverage.
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 ('check'), the resource ('a bounded query'), and the key scoping constraint ('without executing it'), which distinguishes it from the actual query-execution siblings like google_ads_deep_analysis_query. It stops short of naming any sibling or clarifying what 'native field metadata' concretely covers, so it is clear but not maximally discriminating.
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 is only implied: the name and 'without executing it' suggest running this before a real query. The second sentence ('Local compatibility is not Google validateOnly') is a useful disambiguation caveat, but there is no explicit statement of when to prefer this over google_ads_field_metadata or the query tools, nor any exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_quick_create_confirmCInspect
Confirm a guided quick-create draft.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as a non-read-only, non-destructive, closed-world operation, so safety is partly covered. Beyond that the description adds nothing: it does not say whether confirmation executes the draft, whether the draft is consumed, whether the call is idempotent, or what side effects occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with no filler, so it is not bloated. It is, however, too thin to carry the informational load for a mutation tool, so it lands at minimum-viable rather than exemplary.
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-read-only confirmation step with no output schema and two required parameters, the definition omits prerequisites, side effects, and return behavior. Annotations cover the safety profile but the operational picture an agent needs 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 only 33% (only customer_id is documented), so the description should compensate but does not. The word "draft" loosely hints at the required draft_id, but nothing explains draft_id format or the connection_context pattern 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 gives a verb ("Confirm") and a resource ("guided quick-create draft"), so the basic action is inferable. However, it never states what entity the draft actually creates or names its counterpart sibling google_ads_quick_create_prepare, leaving the agent to guess at the scope of the confirmation.
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 prerequisite that a draft must first be produced by google_ads_quick_create_prepare, and no statement of what happens after confirmation. The prepare/confirm pattern is only implied by the tool name, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_quick_create_prepareAInspect
Prepare a paused, atomic Search (location_ids and language_ids required), App acquisition, Display responsive, standard Shopping whole-feed, or Demand Gen image graph. Existing media references only; no uploads. App engagement and pre-registration are blocked until authoritative eligibility is available. Demand Gen currently requires USD and explicit image channels. Requires channel-specific flags and full provider validation.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only giving safety hints (readOnlyHint=false, destructiveHint=false, openWorldHint=false), the description carries the real burden and delivers: campaigns are created PAUSED and atomic, media must pre-exist (no uploads), App engagement/pre-registration are blocked pending eligibility, Demand Gen is USD-only with explicit image channels, and full provider validation is required. It stops short of describing what the prepare step returns or the confirm handoff.
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?
Five terse sentences, behavior and constraints front-loaded, no filler. The opening sentence is heavily clause-stacked, but for a tool spanning five distinct campaign graphs the density is largely earned.
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 highly complex tool (five oneOf variants, no output schema, no nested-param docs), the description covers the constraints an agent most needs to avoid failure: paused/atomic creation, no uploads, eligibility gating, currency and channel rules. It would be stronger if it stated the prepare→confirm relationship and clarified output, but it is close to 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 only 33% and many parameters live in nested oneOf branches, so the description must compensate. It does flag location_ids/language_ids as required for Search and currency/channel constraints for Demand Gen, but it leaves most fields (app_id, goals, keywords, feed_label, merchant_id, etc.) with no added meaning. Partial compensation, so a middle score.
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 ('Prepare') and enumerates exactly which campaign graphs it covers (Search, App acquisition, Display responsive, Shopping whole-feed, Demand Gen), which is far more precise than the bare name. It does not, however, distinguish itself from the many sibling create tools (campaign_create_prepare, pmax_create_prepare, responsive_search_ad_create_prepare) that an agent could plausibly 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 prepare/confirm pairing (google_ads_quick_create_confirm exists) is never named, nor is the wizard-style flow into confirm. It does carve out scope behaviorally ('existing media references only; no uploads'), which helps route away from asset_upload_prepare, but gives no explicit when-to-use/when-not guidance or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_reach_forecastCRead-onlyInspect
Read bounded native reach_forecast insight. Restricted services require fresh server-verified access and otherwise refuse. No writes or access grants.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds two useful behavioral facts beyond annotations: restricted services require fresh server-verified access or the call refuses, and there are no writes or access grants. It does not disclose cost/rate-limit behavior of a forecast call or the freshness requirement for the verification 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?
Three short sentences, no filler, front-loaded with the core action. But the telegraphic style ('Read bounded native reach_forecast insight') sacrifices clarity for brevity, and the access sentence is cryptic.
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 forecast tool with a nested required body, 3 params, no output schema, and no pushed-down description of the domain, the definition is thin. It omits what the forecast returns and how to supply required inputs (location_id, products, budget), which siblings imply but the description never connects.
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 33%, with nested 'body' object containing location_id, duration_days, currency_code, and products (product_code, budget_micros) largely undocumented. The description adds nothing about these parameters, leaving budget_micros units, duration_days bounds, and product_code format to the schema alone. It does not compensate for the low coverage.
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 verb-resource pairing 'reach_forecast insight' identifies the operation, and 'bounded' hints at scope. However, it doesn't explain what a reach forecast actually returns (estimated reach/impressions for a budget) or distinguish it from sibling google_ads_reach_locations and google_ads_reach_products, which clearly supply the inputs this tool consumes.
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 or named alternative. The sibling set contains google_ads_reach_locations and google_ads_reach_products that appear to feed this tool (location_id, products), yet the description never routes the agent to gather those first. 'Restricted services ... otherwise refuse' implies a permission gate but not a usage condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_reach_locationsBRead-onlyInspect
Read bounded native reach_locations insight. Restricted services require fresh server-verified access and otherwise refuse. No writes or access grants.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint/destructiveHint/openWorldHint=false, it discloses that restricted services need fresh server-verified access and otherwise fail, and that no writes or access grants occur. That auth-failure behavior is genuinely useful context an annotation cannot carry. It still omits output shape, pagination, and what 'bounded' 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?
Three tight sentences with the core read action front-loaded and no filler. Density tips into terseness ('bounded native... insight'), but nothing is wasted.
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, so the description would ideally hint at what the locations insight returns, and the required empty body is left unexplained. The access/permission caveat is covered, making it minimally viable but with clear informational holes.
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 only 33% schema coverage and an unusual required but empty 'body' object (additionalProperties: false), the description explains no parameter at all. It never clarifies why a read-only insight requires an empty body or what connection_context is for, so it fails to compensate for the coverage 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 (Read) and resource (native reach_locations insight), and the resource name distinguishes it from close siblings like google_ads_reach_forecast and google_ads_reach_products. The qualifiers 'bounded' and 'native' are jargon that slightly blur what the insight actually covers, 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?
Nothing says when to use this versus google_ads_reach_forecast, google_ads_reach_products, or google_ads_benchmark_locations, all of which occupy the same reach/location analytics space. There is a hint that restricted services may 'refuse', but no prerequisites or selection criteria are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_reach_productsBRead-onlyInspect
Read bounded native reach_products insight. Restricted services require fresh server-verified access and otherwise refuse. No writes or access grants.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false, and openWorldHint=false, but the description adds real context beyond them: 'No writes or access grants' reaffirms the read-only surface, and the statement that restricted services require fresh server-verified access and otherwise refuse discloses an auth/refusal behavior. The auth detail is somewhat vague ('restricted services', 'fresh server-verified'), keeping 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?
Two tight sentences with the read action front-loaded and no filler. The phrase 'bounded native reach_products insight' is slightly cryptic jargon, but nothing is wasted.
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 no output schema, a read-only 3-param tool with nested input and 33% schema coverage needs more than this. The description covers the read/refusal profile adequately but leaves parameter semantics and what 'reach_products' returns 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 coverage is only 33%: customer_id carries a description in the schema, but body and connection_context (including the nested required location_id) are undocumented. The description adds nothing about any parameter, so it fails to compensate for the low coverage, especially around the nested body object.
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 (read) and resource (native reach_products insight) with a scoping qualifier ('bounded'). It is clear what the tool does, but it never distinguishes itself from adjacent siblings such as google_ads_reach_forecast or google_ads_reach_locations, so an agent must still infer which reach tool to pick.
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 statement and no routing to alternatives, despite several reach/forecast siblings existing. 'Restricted services require fresh server-verified access and otherwise refuse' is a precondition, not usage guidance about when this tool should be chosen over another.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_recommendation_apply_confirmCDestructiveInspect
Confirm an apply-recommendation draft.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is partly covered. The description adds nothing beyond them: it does not say that confirming commits the recommendation change, whether the confirm is idempotent, or what happens to the draft afterwards.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no padding, but the brevity comes at the cost of under-specification rather than efficient information density.
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 two-step write tool with no output schema and partial param coverage, the description omits the prepare dependency, the effect of confirmation, and any error or idempotency behavior an agent would 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 only 33% – only customer_id is documented, while draft_id and the connection_context pattern are bare. The description supplies no parameter meaning at all, so the coverage gap is not compensated.
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: confirming an apply-recommendation draft. The word 'apply' distinguishes it from the sibling google_ads_recommendation_dismiss_confirm, though it never mentions the prepare/confirm pairing it belongs 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?
No when-to-use guidance, no prerequisites. An agent is not told that draft_id must come from google_ads_recommendation_apply_prepare, nor what distinguishes confirm from prepare.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_recommendation_apply_prepareCInspect
Prepare applying one Google Ads recommendation.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No | ||
| recommendation_resource_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations tell the agent this is not read-only, not destructive, and not open-world, so the basic safety envelope is covered. The description adds nothing beyond that: it does not say whether 'prepare' mutates anything, produces a staged payload, expires, or requires a confirmation step — the key behavioural trait for a prepare/confirm tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence that is front-loaded and free of padding. It earns no penalty for bloat, but it is under-specified rather than concise, so it sits at the minimum-viable level for this dimension.
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 prepare/confirm sibling pair, 3 parameters at 33% schema coverage, and no output schema, the description is too thin. An agent cannot tell from it what the prepare call returns, whether it is idempotent, or that a confirm call is required to actually apply the recommendation.
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 33%: customer_id is documented but recommendation_resource_name and connection_context are not. The description does not compensate — it never states the expected resource-name format (e.g., customers/{id}/recommendations/{id}) or that connection_context is a context token, which is exactly the gap the description should fill.
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 verb phrase plus resource ('Prepare applying one Google Ads recommendation'), so the nominal purpose is legible. However, it does not distinguish this tool from its sibling google_ads_recommendation_apply_confirm, nor explain what the 'prepare' phase actually produces, leaving the two-phase intent implicit.
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 at all: no statement that this is the first half of a prepare/confirm pair, no mention that google_ads_recommendation_apply_confirm must follow, and no contrast with google_ads_recommendation_dismiss_prepare. The agent must infer the workflow from the naming convention alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_recommendation_dismiss_confirmCDestructiveInspect
Confirm a dismiss-recommendation draft.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose destructiveHint=true, readOnlyHint=false, and openWorldHint=false, so the safety profile is covered. The description adds no extra behavioral context beyond restating 'confirm' — it doesn't say the dismissal is executed immediately, whether it's reversible, or that a prior draft is consumed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero padding. It is efficient, though the brevity borders on underspecification for a destructive mutation 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 destructive, non-read-only mutation with no output schema, an undocumented draft_id, and an unstated dependence on a prepare step. Given that complexity, one sentence is not enough for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%: customer_id is documented in the schema, but draft_id and connection_context have no description anywhere. The one-sentence description adds no parameter meaning at all, so it fails to compensate for the coverage 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+resource: confirming a dismiss-recommendation draft. An agent can tell it apart from the apply-confirm sibling by the 'dismiss' qualifier. It does not, however, name or contrast with the clearly related google_ads_recommendation_dismiss_prepare sibling, so differentiation is only partial.
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 and no mention of the two-phase prepare/confirm workflow that the sibling list strongly implies. An agent is left to infer that draft_id must come from google_ads_recommendation_dismiss_prepare. 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.
google_ads_recommendation_dismiss_prepareCInspect
Prepare dismissing one Google Ads recommendation.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No | ||
| recommendation_resource_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, openWorldHint=false, destructiveHint=false, which conveys little beyond 'not a destructive read'. The description does not explain what 'prepare' actually does — whether it creates a pending task, returns a token for the confirm step, or has any side effects — nor whether it is reversible or requires specific permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words, which is structurally clean. However, the brevity borders on under-specification for a multi-step prepare tool, leaving no room for the operational context 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?
There is no output schema and the description says nothing about what the prepare step returns or how its result feeds into the confirm step. For a prepare tool in an extensive prepare/confirm family, that missing linkage is a material 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 only 33%: customer_id is documented but recommendation_resource_name and connection_context carry no description at all. The description adds no format or source guidance (e.g., where the resource name comes from), so the undocumented half of the parameters is left 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 ('Prepare dismissing') and resource ('one Google Ads recommendation'), so an agent knows it is the dismiss-side counterpart to google_ads_recommendation_apply_prepare. It does not explicitly name the confirm sibling or explain the prepare/confirm relationship, but the action itself 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?
No indication of when to use this over google_ads_recommendation_dismiss_confirm or apply_prepare, no prerequisite that the recommendation_resource_name comes from google_ads_recommendations_list, and no explanation of the two-step flow. Usage must be inferred entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_recommendations_listCRead-onlyInspect
List Google Ads recommendations for one customer.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| include_dismissed | No | ||
| connection_context | No | ||
| recommendation_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description contributes nothing beyond that: it does not explain whether results are paginated, what 'limit' defaults to, how dismissed recommendations are treated, or whether the listing reflects live or cached data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, which is structurally clean. For a tool with five parameters and a filtering surface, however, this is under-specification rather than effective conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema and 20% parameter coverage, the description should at minimum explain the filters and result shape. As written it leaves an agent without enough context to invoke the tool correctly beyond the required customer_id.
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 20% (customer_id is the sole documented parameter), yet the description mentions no other parameter semantics. Filters such as recommendation_type, include_dismissed, and limit are left completely unexplained in both schema and description, so the description fails to compensate for the coverage 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 (List), resource (Google Ads recommendations) and scope (for one customer). It does not, however, differentiate itself from the sibling read/mutate cluster (recommendation_apply_prepare, recommendation_dismiss_prepare), so an agent gets the 'what' but not the 'vs what'.
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, no prerequisites, and no reference to the apply/dismiss siblings that clearly consume its output. Usage is only inferable from the tool name cluster.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_responsive_search_ad_create_confirmCInspect
Confirm an RSA-create draft.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations supply the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the description carries a lower burden, but it still adds nothing: it never states that 'confirm' executes a previously prepared draft, that the operation is a mutation, whether it is idempotent, or what happens on failure. The word 'Confirm' hints at a commit step but the definition does not develop 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?
A single short sentence is technically concise and front-loaded, but here brevity reflects under-specification rather than economy — the sentence omits essential workflow context instead of eliminating 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 no output schema, an undocumented draft_id, and no annotations describing execution semantics, the definition is not complete enough. It omits the prepare→confirm relationship, required permissions, and the effect of the confirmation, all of which an agent needs 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 only 33% — customer_id is documented as a 10-digit id, but draft_id and connection_context have no schema descriptions. The description adds no meaning to any parameter, so it does not compensate for the coverage gap; notably it never explains where draft_id comes from (the _prepare call).
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 'Confirm an RSA-create draft.' is essentially a restatement of the tool name, which already contains the verb ('confirm') and resource ('responsive search ad create'). It gives the agent no information beyond what the name conveys and does not differentiate this from the sibling google_ads_responsive_search_ad_create_prepare, which shares the same resource.
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 statement of prerequisites (e.g., that a draft_id must first be produced by the _prepare tool), and no mention of when-not-to-use or of any alternative sibling. The agent must infer the prepare/confirm workflow entirely from naming conventions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_responsive_search_ad_create_prepareCInspect
Prepare creating a paused responsive search ad.
| Name | Required | Description | Default |
|---|---|---|---|
| headlines | Yes | ||
| final_urls | Yes | ||
| ad_group_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| descriptions | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare this is not read-only, not destructive, and not open-world, so the safety profile is covered. The description usefully adds that the ad is created paused, which is a real behavioral trait beyond the annotations, but it does not explain what 'prepare' returns, whether a confirm step must follow, or what happens if the plan is abandoned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste, but for a six-parameter mutation tool this level of brevity reads as under-specification rather than disciplined concision.
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 and no annotation coverage of the prepare semantics, so the description carries the burden of explaining the workflow and parameter requirements. It does neither, leaving the agent unable to tell what a successful prepare produces or how to proceed to confirmation.
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 17% (just customer_id), and the description adds nothing about the six parameters. Critically, it omits the content constraints an agent must satisfy for headlines, descriptions, and final_urls arrays (counts and character limits), leaving five required params essentially 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: 'Prepare creating a paused responsive search ad.' An agent can identify what is being created and that the result is paused. It does not differentiate itself from google_ads_responsive_search_ad_create_confirm, but the prepare/confirm pairing is legible from the name.
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 mention that this is the first half of a two-step prepare/confirm flow, and no prerequisites. The only routing signal is the word 'Prepare' in the name, which the description merely restates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_retail_tree_replace_confirmADestructiveInspect
After explicit approval, remove an existing Performance Max retail listing tree and replace it with the approved tree. Accepts only a matching draft from google_ads_retail_tree_replace_prepare; verifies operation kind, approval integrity and state drift before sending. Uncertain outcomes must be reconciled without replay.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds real value beyond them: pre-send verification of operation kind, approval integrity and state drift, plus the 'reconciled without replay' constraint. It doesn't describe return format or failure modes in detail, but the added behavioral guardrails are substantive.
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 destructive action and followed by the prerequisite and reconciliation constraints. Every sentence carries information; nothing is 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?
For a destructive confirm-step mutation with no output schema, the description covers the action, the prerequisite, the internal verification, and post-failure handling. It is nearly complete, with only the opaque connection_context parameter left implicit.
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 only 33% (customer_id documented, draft_id and connection_context undocumented). The description gives draft_id useful semantics (must be a matching draft from the prepare call), but connection_context and the draft_id format remain unexplained, so it only partially compensates for the coverage 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+resource ('remove an existing Performance Max retail listing tree and replace it with the approved tree'), which is far more than a restatement of the name. It also implicitly distinguishes itself from its prepare sibling by requiring a prior draft.
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 gates usage on 'explicit approval' and 'a matching draft from google_ads_retail_tree_replace_prepare', clearly naming the prerequisite tool. It also implies a when-not (drafts that don't match are rejected) and points to reconciliation for uncertain outcomes, though it doesn't name the reconcile tool directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_retail_tree_replace_prepareAInspect
Prepare to remove an existing Performance Max retail listing tree and replace it with the approved tree. Saves a private draft after Google validate-only and a complete affected-resource snapshot; does not send the change. Show the draft for explicit approval before calling google_ads_retail_tree_replace_confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, but the description adds real context beyond them: a private draft is saved after a Google validate-only pass and a complete affected-resource snapshot, and no change is transmitted. This explains why a 'remove/replace' operation is flagged non-destructive, which the annotations alone do not. It stops short of noting idempotency or draft expiry/lifetime 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?
Three sentences, zero filler, and the identity of the tool (prepare, not send) plus the validate-only/snapshot behavior are front-loaded. Every sentence carries actionable 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 prepare-step mutation tool with no output schema and a complex nested input, the description supplies the workflow context (draft, approval gate, confirm sibling) an agent needs to sequence calls correctly. The remaining gap is that the nested body structure is left entirely to the schema, which is acceptable given the schema's richness but not fully closed off.
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 33% and the description mentions no parameters at all – not customer_id, the body/asset_group_id/listing_tree shape, or connection_context. The 'listing tree' phrase loosely maps to the largest param but gives no syntax or format guidance, so the description does not compensate for the coverage 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?
The description states a specific verb+resource (prepare to remove and replace a Performance Max retail listing tree) and explicitly frames this as the non-mutating prepare half of a pair by naming google_ads_retail_tree_replace_confirm. An agent can distinguish it from the confirm sibling and from other google_ads_*_prepare tools 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?
It gives explicit sequencing: call this to save a draft, then show the draft for explicit approval, then call google_ads_retail_tree_replace_confirm. It also states when-not in effect by clarifying that this call does not send the change, so the agent knows this is not the terminal action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_schedule_replace_confirmADestructiveInspect
After explicit approval, remove the existing campaign ad schedule and replace it with the approved intervals. Accepts only a matching draft from google_ads_schedule_replace_prepare; verifies operation kind, approval integrity and state drift before sending. Uncertain outcomes must be reconciled without replay.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, but the description adds meaningful traits: it performs verification of operation kind, approval integrity and state drift before sending, and warns that uncertain outcomes must be reconciled without replay. That is real non-obvious behavioral context beyond the annotations, though it doesn't describe response/atomicity details.
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 dense sentences, no filler; the action is stated first followed by preconditions and reconciliation policy. Structure is efficient though each sentence carries multiple clauses.
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, approval-gated mutation with no output schema, the description covers the approval gate, the prepare-draft prerequisite, pre-send verification and reconcile-not-replay policy. The only gap is the undocumented connection_context parameter, which is minor relative to what is covered.
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 only 33% (only customer_id is documented as a 10-digit id). The description clarifies that draft_id must be a matching draft produced by the prepare step, which compensates partially, but connection_context remains undocumented 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 compound verb and resource ('remove the existing campaign ad schedule and replace it'), and names the exact sibling it pairs with ('google_ads_schedule_replace_prepare'). An agent can distinguish this from the prepare sibling and from other *_confirm tools 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?
'After explicit approval' and 'accepts only a matching draft from google_ads_schedule_replace_prepare' give clear preconditions for when this tool runs. The uncertain-outcome path is described behaviorally ('must be reconciled without replay') but the reconcile alternative is not named explicitly, so routing is slightly less sharp than the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_schedule_replace_prepareAInspect
Prepare to remove the existing campaign ad schedule and replace it with the approved intervals. Saves a private draft after Google validate-only and a complete affected-resource snapshot; does not send the change. Show the draft for explicit approval before calling google_ads_schedule_replace_confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply the coarse safety profile (readOnly=false, destructive=false, openWorld=false); the description adds materially more — a Google validate-only pass, a complete affected-resource snapshot, a private draft, and the fact that nothing is transmitted. It does not cover prerequisites such as required connection permissions or draft expiry/staleness, 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?
Three tight sentences, front-loaded with the action, followed by the side-effect disclosure and then the hand-off instruction. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a prepare/confirm mutation pair with no output schema, the description covers intent, side effects, and the transition to confirm — enough for an agent to call it correctly. It omits where the draft lives and how it is retrieved for review, which is a minor gap given sibling tools such as approval_plan_get exist.
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 33% (just customer_id), and the nested body object — campaign_id plus the intervals array with day/start_minute/end_minute, 15-minute multiples and a 42-item cap — is entirely schema-only. The description gestures at 'intervals' and 'campaign ad schedule' but adds no format, cardinality, or constraint detail to compensate for the coverage 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+resource ('prepare to remove the existing campaign ad schedule and replace it with the approved intervals') and explicitly contrasts itself with the sibling confirm tool. An agent can distinguish this draft-stage tool from google_ads_schedule_replace_confirm 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?
Gives explicit workflow guidance: run this to stage the change, then 'Show the draft for explicit approval before calling google_ads_schedule_replace_confirm.' It also states the negative case ('does not send the change'), so the when/when-not boundary is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_status_enable_confirmCDestructiveInspect
Confirm an enable draft.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds only that this confirms an "enable draft," which minimally implies a prior prepare step but discloses nothing about what state changes occur, whether the operation is reversible, or what permissions are required.
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 single four-word sentence is tightly front-loaded and wastes no space. It is arguably too terse, but that under-specification is better reflected in contextual completeness than in conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive confirmation tool with no output schema, the description omits critical context: the entity scope, the dependency on google_ads_status_enable_prepare, irreversibility of the action, and the meaning of draft_id. Annotations cover the safety signal, but the description remains inadequate 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 only 33% (customer_id is documented; draft_id and connection_context are not). The description does not compensate, offering no clarification that draft_id is the artifact returned by the prepare step or explaining the connection_context 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 verb ("Confirm") and a vague object ("an enable draft"), which hints at a two-step prepare/confirm workflow but does not identify what entity is being enabled (campaign, ad group, ad, etc.). It does not explicitly differentiate itself from the sibling google_ads_status_enable_prepare or google_ads_status_pause_confirm, leaving the agent to infer the relationship from naming conventions.
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 indication of when this tool should be used versus alternatives, nor any prerequisite that a draft must first be created via google_ads_status_enable_prepare. The agent receives no guidance on the two-step confirmation pattern or when confirmation is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_status_enable_prepareCInspect
Prepare enabling a campaign, ad group, or ad.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes | ||
| ad_group_id | No | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| entity_level | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false but provide no detail on what 'prepare' actually does – whether it stages a mutation, returns a token, requires approval, or has side effects. For a mutation-prep tool, the description adds almost nothing 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?
One short sentence – concise but under-specified rather than efficiently concise. It's front-loaded but doesn't earn its place given the gaps.
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-adjacent tool with 5 params, 20% schema coverage, no output schema, and no annotations detail on behavior. The description omits required workflow context (what happens after prepare, what it returns, whether it's idempotent) and parameter meaning.
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 20% – only customer_id is documented (as a 10-digit ID). The description doesn't explain entity_level (no enum, so which values are valid?), entity_id, ad_group_id, or connection_context. With five parameters at low coverage, 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?
The description states the verb ('Prepare enabling') and the resources (campaign, ad group, ad), which is clear enough. However, it doesn't explain what 'prepare' means in this two-step prepare/confirm pattern, and it doesn't distinguish from the sibling confirm tool google_ads_status_enable_confirm.
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 vs. google_ads_status_enable_confirm or google_ads_status_pause_prepare. The prepare/confirm workflow pattern isn't explained, leaving the agent to infer it from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_status_pause_confirmCDestructiveInspect
Confirm a pause draft.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the agent knows this confirms a mutating, destructive action. The description adds the useful detail that this commits a previously prepared draft (a two-phase confirmation), but says nothing about irreversibility, what happens to the draft after confirmation, or failure behavior. With annotations carrying the safety profile, 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?
A single four-word sentence with no filler, and the confirmation intent is front-loaded. However, it is under-specified rather than genuinely concise, so it does not earn a high 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?
For a destructive, two-phase mutation tool with no output schema and only 33% parameter coverage, the description is far too sparse: it omits prerequisites, parameter meaning for draft_id, and any post-confirm behavioral expectations.
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 only 33% – only customer_id carries a description ('10-digit Google Ads customer id') while draft_id is undocumented. The description supplies no parameter meaning at all, so the critical draft_id argument is unexplained in both the schema and the 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?
The description states a verb and resource ('Confirm a pause draft'), so the core action is identifiable, but it gives no scope detail and does not differentiate itself from the tightly related siblings google_ads_status_pause_prepare and google_ads_status_enable_confirm. An agent must infer the two-phase workflow from naming conventions 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, no mention of the prerequisite that a draft must first be created via google_ads_status_pause_prepare, and no exclusions. The word 'draft' weakly implies a prior step, but nothing states it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_status_pause_prepareCInspect
Prepare pausing a campaign, ad group, or ad.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes | ||
| ad_group_id | No | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| entity_level | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as non-read-only and non-destructive, but the description adds nothing about what 'prepare' actually does — whether it mutates state, creates a pending approval, or requires a follow-up confirm. For a two-phase mutation workflow the description should clarify that no live change occurs until the confirm step.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, which is appropriate structure. It is arguably under-specified rather than wasteful, so the brevity is not a structural flaw but does push the load onto other dimensions.
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-related tool with no output schema, 5 parameters at 20% coverage, and a prepare/confirm pairing, the description is too thin. It never explains the prepare semantics, the required follow-up, or the undocumented parameters.
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 20% (just customer_id), so the description must compensate — and it does add value by naming the valid entity_level targets (campaign, ad group, ad), which the schema leaves enum-free. However entity_id, ad_group_id, and connection_context remain undocumented in both places.
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 ('prepare pausing') and enumerates the entity types it applies to (campaign, ad group, ad), so the resource is unambiguous. It does not differentiate itself from google_ads_status_pause_confirm or google_ads_status_enable_prepare, but as a sibling of the confirm tool the intent is legible.
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 google_ads_status_pause_confirm, google_ads_status_enable_prepare, or google_ads_ad_status_update_prepare. The description also omits the critical workflow fact that this is a draft step requiring a subsequent confirm call, leaving the agent to infer it from the sibling naming.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_task_getARead-onlyInspect
Get one task by the opaque task_ref returned by google_ads_tasks_list.
| Name | Required | Description | Default |
|---|---|---|---|
| task_ref | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered and nothing is contradicted. The description adds only the 'opaque' qualifier on the ref; it says nothing about ref expiry, error behaviour for invalid refs, or auth/connection requirements, which is the kind of context that would raise this score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the key qualifier (where the ref comes from) arrives immediately after the verb-resource statement.
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 low-complexity, read-only getter with annotations covering safety and no output schema to explain, the description supplies the essential prerequisite linkage. Missing details are minor: the undocumented connection_context parameter and any note on ref validity/expiry.
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 explain task_ref meaningfully (opaque, sourced from the list tool), but the second parameter, connection_context, is left completely undocumented in both schema and description, so compensation is only 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?
States a specific verb (get) and resource (one task), and identifies the identifier's origin ('returned by google_ads_tasks_list'), which separates it from the sibling list tool. It stops short of contrasting with other single-object readers like tasks_get_status or google_ads_mutation_receipt_get.
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 through the phrase 'returned by google_ads_tasks_list', telling the agent this tool runs after a list call. There is no explicit statement of when to prefer it over tasks_get_status or what to do when a task_ref is stale, so guidance remains inferential.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_tasks_listCRead-onlyInspect
List recent Google AdsAgent task history using opaque task references.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds that entries are referenced by 'opaque task references', hinting at the identifier format passed to google_ads_task_get, but says nothing about ordering, recency window, 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?
A single front-loaded sentence with no wasted words. It is brief, though it omits useful detail rather than padding.
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 list tool with zero parameter documentation, no output schema, and no explanation of how the returned opaque references feed into google_ads_task_get. For a tool in a task-history workflow, that linkage is the most important thing to state and 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 must compensate and does not. 'limit' and 'connection_context' are not mentioned at all; nothing explains the recency window or what the opaque reference format in connection_context requires.
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 (Google AdsAgent task history), with the scope 'recent'. Distinguishable from sibling google_ads_task_get, which retrieves a single task rather than listing 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 guidance on when to use this versus google_ads_task_get or tasks_get_status. The agent must infer the list-vs-get distinction 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.
google_ads_template_deleteCDestructiveInspect
Delete a reusable Google ad template.
| Name | Required | Description | Default |
|---|---|---|---|
| template_id | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, openWorldHint=false, so safety is covered. The description adds nothing beyond the verb: no mention of irrevocability, what happens to campaigns/references using the template, or whether a confirmation flow exists. With annotations present the bar is lower but a destructive delete warrants more.
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 sentence, front-loaded, zero waste. Appropriately sized for what it conveys, though brevity here reflects under-specification rather than efficiency.
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, 2-param tool with zero schema descriptions and no output schema needs the description to carry param meaning and delete consequences; it provides none. Sibling ecosystem has prepare/confirm patterns that this tool doesn't reference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description explains neither template_id nor connection_context (the mctx_v1_ pattern context string). No param info at all, so the description fails to compensate for the total schema coverage 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?
Clear verb+resource: 'Delete a reusable Google ad template.' It is distinguishable from template_save/update/reverse_engineer siblings by the verb. Lacks detail about what 'reusable ad template' is, but the core purpose 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?
No guidance on when to use this vs google_ads_template_update or template_save, no prerequisites, no confirmation-step mention despite siblings like approval_plan_* and *_confirm patterns existing. The agent must infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_template_reverse_engineerBRead-onlyInspect
Read one owned responsive search ad and return an unsaved normalized template preview plus a source fingerprint.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| ad_id | Yes | ||
| ad_group_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description still adds real value by disclosing that the returned template is 'unsaved' (non-persistent) and that a 'source fingerprint' accompanies it, which an agent would not know from annotations or schema. It stops short of covering auth or rate-limit 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?
A single front-loaded sentence with no filler; the purpose and the nature of the return are stated immediately. It is efficient, though it is arguably terse rather than optimally sized given the untold return 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?
With no output schema, the description is the only place to explain the returned artifact, yet 'normalized template preview' and 'source fingerprint' are left unexplained. Combined with a five-parameter schema at 20% coverage, an agent has enough to identify the tool but not enough to predict or use its output confidently.
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 20% (just the customer_id format is documented), and there are five parameters including three required identifiers. The description never explains ad_id, ad_group_id, name, or connection_context semantics, so it fails to compensate for the documentation gap as the low coverage demands.
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 ('Read one owned responsive search ad') and specifies the output, 'an unsaved normalized template preview plus a source fingerprint'. That is materially more precise than the name alone. It does not, however, differentiate itself from close siblings like google_ads_templates_list or google_ads_responsive_search_ad_create_prepare, so it falls 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?
There is no explicit when-to-use or when-not-to-use guidance, and no alternative is named. An agent must infer from the name and the crowded template/responsive-search-ad sibling set when reverse-engineering an existing ad is preferable to listing, saving, or creating a template. Nothing in the text resolves that ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_template_saveBInspect
Save a reusable Google responsive search ad template. Optional product_ref links it to one product card when product cards are enabled.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| payload | No | ||
| product_ref | No | ||
| template_type | No | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the agent knows this is a non-destructive write. The description adds one genuine behavioral detail beyond that: product_ref links to a single product card only when product cards are enabled. It still omits whether saving is idempotent, what happens on a name collision, and any permission 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?
Two short sentences, front-loaded with the core action and resource, with the conditional product_ref detail following. Nothing is padded or repeated from 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?
For a mutation tool with 5 parameters, a nested open-ended payload object, no output schema, and no schema descriptions, the definition is too thin. An agent gets no signal on required payload shape, save-vs-update semantics, or connection context handling.
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 (including a free-form nested 'payload' object), so the description must carry the load. It explains only product_ref and implicitly template_type; name, payload, and the mctx_v1 connection_context pattern are left entirely undocumented 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?
Names a specific verb and resource: 'Save a reusable Google responsive search ad template.' That distinguishes it from google_ads_templates_list, google_ads_template_delete, and google_ads_template_reverse_engineer. However, it does not separate 'save' from the sibling google_ads_template_update, so the agent cannot tell create from upsert from that text 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?
No when-to-use guidance is given. The description never explains whether this creates a new template, overwrites an existing one by name, or acts as an upsert, nor when to prefer google_ads_template_update over this tool. Only the conditional product_ref clause hints at a usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_templates_listARead-onlyInspect
List saved reusable Google ad templates. These are ad-creation templates, not an insights breakdown. Optional product_ref limits the list to one product card when product cards are enabled; each row then includes product_link.
| Name | Required | Description | Default |
|---|---|---|---|
| product_ref | No | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=true, destructiveHint=false), so the bar is lower. The description adds genuine value beyond them: it clarifies the returned entities are ad-creation templates and discloses conditional return behavior (product_link appears per row when product_ref is used).
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 purpose before the disambiguation and the parameter note. No filler; every clause conveys 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 zero-required-param list tool with no output schema, the description covers purpose, disambiguation, and the only substantive optional parameter's effect. The undocumented connection_context is a minor gap given its conventional role.
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. It explains product_ref well, including its conditional effect and the product_link field it surfaces, but says nothing about connection_context. One of two parameters is meaningfully documented, so this is adequate but incomplete.
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 ('List saved reusable Google ad templates') and preempts a likely confusion by noting these are ad-creation templates, not an insights breakdown. It does not name its closest siblings (google_ads_template_save/update/delete), but the resource 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?
Implied usage through the product_ref note ('limits the list to one product card when product cards are enabled'), but there is no explicit when-to-use versus the template mutation siblings or google_ads_product_cards_list. An agent can infer the read-only listing role, but nothing routes it among alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_template_updateCDestructiveInspect
Update a reusable Google ad template. Pass product_ref to link one product card, or a blank string to clear that link, when product cards are enabled.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| payload | No | ||
| product_ref | No | ||
| template_id | Yes | ||
| template_type | No | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this is a mutating operation. The description usefully adds one non-obvious behavior (blank string clears the product-card link), but says nothing about how existing template fields are treated or what happens when product cards are disabled.
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 sentences, zero filler, with the core action front-loaded before the parameter nuance. The trailing conditional clause is slightly awkward 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?
For a destructive mutation with no output schema and zero schema-level parameter documentation, the description is thin: it omits what the required name/template_id do, leaves the opaque payload object undefined, and gives no return/receipt 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% for 6 parameters, so the description must carry the burden. It only clarifies product_ref (including the blank-string clearing convention); template_id, name, template_type, connection_context, and especially the open-ended nested payload object are left 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+resource: updating a reusable Google ad template. It is distinguishable from siblings like google_ads_template_save, google_ads_template_delete, and google_ads_templates_list, though the description never names or contrasts them 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 guidance on when to use this over google_ads_template_save or template_reverse_engineer, and no prerequisites (e.g., that the template must already exist, or whether a confirm/prepare step is needed unlike most sibling mutations). Only the product_ref mechanics are described.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_trending_topicsCRead-onlyInspect
Read bounded native trending_topics insight. Restricted services require fresh server-verified access and otherwise refuse. No writes or access grants.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so 'No writes or access grants' is largely redundant. The added value is the disclosure that restricted services require fresh server-verified access and otherwise refuse, which tells the agent this call can fail on auth grounds, though the phrasing is vague and hard to act on.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with the verb first. Efficient, though the jargon-heavy phrasing ('bounded native', 'fresh server-verified access') costs some 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 tool with a nested required body, low schema coverage, and no output schema, the description is too thin: it doesn't explain the entity_ids format, planning_group purpose, connection_context role, or what the returned insight contains. It leaves the agent under-informed on a non-trivial read.
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 33% (just customer_id), and the nested body object (country_id, entity_ids, planning_group) and connection_context have no descriptions anywhere. The description adds no meaning for any parameter, leaving most inputs 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 (Read) and resource (trending_topics insight), so the agent can distinguish it from keyword_themes and keyword_ideas_generate siblings. However, qualifiers like 'bounded native' are cryptic and don't clarify what a trending_topics insight actually returns versus 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?
The description offers no when-to-use guidance or comparison to alternatives among the many insights/keyword siblings. The line about 'restricted services' is a precondition note, not guidance on selecting this tool over another.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_video_upload_confirmBDestructiveInspect
Confirm a reviewed video upload draft. The exact prepared HTTPS URL (or the same gdrive: selection_key) must be supplied again; it is fetched once and never persisted.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| source_url | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the write/irreversibility profile is known. The description adds a genuine non-obvious trait — the URL is fetched once and never persisted — but does not say what the confirmation actually creates, whether it is idempotent, or what happens on failure.
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 sentences with no filler, and the core action is front-loaded ahead of the input requirement. Very tight, though the second sentence packs two ideas (URL identity and fetch-once/no-persist) that could be marginally clearer when split.
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, open-world mutation with no output schema, the description covers the critical input precondition but omits the outcome of confirming (what asset is created), handling of the undocumented draft_id/connection_context parameters, and failure behavior. Adequate but with clear 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 only 25% (only customer_id is documented), so the description must carry the load. It does clarify source_url semantics — it must match the previously prepared HTTPS URL, or reuse the same gdrive: selection_key — which is valuable, but draft_id and connection_context remain undocumented in both places.
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 ('Confirm a reviewed video upload draft'), which is clearly distinct from the sibling prepare/status/remove tools. It does not name the prepare tool that must precede it, but the phrase 'reviewed ... draft' strongly implies the two-step prepare/confirm pattern.
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 requirement that the exact prepared URL or the same gdrive: selection_key be resupplied implies this runs only after a successful prepare step, so usage is inferable. However, there is no explicit when-to-use statement, no mention of the prepare sibling, and no guidance on error or retry paths.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_video_upload_prepareBInspect
Prepare one bounded HTTPS video upload without fetching bytes or persisting the signed source URL. source_url may also be a gdrive: selection_key from creatives_list_cloud.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | No | ||
| source_url | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| video_title | Yes | ||
| video_privacy | Yes | ||
| video_description | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnlyHint=false, openWorldHint=true, destructiveHint=false). The description adds genuine non-obvious behavior: it does not fetch bytes and does not persist the signed source URL, which tells the agent about side-effect boundaries the annotations don'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?
Two dense sentences with the core action and its key constraint front-loaded; the source_url hint is appended second. Minimal waste, though the second sentence is somewhat terse and could clarify the gdrive: 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?
With no output schema and no annotation detail, the description does not explain the return contract of a 'prepare' step (presumably a handle/token consumed by google_ads_video_upload_confirm) or the prepare→confirm chaining, which is essential context for calling 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?
Schema description coverage is only 14% (just customer_id), leaving six parameters undocumented. The description adds meaning for source_url only (gdrive: selection_key), leaving channel_id, video_title, video_privacy, video_description, and connection_context unexplained, so it fails to compensate for the coverage 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 (prepare) and resource (one bounded HTTPS video upload), plus the key constraint it does not fetch bytes or persist the signed URL. This distinguishes it from the confirm sibling, though it doesn't explicitly contrast with google_ads_asset_upload_prepare.
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 line 'source_url may also be a gdrive: selection_key from creatives_list_cloud' names a valid alternative source and its originating sibling, which is useful routing. However, there is no explicit when-to-use vs google_ads_video_upload_confirm or the broader prepare/confirm workflow, so guidance remains implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_video_upload_remove_confirmBDestructiveInspect
Confirm one reviewed direct video removal draft.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this mutates and destroys state. The description adds only that the draft must have been reviewed; it says nothing about irreversibility, required permissions, or that the draft_id must originate from a prepare call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. It is efficient, though so terse that it borders on under-specification rather than tight writing.
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 three parameters, 33% schema coverage and no output schema, the description is too thin. It omits the prepare/confirm relationship, the meaning of the two undocumented parameters, and any statement of effect, all of which the agent needs to invoke it safely.
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 only 33%: draft_id and connection_context are undocumented in both schema and description. The description does not compensate by explaining what a draft_id is or how it is obtained, which is the critical link to the prepare step.
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 (Confirm) and resource (direct video removal draft), which cleanly separates it from the *_prepare and *_list siblings in the video upload family. It stops short of a 5 because 'direct video removal' is domain jargon that isn't unpacked, and the draft's origin is not tied to google_ads_video_upload_remove_prepare.
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 word 'reviewed' hints at a prepare-then-confirm workflow, so the agent can infer this tool executes an already-vetted removal draft. However, no explicit condition or named alternative (google_ads_video_upload_remove_prepare) is given, leaving the sequencing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_video_upload_remove_prepareAInspect
Prepare permanent removal of one direct video upload. Does not remove until confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| upload_ref | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, but the description adds substantive context the annotations do not: the operation is a *permanent* removal and it is gated behind a confirm step, so this call is a safe staging action. That resolves the tension an agent would feel between 'remove' and destructiveHint=false. It still omits what prepare actually produces (a token/plan for confirm).
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 zero filler, and the non-destructive nature of the call is front-loaded right after the purpose. Nothing redundant or 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?
There is no output schema and no annotation coverage of the return value, so the description should ideally say what prepare yields for the confirm step. It covers the safety model well but leaves the workflow hand-off and the two undocumented parameters unexplained, which is the minimum-viable level for a 3-parameter mutation-prep 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 description coverage is only 33%: only customer_id is documented in the schema, while upload_ref and connection_context carry no description. The phrase 'one direct video upload' loosely hints that upload_ref identifies a single upload, but no format, sourcing, or constraints are given, and connection_context is fully 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 ('Prepare permanent removal') and resource ('one direct video upload'), and the phrase 'Does not remove until confirm' distinguishes it from the sibling confirm tool. An agent can tell this apart from google_ads_video_upload_remove_confirm and google_ads_video_uploads_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?
The sentence 'Does not remove until confirm' implies the two-step prepare/confirm workflow, which is genuine routing guidance. However, it never names the confirm tool explicitly, states prerequisites (permissions on the customer), or says when this is preferable to other removal paths. 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.
google_ads_video_uploads_listBDestructiveInspect
List recent direct video uploads for one owned customer using opaque upload_ref values. May mark stale private upload records uncertain; never retries an upload.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=true, which is surprising for a 'list' tool; the description earns credit by explaining why, disclosing that it may mark stale private upload records as uncertain. This is real context beyond the annotations, though it never clarifies what 'uncertain' means or whether that mutation is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, with the core purpose front-loaded and the side-effect caveat appended. Nothing is filler, though 'opaque upload_ref values' is padding that does not obviously map to any parameter.
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 no output schema, the description should carry more: it omits the return shape, whether upload_ref values are the identifiers the agent must feed into other tools, and pagination/limit behavior. It does cover the one non-obvious trait (the destructive side effect), which keeps it at minimum-viable rather than inadequate.
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 only 33%: only customer_id is described, while limit (1-50, default 20) and connection_context (opaque mctx token) are undocumented. The description gestures at customer scoping ('one owned customer') but adds no meaning for limit or connection_context, so it does not compensate for the coverage 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?
Specific verb (List) plus resource (recent direct video uploads) and a scope qualifier (for one owned customer, using opaque upload_ref values). An agent can tell this apart from upload mutation tools like google_ads_video_upload_prepare/confirm, though the description never names a 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 or when-not-to-use guidance is given, and no alternative is named. The only routing-adjacent sentence ('never retries an upload') describes behavior rather than selection criteria, leaving the agent to infer that this is the inspection counterpart to the upload tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_video_upload_statusADestructiveInspect
Refresh one recent direct video upload by tenant-bound opaque upload_ref and update its private stored status. Never retries an upload.
| Name | Required | Description | Default |
|---|---|---|---|
| upload_ref | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the write nature is known. The description adds meaningful context beyond that: 'Never retries an upload' reassures the agent it will not re-trigger the upload, and 'private stored status' clarifies the status is stored rather than freshly queried. However it does not explain the mutation's side effects on prior status, permissions required, or the status values returned.
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, tightly packed with no filler, with the core action front-loaded and the non-retry guarantee appended as a secondary caveat.
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 no output schema and annotations carrying the safety profile, the description covers the action and scope but leaves gaps: the meaning of the resulting status, what the mutation does to existing stored state, and connection_context are all unaddressed. Adequate but not 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 coverage is 33% (only customer_id documented), so the description must compensate, and it partly does: 'tenant-bound opaque upload_ref' tells the agent the upload_ref is an opaque, tenant-scoped token rather than a readable identifier. It says nothing about connection_context, leaving one required-ish parameter 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?
The description names a specific verb (refresh) plus resource (one recent direct video upload) and the effect (update its private stored status), which clearly separates it from siblings like google_ads_video_uploads_list and the upload/remove prepare/confirm pair. It is clear on its own, but does not explicitly call out the sibling tools or how it relates to the prepare/confirm flow.
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: 'one recent direct video upload' scopes it to recent direct uploads by upload_ref, and 'Never retries an upload' hints at when it is not appropriate, but no alternative tool is named and there is no explicit when-to-use condition. It is enough to guess the intended context but not enough to confidently route between it and google_ads_video_uploads_list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_workspace_getARead-onlyInspect
Read saved hourly metrics/asset sync preferences, last sync outcome and canonical workspace links. No refresh or settings changes; scheduler health is not inferred from preferences.
| Name | Required | Description | Default |
|---|---|---|---|
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine value beyond that: it clarifies that no refresh is performed and, importantly, that scheduler health is NOT inferred from preferences — a real interpretive caveat that prevents a wrong conclusion from the returned data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, no filler, with the read scope front-loaded and the exclusions/caveat following. 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?
With no output schema, the description does the work of naming the returned fields (preferences, last sync outcome, canonical links) and warning about a common misreading. That is solid for a read-only getter, though it leaves connection_context unexplained.
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 parameter (connection_context, an opaque mctx_v1 token) is undocumented in both schema and description. It is not a complex parameter, so this is a mild gap, but the description adds no meaning about it; baseline 3 is appropriate for a one-param tool where the schema is silent.
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 (read) and enumerates the exact resource set: hourly metrics/asset sync preferences, last sync outcome, canonical workspace links. An agent can distinguish this from sync/mutation siblings like google_ads_accounts_sync or google_ads_management_prepare 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?
Explicitly bounds the tool's scope: 'No refresh or settings changes,' which tells the agent not to reach for this when it wants to trigger a sync or edit preferences. It stops short of naming a specific alternative tool, but the negative constraint gives clear context for when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_youtube_asset_confirmCInspect
Confirm creation of a Google Ads YouTube video asset reference.
| Name | Required | Description | Default |
|---|---|---|---|
| draft_id | Yes | ||
| video_url | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the description's only real addition is the word 'Confirm'. It omits the key behavioral facts for a confirmation step: that it commits a draft, whether it is idempotent, what happens if the draft expired, and whether the action is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though arguably too terse for a mutation step — brevity here comes at the cost of missing workflow context rather than being a virtue.
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 state-changing confirm tool with no output schema and incomplete parameter documentation, the description leaves out the prepare/confirm workflow, preconditions, and the effect of confirming. An agent could not reliably use this without inferring the whole two-step pattern from sibling names.
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 25% — only customer_id is documented. draft_id, video_url, and connection_context carry no schema descriptions, and the tool description says nothing about them (e.g., where draft_id originates or the format of video_url), so the coverage gap is not compensated.
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 ('Confirm creation') and a specific resource ('Google Ads YouTube video asset reference'), which distinguishes it from other confirm tools in the family. However, it never references its prepare counterpart (google_ads_youtube_asset_prepare), so it does not fully differentiate itself within the prepare/confirm pair.
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 call this versus alternatives. Nothing states that it should follow google_ads_youtube_asset_prepare or that draft_id must come from a prior prepare step, which is essential context for a confirm tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_youtube_asset_prepareCInspect
Prepare creation of a Google Ads YouTube video asset reference.
| Name | Required | Description | Default |
|---|---|---|---|
| video_url | Yes | ||
| customer_id | Yes | 10-digit Google Ads customer id. | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so safety is partly covered. The description adds nothing beyond the name: it does not state that this call is non-destructive and stages work for a later confirm, nor what artifact or token it produces. For a mutation-prepare tool this is a meaningful gap.
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?
It is a single clean, front-loaded sentence with no filler, which is good. But it is shorter than the operation warrants, so it reads as under-specification rather than disciplined 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?
With no output schema and a mutation-adjacent prepare step, the description supplies none of the missing context: the confirm follow-up, the expected shape of video_url, or the purpose of connection_context. What the agent needs to call this correctly is largely 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 coverage is only 33% (just customer_id documented), so the description is expected to compensate and does not. It never explains that video_url must point at a YouTube video, nor what connection_context is for, leaving two of three parameters undocumented in both places.
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-plus-resource ('Prepare creation of a Google Ads YouTube video asset reference'), so the agent can tell it is the staging half of a two-phase operation. It does not, however, distinguish itself from adjacent prepare tools such as google_ads_video_upload_prepare or google_ads_asset_upload_prepare, which is a real ambiguity in this namespace.
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 when-to-use context, no mention of the required follow-up google_ads_youtube_asset_confirm call, and no conditions that select it over the other prepare/confirm pairs. The two-phase workflow must be inferred entirely from the '_prepare' suffix.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insights_query_consistentARead-onlyInspect
Canonical compact ledger-only Insights read. Pass query_contract_version=1, group_by, explicit date_from/date_to, and exactly one of scope or scopes. Use scopes for server-side batch, trust coverage and pagination separately, and continue the same ordered batch only with meta.next_continuation; single-scope responses also mirror it in result.data. The cursor binds the exact Google ledger generation and page size; do not send Meta min_as_of.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| scope | No | ||
| fields | No | ||
| scopes | No | ||
| date_to | Yes | ||
| wait_ms | No | ||
| group_by | Yes | ||
| date_from | Yes | ||
| page_size | No | ||
| consistency | No | cached | |
| continuation | No | Use the opaque signed cursor returned by the previous response. It remains bound to the original customer and login-customer route, dates, grouping, supported filters/order, ordered scopes, fields, page size, and ledger snapshot. Never add Meta min_as_of. For scopes batches, use the single meta.next_continuation to continue the same ordered scopes together. | |
| response_mode | No | compact | |
| date_range_mode | No | explicit | |
| connection_context | No | ||
| query_contract_version | Yes | ||
| require_complete_range | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered; the description then adds genuinely non-obvious behavior: coverage and pagination must be trusted separately, the cursor is bound to the exact ledger generation and page size, and Meta min_as_of must not be sent. It does not explain what happens when coverage is partial, which is the one remaining unknown.
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 identity of the tool, followed by required-argument rules and then pagination caveats in priority order. No filler, though the phrasing is dense and mixed triggers and pagination guidance are not separated visually.
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 tool with annotations and no output schema, the description covers the contract version, the scope/scopes split, cursor semantics and a prohibited parameter – enough to call it correctly. It is incomplete on the relationship between page, page_size and continuation, and on how partial coverage should be handled, which are the two things most likely to cause a failed 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 only 6% with 16 parameters, so the description must compensate heavily and it does for the critical ones: it pins query_contract_version to 1, explains scope vs scopes exclusivity and that scopes means server-side batch, and restates cursor binding for continuation. Several parameters (page, fields, wait_ms, connection_context, require_complete_range, page vs continuation interaction) remain semantically 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?
The description opens with a concrete noun phrase, 'Canonical compact ledger-only Insights read,' which tells the agent this is a read of Insights data served from a ledger snapshot in compact form. It does not, however, name or contrast with the obvious siblings (google_ads_insights_query_daily, google_ads_insights_overview_query), so the agent must infer the distinction from wording 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?
It gives actionable invocation guidance – pass query_contract_version=1, group_by, explicit dates, and exactly one of scope or scopes – plus a routing rule that batch work should use scopes. It stops short of stating when to prefer this over google_ads_insights_query_daily or the overview tools, so exclusions and alternatives are 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.
mmp_delete_connectionADestructiveInspect
Delete one MMP connection on the Meta-owned MMP service. Destructive write; call only on explicit user request. Returns mmp_not_enabled while MMP is not enabled for the tenant.
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds real context beyond that: the explicit-user-request policy and the failure mode 'Returns mmp_not_enabled while MMP is not enabled for the tenant', which tells the agent how to interpret an error.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then the safety constraint, then the error behavior. Every sentence earns its place 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?
There is no output schema, so the description reasonably omits return details, and it covers the destructive nature and one error code. For a destructive delete whose two parameters are entirely undocumented, though, the meaning of connection_id and connection_context 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% for two parameters, so the description must carry the load and it does not. It never explains what connection_id identifies versus the connection_context token (pattern ^mctx_v1_[0-9a-f]{64}$) or whether the latter is optional scoping; only 'one MMP connection' hints at the target.
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: 'Delete one MMP connection on the Meta-owned MMP service', scoping the action to a single connection. It is unambiguous against siblings like mmp_get_state, mmp_refresh_connection and mmp_save_cohort_config, but it does not explicitly differentiate itself from them, which caps it at 4.
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?
'Destructive write; call only on explicit user request' states a clear precondition for invocation, which is exactly the kind of gating guidance a mutating tool needs. It does not name alternatives (e.g. mmp_refresh_connection) or say when-not to use it beyond the user-request gate, so it stops short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mmp_fetch_cohortsAInspect
Fetch and store one cohort window for one MMP app on the Meta-owned MMP service. Synchronous and slow. Returned cohort rows are paged at up to 1000 rows and 256KiB per page (a single oversized row is returned whole with oversized_row=true); when truncated=true call again with next_cursor as cursor. Returns mmp_not_enabled while MMP is not enabled for the tenant.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | ||
| app_ref | Yes | ||
| date_to | Yes | ||
| date_from | Yes | ||
| connection_id | Yes | ||
| connection_context | No | ||
| selected_source_refs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description adds substantial behavior beyond them: synchronous/slow latency, page caps (1000 rows / 256KiB), the oversized_row whole-row exception, the truncated flag driving continuation, and the mmp_not_enabled error condition. This is exactly the extra context annotations don't provide.
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 dense sentences with the core purpose front-loaded and pagination/latency/error details packed efficiently. No filler, though the pagination sentence is heavy and could be marginally clearer.
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 no output schema, the description takes on return-value disclosure and does so credibly (paging limits, oversized_row, truncated, next_cursor, error code). Combined with the latency warning, an agent has enough to invoke and continue correctly, with the main gap being unexplained non-cursor parameters.
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 7 parameters, so the description carries the full burden. It explains cursor/next_cursor pagination semantics well, but says nothing about connection_id, app_ref, date_from, date_to, connection_context, or selected_source_refs, leaving most parameters undocumented in both schema and prose.
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 (fetch and store) and resource (one cohort window for one MMP app on the Meta-owned MMP service), and it clarifies scope ('one cohort window for one MMP app') which separates it from config/state siblings like mmp_save_cohort_config or mmp_get_state. It does not explicitly name alternatives, so it falls just short of the top mark.
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 the pagination follow-up rule ('when truncated=true call again with next_cursor as cursor') and warns the call is 'Synchronous and slow', which is useful timing context. However, it offers no guidance on when to choose this tool over sibling MMP tools or what prerequisites (e.g. enabled MMP) look like beyond the error note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mmp_get_stateARead-onlyInspect
Read MMP connections, synced apps, event mappings, and cohort configs for the current user from the Meta-owned MMP service. Metadata rows are paged at up to 1000 rows and 256KiB per page (a single oversized row is returned whole with oversized_row=true); connections and cohort configs are returned whole. When truncated=true pass next_cursor back as cursor. Returns mmp_not_enabled while MMP is not enabled for the tenant. No writes.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already covering the safety profile (readOnlyHint/destructiveHint/openWorldHint), the description adds substantial behavioral context: page sizes (1000 rows / 256KiB), oversized_row handling, the truncated=true→cursor continuation rule, and the mmp_not_enabled error condition, plus an explicit 'No writes' confirmation. This is rich, non-redundant disclosure.
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 dense sentences with no filler; the what/scope leads, followed by paging mechanics and the error condition. Slightly information-heavy, but every clause earns its place and nothing is buried.
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 no output schema, the description does the work of describing return content, paging, and the error sentinel, which is appropriate for a 2-param read tool. The one remaining gap is the unexplained connection_context parameter, so it falls just short of 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 parameter meaning. It explains cursor well (pass next_cursor back as cursor when truncated=true), but connection_context is never mentioned in the description — only its format is implied by the schema pattern. Half the parameters remain semantically 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 ('Read') and enumerates the resources (MMP connections, synced apps, event mappings, cohort configs), scoped to the current user. This clearly distinguishes it from siblings like mmp_fetch_cohorts, mmp_save_cohort_config, and mmp_delete_connection, which an agent can rule out 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?
Implied usage is clear (read the current user's MMP state), but the description never says when to prefer this over mmp_fetch_cohorts or when to call it versus the connection-mutation siblings. It also gives no prerequisites beyond the tenant-level mmp_not_enabled note, leaving alternative selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mmp_refresh_connectionAInspect
Refresh one MMP connection metadata on the Meta-owned MMP service. Synchronous write; call only on explicit user request. Returns mmp_not_enabled while MMP is not enabled for the tenant.
| Name | Required | Description | Default |
|---|---|---|---|
| connection_id | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say it is a non-read-only, non-destructive, closed-world write. The description adds genuinely new behavioral facts: the operation is synchronous, it should only run on explicit user request, and it returns mmp_not_enabled when MMP is not enabled for the tenant. That error-state disclosure is useful context an agent could not get from 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?
Three short, front-loaded clauses with no filler; the verb and resource come first and the constraints follow. The phrasing "Refresh one MMP connection metadata" is slightly clipped but still 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?
For a 2-parameter write tool with no output schema and no parameter documentation, the description covers the mutation semantics and one error code but leaves both parameters and any success response undefined. Adequate at the top level, with a clear gap at the parameter 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?
Schema description coverage is 0% for both parameters, so the description carries the full burden and fails to explain connection_id or the connection_context format (mctx_v1_...). "Refresh one MMP connection metadata" only weakly implies that connection_id selects the target; connection_context is 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 (Refresh) and a specific resource (one MMP connection metadata on the Meta-owned MMP service), which clearly separates it from siblings like mmp_get_state, mmp_delete_connection, or mmp_save_cohort_config. It does not name an alternative 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?
"Call only on explicit user request" gives a real gating condition for when to invoke it, which is more than most siblings offer. It does not, however, contrast this tool against related ones such as mmp_get_state or mmp_fetch_cohorts, so the when-not/alternatives half is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mmp_save_cohort_configCDestructiveInspect
Save cohort fetch parameters for one MMP app on the Meta-owned MMP service. Only supplied fields are forwarded. Returns mmp_not_enabled while MMP is not enabled for the tenant.
| Name | Required | Description | Default |
|---|---|---|---|
| kpis | No | ||
| app_ref | Yes | ||
| groupings | No | ||
| cohort_type | No | ||
| partial_data | No | ||
| connection_id | Yes | ||
| period_filters | No | ||
| min_cohort_size | No | ||
| aggregation_type | No | ||
| connection_context | No | ||
| preferred_currency | No | ||
| preferred_timezone | No | ||
| selected_source_refs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (destructiveHint=true, readOnlyHint=false), so the burden is reduced. The description usefully adds two behavioral facts beyond the annotations: a partial-update semantic ('only supplied fields are forwarded') and a failure mode ('returns mmp_not_enabled while MMP is not enabled'). It does not explain what existing config is overwritten or whether the save is reversible, which for a destructive tool is a meaningful remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, purpose front-loaded, each carrying a distinct fact (what it does, forwarding semantics, error return). No filler or 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?
For a 13-parameter mutation tool with 0% schema coverage and no output schema, the description is under-specified. It does compensate slightly by disclosing the mmp_not_enabled return, which is useful without an output schema, but it never explains what the parameters configure or what a save replaces.
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 13 parameters, so the description must carry the parameter burden and does not. Nothing explains kpis, groupings, cohort_type, period_filters, min_cohort_size, aggregation_type, connection_context, or the currency/timezone flags. The only relevant hint is 'only supplied fields are forwarded', which does not map to any specific field.
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 (save) and resource (cohort fetch parameters) scoped to 'one MMP app on the Meta-owned MMP service'. This is clearly a write operation and distinguishes it from read siblings like mmp_fetch_cohorts and mmp_get_state. It stops short of naming an alternative explicitly, so it is clear but not sibling-differentiating at the highest 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?
No when-to-use, when-not-to-use, or alternative-tool guidance is given. The agent must infer from the name alone whether to call this vs mmp_fetch_cohorts or mmp_refresh_connection. There is a note about partial forwarding, but nothing that routes the agent between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_get_statusARead-onlyInspect
Start here. Returns redacted OAuth readiness, capability truth, guide version, and notify-only client skill-pack policy; never token values.
| Name | Required | Description | Default |
|---|---|---|---|
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable context beyond annotations: 'redacted', 'never token values' clarifies the security posture of the output, and 'notify-only client skill-pack policy' discloses a specific behavioral trait. Missing return format details, but the security disclosure is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact clauses front-loaded with 'Start here', zero waste, and the security caveat 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 no-required-param read tool with annotations covering safety, the description covers purpose and security well. However, the undocumented optional connection_context parameter and absence of output schema leaves a gap in what an agent needs to invoke it correctly with that parameter.
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 optional connection_context parameter (with a strict mctx_v1_ pattern) is not mentioned anywhere in the description. The description provides no guidance on what connection_context is or when to supply it, leaving the agent to infer purely from the schema pattern.
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 clear verb (returns) and enumerates the specific resources: redacted OAuth readiness, capability truth, guide version, and client skill-pack policy. This is distinct from siblings like google_ads_workspace_get or creatives_cloud_status, though the description doesn't explicitly name those 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?
'Start here' explicitly signals when to call this tool – first, before other setup operations. Clear context, but no explicit statement of when NOT to use it or which sibling to prefer for related status queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
support_get_report_statusBRead-onlyInspect
Read the status of your support report using its report_ref. Does not retry the failed operation.
| Name | Required | Description | Default |
|---|---|---|---|
| report_ref | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds one genuinely non-obvious behavioral fact — 'Does not retry the failed operation' — which helps an agent avoid expecting re-execution, but says nothing about permissions, rate limits, or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the primary action and followed by the key caveat; no filler. Sized appropriately for a simple read 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 simple read-only status check with no output schema, the core action and one behavioral caveat are present. But with 0% schema coverage and an undocumented connection_context parameter, the definition is not fully complete enough for reliable 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 carry parameter meaning. It names report_ref and its purpose but never explains the format/validity constraint (the ^greport_ prefix) or acknowledges connection_context at all, leaving the second parameter entirely 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 ('Read') and resource ('status of your support report'), and ties it to the report_ref input. It is clearly distinguishable from the mutation-oriented siblings, though it doesn't explicitly contrast itself with support_report_error.
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 usage is to check the status of an existing report via its ref, which is reasonable context. However, it gives no explicit when-to-use guidance relative to the similarly named support_report_error sibling, leaving the agent to infer the distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
support_report_errorADestructiveInspect
Submit an error or incorrect-data report using the most recent support_ref. Saves a redacted report and queues a notification to AdsAgent support. Use after two repeated failures or a user's data discrepancy. Reuse the same idempotency_key when retrying. Never include credentials or customer data.
| Name | Required | Description | Default |
|---|---|---|---|
| client | Yes | ||
| task_stage | Yes | ||
| support_ref | Yes | ||
| user_impact | Yes | ||
| idempotency_key | Yes | ||
| submission_mode | Yes | ||
| observation_code | Yes | ||
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint=false and destructiveHint=true, and the description usefully adds that the saved report is redacted, that a notification is queued to AdsAgent support, and that credentials/customer data must never be included. It does not describe failure behavior or what the response contains, but it meaningfully fleshes out the side effects the annotations only flag.
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 short sentences, front-loaded with the action and its routing trigger, then idempotency and the safety constraint. Every sentence carries either selection or invocation information; no filler or repetition of the title.
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, non-idempotent-by-default reporting tool with no output schema, the description covers purpose, trigger, retry semantics, and data-handling constraints. The remaining gap is parameter-level coverage of the seven required fields, which the schema leaves entirely 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% across 8 parameters (5 of them enums), so the description carries the burden and only partly compensates: it explains support_ref's provenance and idempotency_key's reuse semantics, but says nothing about submission_mode, task_stage, user_impact, observation_code, client, or connection_context. The enum values are largely self-describing, keeping this at a minimum-viable 3.
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 concrete verb+resource ('Submit an error or incorrect-data report') and its scope ('using the most recent support_ref'), which is clearly separable from the sibling support_get_report_status. It stops short of explicitly contrasting itself with that status-checking sibling, so it is clear but not fully differentiated.
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 trigger condition: 'Use after two repeated failures or a user's data discrepancy,' plus a retry rule ('Reuse the same idempotency_key when retrying'). It does not name an alternative tool or state when not to file a report, so the routing guidance is contextual rather than exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tasks_get_statusARead-onlyInspect
Poll one opaque task reference. A terminal response includes the bounded result and source_anchor for direct consumption; never rerun the original query page 1.
| Name | Required | Description | Default |
|---|---|---|---|
| task_ref | Yes | ||
| response_mode | No | compact | |
| connection_context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld=false, and the description still adds real value: it discloses that a terminal response carries the bounded result and source_anchor for direct consumption, and warns against rerunning the original query. It omits any non-terminal/pending semantics or polling cadence, keeping 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?
Two tight sentences, front-loaded with the core action and followed by the consumption/warning guidance. No filler or restated annotation 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?
With no output schema, the description usefully hints at the terminal payload (bounded result, source_anchor), but it never explains where the opaque task_ref originates, how to interpret non-terminal states, or what the remaining two parameters do—gaps that matter for a polling 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 description coverage is 0% across three parameters, so the description carries the full burden. It only characterizes task_ref as 'opaque'; response_mode (enum 'compact') and connection_context (mctx_v1 pattern) get no explanation, leaving two parameters 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 ('Poll one opaque task reference'), which is concrete and actionable. However, it does not distinguish itself from close siblings such as google_ads_task_get or google_ads_tasks_list, leaving the agent to infer which poller applies.
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 'never rerun the original query page 1' gives an explicit when-not, steering the agent toward polling instead of re-issuing the original request. It stops short of saying when to poll, how often, or how it relates to the task_get/tasks_list siblings, so usage is only partially covered.
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.
4 tool updates
- Changed
creatives_list_cloud1 field changed- added
Input schema / properties / parent_idAdded value: +{ + "description": "Drive folder id copied from an earlier item parent_id.", + "maxLength": 200, + "type": "string" +}
- Changed
google_ads_template_save1 field changed- added
Input schema / properties / product_refAdded value: +{ + "type": "string" +}
- Changed
google_ads_template_update1 field changed- added
Input schema / properties / product_refAdded value: +{ + "type": "string" +}
- Changed
google_ads_templates_list1 field changed- added
Input schema / properties / product_refAdded value: +{ + "type": "string" +}
5 tool updates
- Added
mmp_delete_connection - Added
mmp_fetch_cohorts - Added
mmp_get_state - Added
mmp_refresh_connection - Added
mmp_save_cohort_config
3 tool updates
- Changed
google_ads_accounts_list1 field changed- changed
Input schema / properties / source / descriptionPrevious value: -"Read source; defaults to the Supabase ledger. 'live' sweeps the API."New value: +"Read source; defaults to synced data ('ledger'). 'live' sweeps the API."
- Changed
google_ads_billing_get_setup1 field changed- changed
Input schema / properties / source / descriptionPrevious value: -"Read source; defaults to the Supabase ledger. 'live' sweeps the API."New value: +"Read source; defaults to synced data ('ledger'). 'live' sweeps the API."
- Changed
google_ads_insights_query_daily1 field changed- changed
Input schema / properties / source / descriptionPrevious value: -"Read source; defaults to the Supabase ledger. 'live' sweeps the API."New value: +"Read source; defaults to synced data ('ledger'). 'live' sweeps the API."
2 tool updates
- Changed
google_ads_campaign_dates_update_prepare1 field changed- changed
Input schema / properties / body / requiredPrevious value: -[ - "campaign_id", - "end_date", - "start_date" -]New value: +[ + "campaign_id", + "end_date" +]
- Changed
google_ads_management_prepare1 field changed- changed
Input schema / properties / body / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "ad_format": { - "enum": [ - "DISPLAY", - "DEMAND_GEN", - "APP" - ] - }, - "ad_id": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "affected_ad_group_ids": { - "items": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "descriptions": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 5, - "minItems": 1, - "type": "array" - }, - "headlines": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 5, - "minItems": 1, - "type": "array" - }, - "kind": { - "const": "ad_text_update" - } - }, - "required": [ - "ad_format", - "ad_id", - "affected_ad_group_ids", - "descriptions", - "headlines", - "kind" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "campaign_id": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "control_percent": { - "maximum": 99, - "minimum": 1, - "type": "integer" - }, - "kind": { - "const": "experiment_create" - }, - "name": { - "minLength": 1, - "type": "string" - }, - "suffix": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "campaign_id", - "control_percent", - "kind", - "name", - "suffix" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "experiment_id": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "kind": { - "const": "experiment_initiate" - } - }, - "required": [ - "experiment_id", - "kind" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "ad_group_id": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "ad_id": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "kind": { - "const": "ad_status" - }, - "status": { - "enum": [ - "PAUSED", - "ENABLED" - ] - } - }, - "required": [ - "ad_group_id", - "ad_id", - "kind", - "status" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "experiment_id": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "kind": { - "const": "experiment_halt" - } - }, - "required": [ - "experiment_id", - "kind" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "asset_group_id": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "final_urls": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "kind": { - "const": "asset_group_update" - }, - "status": { - "enum": [ - "PAUSED", - "ENABLED" - ] - } - }, - "required": [ - "asset_group_id", - "kind" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "campaign_id": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "end_date": { - "minLength": 1, - "type": "string" - }, - "kind": { - "const": "campaign_dates" - }, - "start_date": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "campaign_id", - "end_date", - "kind", - "start_date" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "affected_campaign_ids": { - "items": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "amount_micros": { - "maximum": 9223372036854776000, - "minimum": 1, - "type": "integer" - }, - "budget_id": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "kind": { - "const": "shared_budget" - } - }, - "required": [ - "affected_campaign_ids", - "amount_micros", - "budget_id", - "kind" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "affected_campaign_ids": { - "items": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "kind": { - "const": "portfolio_target" - }, - "strategy_id": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "strategy_type": { - "enum": [ - "TARGET_CPA", - "TARGET_ROAS" - ] - }, - "target": { - "exclusiveMinimum": 0, - "type": "number" - } - }, - "required": [ - "affected_campaign_ids", - "kind", - "strategy_id", - "strategy_type", - "target" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "campaign_id": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "intervals": { - "items": { - "additionalProperties": false, - "properties": { - "day": { - "enum": [ - "MONDAY", - "TUESDAY", - "WEDNESDAY", - "THURSDAY", - "FRIDAY", - "SATURDAY", - "SUNDAY" - ] - }, - "end_minute": { - "maximum": 1440, - "minimum": 15, - "multipleOf": 15, - "type": "integer" - }, - "start_minute": { - "maximum": 1425, - "minimum": 0, - "multipleOf": 15, - "type": "integer" - } - }, - "required": [ - "day", - "start_minute", - "end_minute" - ], - "type": "object" - }, - "maxItems": 42, - "minItems": 1, - "type": "array" - }, - "kind": { - "const": "schedule_replace" - } - }, - "required": [ - "campaign_id", - "intervals", - "kind" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "campaign_id": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "geo_target_id": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "kind": { - "const": "negative_location" - } - }, - "required": [ - "campaign_id", - "geo_target_id", - "kind" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "campaign_id": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "kind": { - "const": "negative_keyword" - }, - "match_type": { - "enum": [ - "EXACT", - "PHRASE", - "BROAD" - ] - }, - "text": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "campaign_id", - "kind", - "match_type", - "text" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "asset_group_id": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "kind": { - "const": "retail_tree_replace" - }, - "listing_tree": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "include": { - "type": "boolean" - } - }, - "required": [ - "include" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "children": { - "items": { - "additionalProperties": false, - "properties": { - "node": { - "oneOf": [ - { - "additionalProperties": false, - "properties": { - "include": { - "type": "boolean" - } - }, - "required": [ - "include" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "children": { - "items": { - "additionalProperties": false, - "properties": { - "node": { - "additionalProperties": false, - "properties": { - "include": { - "type": "boolean" - } - }, - "required": [ - "include" - ], - "type": "object" - }, - "value": { - "maxLength": 150, - "minLength": 1, - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "value", - "node" - ], - "type": "object" - }, - "maxItems": 50, - "minItems": 2, - "type": "array" - }, - "dimension": { - "enum": [ - "brand", - "item_id" - ] - } - }, - "required": [ - "dimension", - "children" - ], - "type": "object" - } - ] - }, - "value": { - "maxLength": 150, - "minLength": 1, - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "value", - "node" - ], - "type": "object" - }, - "maxItems": 50, - "minItems": 2, - "type": "array" - }, - "dimension": { - "enum": [ - "brand", - "item_id" - ] - } - }, - "required": [ - "dimension", - "children" - ], - "type": "object" - } - ] - } - }, - "required": [ - "asset_group_id", - "kind", - "listing_tree" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "asset_group_id": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "asset_id": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "field_type": { - "enum": [ - "DESCRIPTION", - "HEADLINE", - "LONG_HEADLINE", - "MARKETING_IMAGE", - "PORTRAIT_MARKETING_IMAGE", - "SQUARE_MARKETING_IMAGE", - "YOUTUBE_VIDEO" - ] - }, - "kind": { - "const": "asset_group_link" - } - }, - "required": [ - "asset_group_id", - "asset_id", - "field_type", - "kind" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "asset_group_id": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "asset_id": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "field_type": { - "enum": [ - "DESCRIPTION", - "HEADLINE", - "LONG_HEADLINE", - "MARKETING_IMAGE", - "PORTRAIT_MARKETING_IMAGE", - "SQUARE_MARKETING_IMAGE", - "YOUTUBE_VIDEO" - ] - }, - "kind": { - "const": "asset_group_unlink" - } - }, - "required": [ - "asset_group_id", - "asset_id", - "field_type", - "kind" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "ad_format": { + "enum": [ + "DISPLAY", + "DEMAND_GEN", + "APP" + ] + }, + "ad_id": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "affected_ad_group_ids": { + "items": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "descriptions": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 5, + "minItems": 1, + "type": "array" + }, + "headlines": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 5, + "minItems": 1, + "type": "array" + }, + "kind": { + "const": "ad_text_update" + } + }, + "required": [ + "ad_format", + "ad_id", + "affected_ad_group_ids", + "descriptions", + "headlines", + "kind" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "campaign_id": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "control_percent": { + "maximum": 99, + "minimum": 1, + "type": "integer" + }, + "kind": { + "const": "experiment_create" + }, + "name": { + "minLength": 1, + "type": "string" + }, + "suffix": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "campaign_id", + "control_percent", + "kind", + "name", + "suffix" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "experiment_id": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "kind": { + "const": "experiment_initiate" + } + }, + "required": [ + "experiment_id", + "kind" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ad_group_id": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "ad_id": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "kind": { + "const": "ad_status" + }, + "status": { + "enum": [ + "PAUSED", + "ENABLED" + ] + } + }, + "required": [ + "ad_group_id", + "ad_id", + "kind", + "status" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "experiment_id": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "kind": { + "const": "experiment_halt" + } + }, + "required": [ + "experiment_id", + "kind" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "asset_group_id": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "final_urls": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "kind": { + "const": "asset_group_update" + }, + "status": { + "enum": [ + "PAUSED", + "ENABLED" + ] + } + }, + "required": [ + "asset_group_id", + "kind" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "campaign_id": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "end_date": { + "minLength": 1, + "type": "string" + }, + "kind": { + "const": "campaign_dates" + }, + "start_date": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "campaign_id", + "end_date", + "kind" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "affected_campaign_ids": { + "items": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "amount_micros": { + "maximum": 9223372036854776000, + "minimum": 1, + "type": "integer" + }, + "budget_id": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "kind": { + "const": "shared_budget" + } + }, + "required": [ + "affected_campaign_ids", + "amount_micros", + "budget_id", + "kind" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "affected_campaign_ids": { + "items": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "kind": { + "const": "portfolio_target" + }, + "strategy_id": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "strategy_type": { + "enum": [ + "TARGET_CPA", + "TARGET_ROAS" + ] + }, + "target": { + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "affected_campaign_ids", + "kind", + "strategy_id", + "strategy_type", + "target" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "campaign_id": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "intervals": { + "items": { + "additionalProperties": false, + "properties": { + "day": { + "enum": [ + "MONDAY", + "TUESDAY", + "WEDNESDAY", + "THURSDAY", + "FRIDAY", + "SATURDAY", + "SUNDAY" + ] + }, + "end_minute": { + "maximum": 1440, + "minimum": 15, + "multipleOf": 15, + "type": "integer" + }, + "start_minute": { + "maximum": 1425, + "minimum": 0, + "multipleOf": 15, + "type": "integer" + } + }, + "required": [ + "day", + "start_minute", + "end_minute" + ], + "type": "object" + }, + "maxItems": 42, + "minItems": 1, + "type": "array" + }, + "kind": { + "const": "schedule_replace" + } + }, + "required": [ + "campaign_id", + "intervals", + "kind" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "campaign_id": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "geo_target_id": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "kind": { + "const": "negative_location" + } + }, + "required": [ + "campaign_id", + "geo_target_id", + "kind" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "campaign_id": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "kind": { + "const": "negative_keyword" + }, + "match_type": { + "enum": [ + "EXACT", + "PHRASE", + "BROAD" + ] + }, + "text": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "campaign_id", + "kind", + "match_type", + "text" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "asset_group_id": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "kind": { + "const": "retail_tree_replace" + }, + "listing_tree": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "include": { + "type": "boolean" + } + }, + "required": [ + "include" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "children": { + "items": { + "additionalProperties": false, + "properties": { + "node": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "include": { + "type": "boolean" + } + }, + "required": [ + "include" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "children": { + "items": { + "additionalProperties": false, + "properties": { + "node": { + "additionalProperties": false, + "properties": { + "include": { + "type": "boolean" + } + }, + "required": [ + "include" + ], + "type": "object" + }, + "value": { + "maxLength": 150, + "minLength": 1, + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "value", + "node" + ], + "type": "object" + }, + "maxItems": 50, + "minItems": 2, + "type": "array" + }, + "dimension": { + "enum": [ + "brand", + "item_id" + ] + } + }, + "required": [ + "dimension", + "children" + ], + "type": "object" + } + ] + }, + "value": { + "maxLength": 150, + "minLength": 1, + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "value", + "node" + ], + "type": "object" + }, + "maxItems": 50, + "minItems": 2, + "type": "array" + }, + "dimension": { + "enum": [ + "brand", + "item_id" + ] + } + }, + "required": [ + "dimension", + "children" + ], + "type": "object" + } + ] + } + }, + "required": [ + "asset_group_id", + "kind", + "listing_tree" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "asset_group_id": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "asset_id": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "field_type": { + "enum": [ + "DESCRIPTION", + "HEADLINE", + "LONG_HEADLINE", + "MARKETING_IMAGE", + "PORTRAIT_MARKETING_IMAGE", + "SQUARE_MARKETING_IMAGE", + "YOUTUBE_VIDEO" + ] + }, + "kind": { + "const": "asset_group_link" + } + }, + "required": [ + "asset_group_id", + "asset_id", + "field_type", + "kind" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "asset_group_id": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "asset_id": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "field_type": { + "enum": [ + "DESCRIPTION", + "HEADLINE", + "LONG_HEADLINE", + "MARKETING_IMAGE", + "PORTRAIT_MARKETING_IMAGE", + "SQUARE_MARKETING_IMAGE", + "YOUTUBE_VIDEO" + ] + }, + "kind": { + "const": "asset_group_unlink" + } + }, + "required": [ + "asset_group_id", + "asset_id", + "field_type", + "kind" + ], + "type": "object" + } +]
1 tool update
- Added
google_ads_accounts_pull
3 tool updates
- Changed
google_ads_campaign_create_prepare5 fields changed- added
Input schema / properties / excluded_location_idsAdded value: +{ + "description": "geo_target_constant ids to exclude.", + "items": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true +} - added
Input schema / properties / geo_target_typeAdded value: +{ + "description": "Defaults to PRESENCE (only people in the location).", + "enum": [ + "PRESENCE", + "PRESENCE_OR_INTEREST" + ] +} - added
Input schema / properties / language_idsAdded value: +{ + "description": "language_constant ids. Required; there is no implicit all-languages default.", + "items": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 50, + "minItems": 1, + "type": "array", + "uniqueItems": true +} - added
Input schema / properties / location_idsAdded value: +{ + "description": "geo_target_constant ids (country, region or city) to target. Required; resolve names with google_ads_geo_targets_suggest.", + "items": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true +} - added
Input schema / properties / targeting_sourceAdded value: +{ + "description": "Where the targeting came from; shown in the approval summary. Defaults to user.", + "enum": [ + "user", + "template", + "source_campaign" + ] +}
- Changed
google_ads_pmax_create_prepare5 fields changed- added
Input schema / properties / excluded_location_idsAdded value: +{ + "description": "geo_target_constant ids to exclude.", + "items": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true +} - added
Input schema / properties / geo_target_typeAdded value: +{ + "description": "Defaults to PRESENCE (only people in the location).", + "enum": [ + "PRESENCE", + "PRESENCE_OR_INTEREST" + ] +} - added
Input schema / properties / language_idsAdded value: +{ + "description": "language_constant ids. Required; there is no implicit all-languages default.", + "items": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 50, + "minItems": 1, + "type": "array", + "uniqueItems": true +} - added
Input schema / properties / location_idsAdded value: +{ + "description": "geo_target_constant ids (country, region or city) to target. Required; resolve names with google_ads_geo_targets_suggest.", + "items": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true +} - added
Input schema / properties / targeting_sourceAdded value: +{ + "description": "Where the targeting came from; shown in the approval summary. Defaults to user.", + "enum": [ + "user", + "template", + "source_campaign" + ] +}
- Changed
google_ads_quick_create_prepare1 field changed- changed
Input schema / properties / body / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "ad_group_name": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "app_id": { - "minLength": 1, - "type": "string" - }, - "app_store": { - "enum": [ - "GOOGLE_APP_STORE", - "APPLE_APP_STORE" - ] - }, - "budget_micros": { - "maximum": 9223372036854776000, - "minimum": 1, - "type": "integer" - }, - "campaign_name": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "channel_type": { - "const": "MULTI_CHANNEL" - }, - "contains_eu_political_advertising": { - "enum": [ - "CONTAINS_EU_POLITICAL_ADVERTISING", - "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" - ] - }, - "conversion_actions": { - "items": { - "pattern": "^customers/[0-9]+/conversionActions/[1-9][0-9]*$", - "type": "string" - }, - "maxItems": 20, - "type": "array", - "uniqueItems": true - }, - "currency_code": { - "pattern": "^[A-Z]{3}$", - "type": "string" - }, - "deep_link": { - "pattern": "^https://", - "type": "string" - }, - "descriptions": { - "items": { - "maxLength": 90, - "minLength": 1, - "type": "string" - }, - "maxItems": 5, - "minItems": 1, - "type": "array" - }, - "goal": { - "enum": [ - "install_tcpi", - "install_volume", - "install_action_tcpi", - "action_tcpa", - "action_volume", - "value_roas", - "value_volume", - "engagement", - "pre_registration" - ] - }, - "headlines": { - "items": { - "maxLength": 30, - "minLength": 1, - "type": "string" - }, - "maxItems": 5, - "minItems": 1, - "type": "array" - }, - "image_assets": { - "items": { - "pattern": "^customers/[0-9]+/assets/[1-9][0-9]*$", - "type": "string" - }, - "maxItems": 20, - "type": "array", - "uniqueItems": true - }, - "language_ids": { - "items": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "maxItems": 100, - "type": "array", - "uniqueItems": true - }, - "location_ids": { - "items": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "maxItems": 100, - "type": "array", - "uniqueItems": true - }, - "target_cpa_micros": { - "maximum": 9223372036854776000, - "minimum": 1, - "type": "integer" - }, - "target_roas": { - "exclusiveMinimum": 0, - "type": "number" - }, - "user_list": { - "pattern": "^customers/[0-9]+/userLists/[1-9][0-9]*$", - "type": "string" - }, - "video_assets": { - "items": { - "pattern": "^customers/[0-9]+/assets/[1-9][0-9]*$", - "type": "string" - }, - "maxItems": 20, - "type": "array", - "uniqueItems": true - } - }, - "required": [ - "channel_type", - "campaign_name", - "ad_group_name", - "budget_micros", - "app_id", - "app_store", - "currency_code", - "headlines", - "descriptions", - "contains_eu_political_advertising" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "ad_group_name": { - "minLength": 1, - "type": "string" - }, - "budget_micros": { - "minimum": 1, - "type": "integer" - }, - "business_name": { - "minLength": 1, - "type": "string" - }, - "campaign_name": { - "minLength": 1, - "type": "string" - }, - "channel_type": { - "const": "DISPLAY" - }, - "contains_eu_political_advertising": { - "enum": [ - "CONTAINS_EU_POLITICAL_ADVERTISING", - "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" - ] - }, - "currency_code": { - "pattern": "^[A-Z]{3}$", - "type": "string" - }, - "customer_id": { - "minLength": 1, - "type": "string" - }, - "descriptions": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "final_urls": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "headlines": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "language_ids": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "type": "array", - "uniqueItems": true - }, - "location_ids": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "type": "array", - "uniqueItems": true - }, - "logo_assets": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "long_headline": { - "minLength": 1, - "type": "string" - }, - "marketing_image_assets": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "square_marketing_image_assets": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - } - }, - "required": [ - "channel_type", - "campaign_name", - "ad_group_name", - "budget_micros", - "currency_code", - "contains_eu_political_advertising", - "business_name", - "headlines", - "descriptions", - "final_urls", - "marketing_image_assets", - "square_marketing_image_assets", - "logo_assets", - "long_headline" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "ad_group_name": { - "minLength": 1, - "type": "string" - }, - "all_products": { - "const": true - }, - "budget_micros": { - "minimum": 1, - "type": "integer" - }, - "campaign_name": { - "minLength": 1, - "type": "string" - }, - "channel_type": { - "const": "SHOPPING" - }, - "contains_eu_political_advertising": { - "enum": [ - "CONTAINS_EU_POLITICAL_ADVERTISING", - "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" - ] - }, - "cpc_bid_micros": { - "minimum": 1, - "type": "integer" - }, - "currency_code": { - "pattern": "^[A-Z]{3}$", - "type": "string" - }, - "customer_id": { - "minLength": 1, - "type": "string" - }, - "feed_label": { - "minLength": 1, - "type": "string" - }, - "language_ids": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "type": "array", - "uniqueItems": true - }, - "location_ids": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "type": "array", - "uniqueItems": true - }, - "merchant_id": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "channel_type", - "campaign_name", - "ad_group_name", - "budget_micros", - "currency_code", - "contains_eu_political_advertising", - "all_products", - "cpc_bid_micros", - "feed_label", - "merchant_id" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "ad_group_name": { - "minLength": 1, - "type": "string" - }, - "audience": { - "minLength": 1, - "type": "string" - }, - "budget_micros": { - "minimum": 1, - "type": "integer" - }, - "business_name": { - "minLength": 1, - "type": "string" - }, - "campaign_name": { - "minLength": 1, - "type": "string" - }, - "channel_type": { - "const": "DEMAND_GEN" - }, - "channels": { - "items": { - "enum": [ - "gmail", - "discover", - "display", - "youtubeInFeed" - ] - }, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "contains_eu_political_advertising": { - "enum": [ - "CONTAINS_EU_POLITICAL_ADVERTISING", - "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" - ] - }, - "currency_code": { - "pattern": "^[A-Z]{3}$", - "type": "string" - }, - "customer_id": { - "minLength": 1, - "type": "string" - }, - "descriptions": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "final_urls": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "headlines": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "language_ids": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "type": "array", - "uniqueItems": true - }, - "location_ids": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "type": "array", - "uniqueItems": true - }, - "logo_assets": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "marketing_image_assets": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "square_marketing_image_assets": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - } - }, - "required": [ - "channel_type", - "campaign_name", - "ad_group_name", - "budget_micros", - "currency_code", - "contains_eu_political_advertising", - "business_name", - "headlines", - "descriptions", - "final_urls", - "marketing_image_assets", - "square_marketing_image_assets", - "logo_assets", - "channels", - "audience" - ], - "type": "object" - }, - { - "additionalProperties": false, - "anyOf": [ - { - "required": [ - "campaign_name" - ] - }, - { - "required": [ - "name" - ] - } - ], - "properties": { - "ad_group_cpc_bid_micros": { - "minimum": 1, - "type": "integer" - }, - "ad_group_name": { - "maxLength": 255, - "minLength": 1, - "type": "string" - }, - "ad_group_type": { - "type": "string" - }, - "amount_micros": { - "minimum": 1, - "type": "integer" - }, - "budget_micros": { - "minimum": 1, - "type": "integer" - }, - "campaign_name": { - "maxLength": 255, - "minLength": 1, - "type": "string" - }, - "channel_type": { - "enum": [ - "SEARCH" - ] - }, - "contains_eu_political_advertising": { - "enum": [ - "CONTAINS_EU_POLITICAL_ADVERTISING", - "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" - ] - }, - "customer_id": { - "pattern": "^[0-9]+$", - "type": "string" - }, - "descriptions": { - "items": { - "maxLength": 90, - "minLength": 1, - "type": "string" - }, - "maxItems": 4, - "minItems": 2, - "type": "array" - }, - "final_urls": { - "items": { - "maxLength": 2048, - "minLength": 1, - "type": "string" - }, - "maxItems": 10, - "minItems": 1, - "type": "array" - }, - "headlines": { - "items": { - "maxLength": 30, - "minLength": 1, - "type": "string" - }, - "maxItems": 15, - "minItems": 3, - "type": "array" - }, - "keywords": { - "items": { - "oneOf": [ - { - "maxLength": 80, - "minLength": 1, - "type": "string" - }, - { - "additionalProperties": false, - "properties": { - "match_type": { - "enum": [ - "BROAD", - "PHRASE", - "EXACT" - ] - }, - "negative": { - "type": "boolean" - }, - "text": { - "maxLength": 80, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "text" - ], - "type": "object" - } - ] - }, - "maxItems": 20, - "minItems": 1, - "type": "array" - }, - "name": { - "maxLength": 255, - "minLength": 1, - "type": "string" - }, - "roas": { - "exclusiveMinimum": 0, - "type": "number" - }, - "strategy": { - "type": "string" - } - }, - "required": [ - "ad_group_name", - "budget_micros", - "keywords", - "headlines", - "descriptions", - "final_urls", - "contains_eu_political_advertising" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "ad_group_name": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "app_id": { + "minLength": 1, + "type": "string" + }, + "app_store": { + "enum": [ + "GOOGLE_APP_STORE", + "APPLE_APP_STORE" + ] + }, + "budget_micros": { + "maximum": 9223372036854776000, + "minimum": 1, + "type": "integer" + }, + "campaign_name": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "channel_type": { + "const": "MULTI_CHANNEL" + }, + "contains_eu_political_advertising": { + "enum": [ + "CONTAINS_EU_POLITICAL_ADVERTISING", + "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" + ] + }, + "conversion_actions": { + "items": { + "pattern": "^customers/[0-9]+/conversionActions/[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 20, + "type": "array", + "uniqueItems": true + }, + "currency_code": { + "pattern": "^[A-Z]{3}$", + "type": "string" + }, + "deep_link": { + "pattern": "^https://", + "type": "string" + }, + "descriptions": { + "items": { + "maxLength": 90, + "minLength": 1, + "type": "string" + }, + "maxItems": 5, + "minItems": 1, + "type": "array" + }, + "goal": { + "enum": [ + "install_tcpi", + "install_volume", + "install_action_tcpi", + "action_tcpa", + "action_volume", + "value_roas", + "value_volume", + "engagement", + "pre_registration" + ] + }, + "headlines": { + "items": { + "maxLength": 30, + "minLength": 1, + "type": "string" + }, + "maxItems": 5, + "minItems": 1, + "type": "array" + }, + "image_assets": { + "items": { + "pattern": "^customers/[0-9]+/assets/[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 20, + "type": "array", + "uniqueItems": true + }, + "language_ids": { + "items": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "location_ids": { + "items": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "target_cpa_micros": { + "maximum": 9223372036854776000, + "minimum": 1, + "type": "integer" + }, + "target_roas": { + "exclusiveMinimum": 0, + "type": "number" + }, + "user_list": { + "pattern": "^customers/[0-9]+/userLists/[1-9][0-9]*$", + "type": "string" + }, + "video_assets": { + "items": { + "pattern": "^customers/[0-9]+/assets/[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 20, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "channel_type", + "campaign_name", + "ad_group_name", + "budget_micros", + "app_id", + "app_store", + "currency_code", + "headlines", + "descriptions", + "contains_eu_political_advertising" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ad_group_name": { + "minLength": 1, + "type": "string" + }, + "budget_micros": { + "minimum": 1, + "type": "integer" + }, + "business_name": { + "minLength": 1, + "type": "string" + }, + "campaign_name": { + "minLength": 1, + "type": "string" + }, + "channel_type": { + "const": "DISPLAY" + }, + "contains_eu_political_advertising": { + "enum": [ + "CONTAINS_EU_POLITICAL_ADVERTISING", + "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" + ] + }, + "currency_code": { + "pattern": "^[A-Z]{3}$", + "type": "string" + }, + "customer_id": { + "minLength": 1, + "type": "string" + }, + "descriptions": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "final_urls": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "headlines": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "language_ids": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "location_ids": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "logo_assets": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "long_headline": { + "minLength": 1, + "type": "string" + }, + "marketing_image_assets": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "square_marketing_image_assets": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "channel_type", + "campaign_name", + "ad_group_name", + "budget_micros", + "currency_code", + "contains_eu_political_advertising", + "business_name", + "headlines", + "descriptions", + "final_urls", + "marketing_image_assets", + "square_marketing_image_assets", + "logo_assets", + "long_headline" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ad_group_name": { + "minLength": 1, + "type": "string" + }, + "all_products": { + "const": true + }, + "budget_micros": { + "minimum": 1, + "type": "integer" + }, + "campaign_name": { + "minLength": 1, + "type": "string" + }, + "channel_type": { + "const": "SHOPPING" + }, + "contains_eu_political_advertising": { + "enum": [ + "CONTAINS_EU_POLITICAL_ADVERTISING", + "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" + ] + }, + "cpc_bid_micros": { + "minimum": 1, + "type": "integer" + }, + "currency_code": { + "pattern": "^[A-Z]{3}$", + "type": "string" + }, + "customer_id": { + "minLength": 1, + "type": "string" + }, + "feed_label": { + "minLength": 1, + "type": "string" + }, + "language_ids": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "location_ids": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "merchant_id": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "channel_type", + "campaign_name", + "ad_group_name", + "budget_micros", + "currency_code", + "contains_eu_political_advertising", + "all_products", + "cpc_bid_micros", + "feed_label", + "merchant_id" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ad_group_name": { + "minLength": 1, + "type": "string" + }, + "audience": { + "minLength": 1, + "type": "string" + }, + "budget_micros": { + "minimum": 1, + "type": "integer" + }, + "business_name": { + "minLength": 1, + "type": "string" + }, + "campaign_name": { + "minLength": 1, + "type": "string" + }, + "channel_type": { + "const": "DEMAND_GEN" + }, + "channels": { + "items": { + "enum": [ + "gmail", + "discover", + "display", + "youtubeInFeed" + ] + }, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "contains_eu_political_advertising": { + "enum": [ + "CONTAINS_EU_POLITICAL_ADVERTISING", + "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" + ] + }, + "currency_code": { + "pattern": "^[A-Z]{3}$", + "type": "string" + }, + "customer_id": { + "minLength": 1, + "type": "string" + }, + "descriptions": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "final_urls": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "headlines": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "language_ids": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "location_ids": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "logo_assets": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "marketing_image_assets": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "square_marketing_image_assets": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "channel_type", + "campaign_name", + "ad_group_name", + "budget_micros", + "currency_code", + "contains_eu_political_advertising", + "business_name", + "headlines", + "descriptions", + "final_urls", + "marketing_image_assets", + "square_marketing_image_assets", + "logo_assets", + "channels", + "audience" + ], + "type": "object" + }, + { + "additionalProperties": false, + "anyOf": [ + { + "required": [ + "campaign_name" + ] + }, + { + "required": [ + "name" + ] + } + ], + "properties": { + "ad_group_cpc_bid_micros": { + "minimum": 1, + "type": "integer" + }, + "ad_group_name": { + "maxLength": 255, + "minLength": 1, + "type": "string" + }, + "ad_group_type": { + "type": "string" + }, + "amount_micros": { + "minimum": 1, + "type": "integer" + }, + "budget_micros": { + "minimum": 1, + "type": "integer" + }, + "campaign_name": { + "maxLength": 255, + "minLength": 1, + "type": "string" + }, + "channel_type": { + "enum": [ + "SEARCH" + ] + }, + "contains_eu_political_advertising": { + "enum": [ + "CONTAINS_EU_POLITICAL_ADVERTISING", + "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" + ] + }, + "customer_id": { + "pattern": "^[0-9]+$", + "type": "string" + }, + "descriptions": { + "items": { + "maxLength": 90, + "minLength": 1, + "type": "string" + }, + "maxItems": 4, + "minItems": 2, + "type": "array" + }, + "excluded_location_ids": { + "description": "geo_target_constant ids to exclude.", + "items": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "final_urls": { + "items": { + "maxLength": 2048, + "minLength": 1, + "type": "string" + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "geo_target_type": { + "description": "Defaults to PRESENCE (only people in the location).", + "enum": [ + "PRESENCE", + "PRESENCE_OR_INTEREST" + ] + }, + "headlines": { + "items": { + "maxLength": 30, + "minLength": 1, + "type": "string" + }, + "maxItems": 15, + "minItems": 3, + "type": "array" + }, + "keywords": { + "items": { + "oneOf": [ + { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "match_type": { + "enum": [ + "BROAD", + "PHRASE", + "EXACT" + ] + }, + "negative": { + "type": "boolean" + }, + "text": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "text" + ], + "type": "object" + } + ] + }, + "maxItems": 20, + "minItems": 1, + "type": "array" + }, + "language_ids": { + "description": "language_constant ids. Required; there is no implicit all-languages default.", + "items": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 50, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "location_ids": { + "description": "geo_target_constant ids (country, region or city) to target. Required; resolve names with google_ads_geo_targets_suggest.", + "items": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "name": { + "maxLength": 255, + "minLength": 1, + "type": "string" + }, + "roas": { + "exclusiveMinimum": 0, + "type": "number" + }, + "strategy": { + "type": "string" + }, + "targeting_source": { + "description": "Where the targeting came from; shown in the approval summary. Defaults to user.", + "enum": [ + "user", + "template", + "source_campaign" + ] + } + }, + "required": [ + "ad_group_name", + "budget_micros", + "keywords", + "headlines", + "descriptions", + "final_urls", + "contains_eu_political_advertising" + ], + "type": "object" + } +]
2 tool updates
- Added
creatives_cloud_status - Added
creatives_list_cloud
153 tool updates
- Changed
approval_plan_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
approval_plan_deny1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
approval_plan_get1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
approval_plan_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_account_eligibility_snapshot1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_accounts_list1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_accounts_sync1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_ad_group_create_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_ad_group_create_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_ad_status_update_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_ad_status_update_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_ad_text_update_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_ad_text_update_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_analysis_families_list1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_asset_diagnostics1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_asset_group_link_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_asset_group_link_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_asset_group_unlink_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_asset_group_unlink_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_asset_group_update_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_asset_group_update_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_asset_inventory_list1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_asset_link_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_asset_link_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_asset_requirements_get1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_asset_unlink_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_asset_unlink_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_asset_upload_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_asset_upload_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_assets_list1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_audience_attributes1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_audience_dates1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_benchmark_dates1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_benchmark_locations1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_benchmark_metrics1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_benchmark_products1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_benchmark_sources1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_bidding_update_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_bidding_update_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_billing_get_setup1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_budget_update_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_budget_update_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_campaign_create_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_campaign_create_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_campaign_dates_update_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_campaign_dates_update_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_connection_permissions_set1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_connections_list1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_conversion_action_create_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_conversion_action_create_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_conversion_action_remove_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_conversion_action_remove_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_conversion_action_update_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_conversion_action_update_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_conversion_actions_list1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_copy_ad_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_copy_ad_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_creation_capabilities_get1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_creator_channels1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_customer_route_permissions_set1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_deep_analysis_export1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_deep_analysis_query1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_entity_remove_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_entity_remove_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_entity_update_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_entity_update_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_experiment_action_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_experiment_action_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_experiment_create_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_experiment_create_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_experiment_halt_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_experiment_halt_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_experiment_initiate_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_experiment_initiate_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_experiment_promote_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_experiment_promote_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_experiment_schedule_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_experiment_schedule_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_experiment_state1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_extension_asset_create_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_extension_asset_create_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_field_metadata1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_geo_targets_suggest1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_insights_overview_batch1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_insights_overview_query1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_insights_query_daily1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_keyword_create_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_keyword_create_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_keyword_forecast_metrics1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_keyword_historical_metrics1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_keyword_ideas_generate1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_keyword_themes1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_management_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_management_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_mutation_receipt_get1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_mutation_reconcile1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_negative_keyword_add_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_negative_keyword_add_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_negative_location_add_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_negative_location_add_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_pmax_create_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_pmax_create_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_portfolio_target_update_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_portfolio_target_update_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_product_card_delete1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_product_card_save1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_product_card_update1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_product_cards_list1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_query_preflight1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_quick_create_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_quick_create_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_reach_forecast1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_reach_locations1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_reach_products1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_recommendation_apply_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_recommendation_apply_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_recommendation_dismiss_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_recommendation_dismiss_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_recommendations_list1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_responsive_search_ad_create_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_responsive_search_ad_create_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_retail_tree_replace_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_retail_tree_replace_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_schedule_replace_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_schedule_replace_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_shared_budget_update_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_shared_budget_update_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_status_enable_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_status_enable_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_status_pause_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_status_pause_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_task_get1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_tasks_list1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_template_delete1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_template_reverse_engineer1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_template_save1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_template_update1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_templates_list1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_trending_topics1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_video_upload_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_video_upload_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_video_upload_remove_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_video_upload_remove_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_video_upload_status1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_video_uploads_list1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_workspace_get1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_youtube_asset_confirm1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
google_ads_youtube_asset_prepare1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
insights_query_consistent1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
setup_get_status1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
support_get_report_status1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
support_report_error1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
- Changed
tasks_get_status1 field changed- added
Input schema / properties / connection_contextAdded value: +{ + "pattern": "^mctx_v1_[0-9a-f]{64}$", + "type": "string" +}
4 tool updates
- Added
approval_plan_confirm - Added
approval_plan_deny - Added
approval_plan_get - Added
approval_plan_prepare
34 tool updates
- Added
google_ads_ad_status_update_confirm - Added
google_ads_ad_status_update_prepare - Added
google_ads_ad_text_update_confirm - Added
google_ads_ad_text_update_prepare - Added
google_ads_asset_group_link_confirm - Added
google_ads_asset_group_link_prepare - Added
google_ads_asset_group_unlink_confirm - Added
google_ads_asset_group_unlink_prepare - Added
google_ads_asset_group_update_confirm - Added
google_ads_asset_group_update_prepare - Added
google_ads_campaign_dates_update_confirm - Added
google_ads_campaign_dates_update_prepare - Added
google_ads_experiment_create_confirm - Added
google_ads_experiment_create_prepare - Added
google_ads_experiment_halt_confirm - Added
google_ads_experiment_halt_prepare - Added
google_ads_experiment_initiate_confirm - Added
google_ads_experiment_initiate_prepare - Added
google_ads_experiment_promote_confirm - Added
google_ads_experiment_promote_prepare - Added
google_ads_experiment_schedule_confirm - Added
google_ads_experiment_schedule_prepare - Added
google_ads_negative_keyword_add_confirm - Added
google_ads_negative_keyword_add_prepare - Added
google_ads_negative_location_add_confirm - Added
google_ads_negative_location_add_prepare - Added
google_ads_portfolio_target_update_confirm - Added
google_ads_portfolio_target_update_prepare - Added
google_ads_retail_tree_replace_confirm - Added
google_ads_retail_tree_replace_prepare - Added
google_ads_schedule_replace_confirm - Added
google_ads_schedule_replace_prepare - Added
google_ads_shared_budget_update_confirm - Added
google_ads_shared_budget_update_prepare
2 tool updates
- Added
support_get_report_status - Added
support_report_error
5 tool updates
- Added
google_ads_accounts_sync - Added
google_ads_asset_inventory_list - Added
google_ads_creation_capabilities_get - Changed
google_ads_quick_create_prepare1 field changed- changed
Input schema / properties / body / oneOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "ad_group_name": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "app_id": { - "minLength": 1, - "type": "string" - }, - "app_store": { - "enum": [ - "GOOGLE_APP_STORE", - "APPLE_APP_STORE" - ] - }, - "budget_micros": { - "maximum": 9223372036854776000, - "minimum": 1, - "type": "integer" - }, - "campaign_name": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "channel_type": { - "const": "MULTI_CHANNEL" - }, - "contains_eu_political_advertising": { - "enum": [ - "CONTAINS_EU_POLITICAL_ADVERTISING", - "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" - ] - }, - "conversion_actions": { - "items": { - "pattern": "^customers/[0-9]+/conversionActions/[1-9][0-9]*$", - "type": "string" - }, - "maxItems": 20, - "type": "array", - "uniqueItems": true - }, - "currency_code": { - "pattern": "^[A-Z]{3}$", - "type": "string" - }, - "deep_link": { - "pattern": "^https://", - "type": "string" - }, - "descriptions": { - "items": { - "maxLength": 90, - "minLength": 1, - "type": "string" - }, - "maxItems": 5, - "minItems": 1, - "type": "array" - }, - "goal": { - "enum": [ - "install_tcpi", - "install_volume", - "install_action_tcpi", - "action_tcpa", - "action_volume", - "value_roas", - "value_volume", - "engagement", - "pre_registration" - ] - }, - "headlines": { - "items": { - "maxLength": 30, - "minLength": 1, - "type": "string" - }, - "maxItems": 5, - "minItems": 1, - "type": "array" - }, - "image_assets": { - "items": { - "pattern": "^customers/[0-9]+/assets/[1-9][0-9]*$", - "type": "string" - }, - "maxItems": 20, - "type": "array", - "uniqueItems": true - }, - "language_ids": { - "items": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "maxItems": 100, - "type": "array", - "uniqueItems": true - }, - "location_ids": { - "items": { - "pattern": "^[1-9][0-9]*$", - "type": "string" - }, - "maxItems": 100, - "type": "array", - "uniqueItems": true - }, - "target_cpa_micros": { - "maximum": 9223372036854776000, - "minimum": 1, - "type": "integer" - }, - "target_roas": { - "exclusiveMinimum": 0, - "type": "number" - }, - "user_list": { - "pattern": "^customers/[0-9]+/userLists/[1-9][0-9]*$", - "type": "string" - }, - "video_assets": { - "items": { - "pattern": "^customers/[0-9]+/assets/[1-9][0-9]*$", - "type": "string" - }, - "maxItems": 20, - "type": "array", - "uniqueItems": true - } - }, - "required": [ - "channel_type", - "campaign_name", - "ad_group_name", - "budget_micros", - "app_id", - "app_store", - "currency_code", - "headlines", - "descriptions", - "contains_eu_political_advertising" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "ad_group_name": { - "minLength": 1, - "type": "string" - }, - "budget_micros": { - "minimum": 1, - "type": "integer" - }, - "business_name": { - "minLength": 1, - "type": "string" - }, - "campaign_name": { - "minLength": 1, - "type": "string" - }, - "channel_type": { - "const": "DISPLAY" - }, - "contains_eu_political_advertising": { - "enum": [ - "CONTAINS_EU_POLITICAL_ADVERTISING", - "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" - ] - }, - "currency_code": { - "pattern": "^[A-Z]{3}$", - "type": "string" - }, - "customer_id": { - "minLength": 1, - "type": "string" - }, - "descriptions": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "final_urls": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "headlines": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "language_ids": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "type": "array", - "uniqueItems": true - }, - "location_ids": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "type": "array", - "uniqueItems": true - }, - "logo_assets": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "long_headline": { - "minLength": 1, - "type": "string" - }, - "marketing_image_assets": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "square_marketing_image_assets": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - } - }, - "required": [ - "channel_type", - "campaign_name", - "ad_group_name", - "budget_micros", - "currency_code", - "contains_eu_political_advertising", - "business_name", - "headlines", - "descriptions", - "final_urls", - "marketing_image_assets", - "square_marketing_image_assets", - "logo_assets", - "long_headline" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "ad_group_name": { - "minLength": 1, - "type": "string" - }, - "all_products": { - "const": true - }, - "budget_micros": { - "minimum": 1, - "type": "integer" - }, - "campaign_name": { - "minLength": 1, - "type": "string" - }, - "channel_type": { - "const": "SHOPPING" - }, - "contains_eu_political_advertising": { - "enum": [ - "CONTAINS_EU_POLITICAL_ADVERTISING", - "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" - ] - }, - "cpc_bid_micros": { - "minimum": 1, - "type": "integer" - }, - "currency_code": { - "pattern": "^[A-Z]{3}$", - "type": "string" - }, - "customer_id": { - "minLength": 1, - "type": "string" - }, - "feed_label": { - "minLength": 1, - "type": "string" - }, - "language_ids": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "type": "array", - "uniqueItems": true - }, - "location_ids": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "type": "array", - "uniqueItems": true - }, - "merchant_id": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "channel_type", - "campaign_name", - "ad_group_name", - "budget_micros", - "currency_code", - "contains_eu_political_advertising", - "all_products", - "cpc_bid_micros", - "feed_label", - "merchant_id" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "ad_group_name": { - "minLength": 1, - "type": "string" - }, - "audience": { - "minLength": 1, - "type": "string" - }, - "budget_micros": { - "minimum": 1, - "type": "integer" - }, - "business_name": { - "minLength": 1, - "type": "string" - }, - "campaign_name": { - "minLength": 1, - "type": "string" - }, - "channel_type": { - "const": "DEMAND_GEN" - }, - "channels": { - "items": { - "enum": [ - "gmail", - "discover", - "display", - "youtubeInFeed" - ] - }, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "contains_eu_political_advertising": { - "enum": [ - "CONTAINS_EU_POLITICAL_ADVERTISING", - "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" - ] - }, - "currency_code": { - "pattern": "^[A-Z]{3}$", - "type": "string" - }, - "customer_id": { - "minLength": 1, - "type": "string" - }, - "descriptions": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "final_urls": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "headlines": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "language_ids": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "type": "array", - "uniqueItems": true - }, - "location_ids": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "type": "array", - "uniqueItems": true - }, - "logo_assets": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "marketing_image_assets": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - }, - "square_marketing_image_assets": { - "items": { - "minLength": 1, - "type": "string" - }, - "maxItems": 100, - "minItems": 1, - "type": "array", - "uniqueItems": true - } - }, - "required": [ - "channel_type", - "campaign_name", - "ad_group_name", - "budget_micros", - "currency_code", - "contains_eu_political_advertising", - "business_name", - "headlines", - "descriptions", - "final_urls", - "marketing_image_assets", - "square_marketing_image_assets", - "logo_assets", - "channels", - "audience" - ], - "type": "object" - }, - { - "not": { - "required": [ - "app_id" - ] - }, - "properties": { - "channel_type": { - "enum": [ - "SEARCH" - ] - }, - "contains_eu_political_advertising": { - "enum": [ - "CONTAINS_EU_POLITICAL_ADVERTISING", - "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" - ] - } - }, - "required": [ - "contains_eu_political_advertising" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "ad_group_name": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "app_id": { + "minLength": 1, + "type": "string" + }, + "app_store": { + "enum": [ + "GOOGLE_APP_STORE", + "APPLE_APP_STORE" + ] + }, + "budget_micros": { + "maximum": 9223372036854776000, + "minimum": 1, + "type": "integer" + }, + "campaign_name": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "channel_type": { + "const": "MULTI_CHANNEL" + }, + "contains_eu_political_advertising": { + "enum": [ + "CONTAINS_EU_POLITICAL_ADVERTISING", + "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" + ] + }, + "conversion_actions": { + "items": { + "pattern": "^customers/[0-9]+/conversionActions/[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 20, + "type": "array", + "uniqueItems": true + }, + "currency_code": { + "pattern": "^[A-Z]{3}$", + "type": "string" + }, + "deep_link": { + "pattern": "^https://", + "type": "string" + }, + "descriptions": { + "items": { + "maxLength": 90, + "minLength": 1, + "type": "string" + }, + "maxItems": 5, + "minItems": 1, + "type": "array" + }, + "goal": { + "enum": [ + "install_tcpi", + "install_volume", + "install_action_tcpi", + "action_tcpa", + "action_volume", + "value_roas", + "value_volume", + "engagement", + "pre_registration" + ] + }, + "headlines": { + "items": { + "maxLength": 30, + "minLength": 1, + "type": "string" + }, + "maxItems": 5, + "minItems": 1, + "type": "array" + }, + "image_assets": { + "items": { + "pattern": "^customers/[0-9]+/assets/[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 20, + "type": "array", + "uniqueItems": true + }, + "language_ids": { + "items": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "location_ids": { + "items": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "target_cpa_micros": { + "maximum": 9223372036854776000, + "minimum": 1, + "type": "integer" + }, + "target_roas": { + "exclusiveMinimum": 0, + "type": "number" + }, + "user_list": { + "pattern": "^customers/[0-9]+/userLists/[1-9][0-9]*$", + "type": "string" + }, + "video_assets": { + "items": { + "pattern": "^customers/[0-9]+/assets/[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 20, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "channel_type", + "campaign_name", + "ad_group_name", + "budget_micros", + "app_id", + "app_store", + "currency_code", + "headlines", + "descriptions", + "contains_eu_political_advertising" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ad_group_name": { + "minLength": 1, + "type": "string" + }, + "budget_micros": { + "minimum": 1, + "type": "integer" + }, + "business_name": { + "minLength": 1, + "type": "string" + }, + "campaign_name": { + "minLength": 1, + "type": "string" + }, + "channel_type": { + "const": "DISPLAY" + }, + "contains_eu_political_advertising": { + "enum": [ + "CONTAINS_EU_POLITICAL_ADVERTISING", + "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" + ] + }, + "currency_code": { + "pattern": "^[A-Z]{3}$", + "type": "string" + }, + "customer_id": { + "minLength": 1, + "type": "string" + }, + "descriptions": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "final_urls": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "headlines": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "language_ids": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "location_ids": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "logo_assets": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "long_headline": { + "minLength": 1, + "type": "string" + }, + "marketing_image_assets": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "square_marketing_image_assets": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "channel_type", + "campaign_name", + "ad_group_name", + "budget_micros", + "currency_code", + "contains_eu_political_advertising", + "business_name", + "headlines", + "descriptions", + "final_urls", + "marketing_image_assets", + "square_marketing_image_assets", + "logo_assets", + "long_headline" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ad_group_name": { + "minLength": 1, + "type": "string" + }, + "all_products": { + "const": true + }, + "budget_micros": { + "minimum": 1, + "type": "integer" + }, + "campaign_name": { + "minLength": 1, + "type": "string" + }, + "channel_type": { + "const": "SHOPPING" + }, + "contains_eu_political_advertising": { + "enum": [ + "CONTAINS_EU_POLITICAL_ADVERTISING", + "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" + ] + }, + "cpc_bid_micros": { + "minimum": 1, + "type": "integer" + }, + "currency_code": { + "pattern": "^[A-Z]{3}$", + "type": "string" + }, + "customer_id": { + "minLength": 1, + "type": "string" + }, + "feed_label": { + "minLength": 1, + "type": "string" + }, + "language_ids": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "location_ids": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "merchant_id": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "channel_type", + "campaign_name", + "ad_group_name", + "budget_micros", + "currency_code", + "contains_eu_political_advertising", + "all_products", + "cpc_bid_micros", + "feed_label", + "merchant_id" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ad_group_name": { + "minLength": 1, + "type": "string" + }, + "audience": { + "minLength": 1, + "type": "string" + }, + "budget_micros": { + "minimum": 1, + "type": "integer" + }, + "business_name": { + "minLength": 1, + "type": "string" + }, + "campaign_name": { + "minLength": 1, + "type": "string" + }, + "channel_type": { + "const": "DEMAND_GEN" + }, + "channels": { + "items": { + "enum": [ + "gmail", + "discover", + "display", + "youtubeInFeed" + ] + }, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "contains_eu_political_advertising": { + "enum": [ + "CONTAINS_EU_POLITICAL_ADVERTISING", + "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" + ] + }, + "currency_code": { + "pattern": "^[A-Z]{3}$", + "type": "string" + }, + "customer_id": { + "minLength": 1, + "type": "string" + }, + "descriptions": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "final_urls": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "headlines": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "language_ids": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "location_ids": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "logo_assets": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "marketing_image_assets": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "square_marketing_image_assets": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "channel_type", + "campaign_name", + "ad_group_name", + "budget_micros", + "currency_code", + "contains_eu_political_advertising", + "business_name", + "headlines", + "descriptions", + "final_urls", + "marketing_image_assets", + "square_marketing_image_assets", + "logo_assets", + "channels", + "audience" + ], + "type": "object" + }, + { + "additionalProperties": false, + "anyOf": [ + { + "required": [ + "campaign_name" + ] + }, + { + "required": [ + "name" + ] + } + ], + "properties": { + "ad_group_cpc_bid_micros": { + "minimum": 1, + "type": "integer" + }, + "ad_group_name": { + "maxLength": 255, + "minLength": 1, + "type": "string" + }, + "ad_group_type": { + "type": "string" + }, + "amount_micros": { + "minimum": 1, + "type": "integer" + }, + "budget_micros": { + "minimum": 1, + "type": "integer" + }, + "campaign_name": { + "maxLength": 255, + "minLength": 1, + "type": "string" + }, + "channel_type": { + "enum": [ + "SEARCH" + ] + }, + "contains_eu_political_advertising": { + "enum": [ + "CONTAINS_EU_POLITICAL_ADVERTISING", + "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" + ] + }, + "customer_id": { + "pattern": "^[0-9]+$", + "type": "string" + }, + "descriptions": { + "items": { + "maxLength": 90, + "minLength": 1, + "type": "string" + }, + "maxItems": 4, + "minItems": 2, + "type": "array" + }, + "final_urls": { + "items": { + "maxLength": 2048, + "minLength": 1, + "type": "string" + }, + "maxItems": 10, + "minItems": 1, + "type": "array" + }, + "headlines": { + "items": { + "maxLength": 30, + "minLength": 1, + "type": "string" + }, + "maxItems": 15, + "minItems": 3, + "type": "array" + }, + "keywords": { + "items": { + "oneOf": [ + { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "match_type": { + "enum": [ + "BROAD", + "PHRASE", + "EXACT" + ] + }, + "negative": { + "type": "boolean" + }, + "text": { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "text" + ], + "type": "object" + } + ] + }, + "maxItems": 20, + "minItems": 1, + "type": "array" + }, + "name": { + "maxLength": 255, + "minLength": 1, + "type": "string" + }, + "roas": { + "exclusiveMinimum": 0, + "type": "number" + }, + "strategy": { + "type": "string" + } + }, + "required": [ + "ad_group_name", + "budget_micros", + "keywords", + "headlines", + "descriptions", + "final_urls", + "contains_eu_political_advertising" + ], + "type": "object" + } +]
- Added
google_ads_workspace_get
30 tool updates
- Added
google_ads_account_eligibility_snapshot - Added
google_ads_asset_diagnostics - Added
google_ads_audience_attributes - Added
google_ads_audience_dates - Added
google_ads_benchmark_dates - Added
google_ads_benchmark_locations - Added
google_ads_benchmark_metrics - Added
google_ads_benchmark_products - Added
google_ads_benchmark_sources - Changed
google_ads_campaign_create_prepare2 fields changed- added
Input schema / properties / contains_eu_political_advertisingAdded value: +{ + "enum": [ + "CONTAINS_EU_POLITICAL_ADVERTISING", + "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" + ] +} - changed
Input schema / requiredPrevious value: -[ - "customer_id", - "name", - "channel_type", - "budget_micros" -]New value: +[ + "customer_id", + "name", + "channel_type", + "budget_micros", + "contains_eu_political_advertising" +]
- Added
google_ads_creator_channels - Added
google_ads_experiment_action_confirm - Added
google_ads_experiment_action_prepare - Added
google_ads_experiment_state - Added
google_ads_extension_asset_create_confirm - Added
google_ads_extension_asset_create_prepare - Added
google_ads_field_metadata - Added
google_ads_geo_targets_suggest - Added
google_ads_keyword_forecast_metrics - Added
google_ads_keyword_historical_metrics - Added
google_ads_keyword_themes - Added
google_ads_management_confirm - Added
google_ads_management_prepare - Changed
google_ads_pmax_create_prepare3 fields changed- added
Input schema / properties / audience_signalAdded value: +{ + "pattern": "^customers/[0-9]+/audiences/[1-9][0-9]*$", + "type": "string" +} - added
Input schema / properties / retailAdded value: +{ + "additionalProperties": false, + "properties": { + "feed_label": { + "pattern": "^[A-Z0-9_-]{1,20}$", + "type": "string" + }, + "listing_tree": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "include": { + "type": "boolean" + } + }, + "required": [ + "include" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "children": { + "items": { + "additionalProperties": false, + "properties": { + "node": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "include": { + "type": "boolean" + } + }, + "required": [ + "include" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "children": { + "items": { + "additionalProperties": false, + "properties": { + "node": { + "additionalProperties": false, + "properties": { + "include": { + "type": "boolean" + } + }, + "required": [ + "include" + ], + "type": "object" + }, + "value": { + "maxLength": 150, + "minLength": 1, + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "value", + "node" + ], + "type": "object" + }, + "maxItems": 50, + "minItems": 2, + "type": "array" + }, + "dimension": { + "enum": [ + "brand", + "item_id" + ] + } + }, + "required": [ + "dimension", + "children" + ], + "type": "object" + } + ] + }, + "value": { + "maxLength": 150, + "minLength": 1, + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "value", + "node" + ], + "type": "object" + }, + "maxItems": 50, + "minItems": 2, + "type": "array" + }, + "dimension": { + "enum": [ + "brand", + "item_id" + ] + } + }, + "required": [ + "dimension", + "children" + ], + "type": "object" + } + ] + }, + "merchant_id": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + } + }, + "required": [ + "merchant_id", + "feed_label", + "listing_tree" + ], + "type": "object" +} - added
Input schema / properties / search_themesAdded value: +{ + "items": { + "maxLength": 80, + "minLength": 1, + "type": "string" + }, + "maxItems": 25, + "type": "array", + "uniqueItems": true +}
- Added
google_ads_query_preflight - Changed
google_ads_quick_create_prepare3 fields changed- removed
Input schema / properties / body / additionalPropertiesRemoved value: -true - added
Input schema / properties / body / oneOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "ad_group_name": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "app_id": { + "minLength": 1, + "type": "string" + }, + "app_store": { + "enum": [ + "GOOGLE_APP_STORE", + "APPLE_APP_STORE" + ] + }, + "budget_micros": { + "maximum": 9223372036854776000, + "minimum": 1, + "type": "integer" + }, + "campaign_name": { + "maxLength": 128, + "minLength": 1, + "type": "string" + }, + "channel_type": { + "const": "MULTI_CHANNEL" + }, + "contains_eu_political_advertising": { + "enum": [ + "CONTAINS_EU_POLITICAL_ADVERTISING", + "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" + ] + }, + "conversion_actions": { + "items": { + "pattern": "^customers/[0-9]+/conversionActions/[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 20, + "type": "array", + "uniqueItems": true + }, + "currency_code": { + "pattern": "^[A-Z]{3}$", + "type": "string" + }, + "deep_link": { + "pattern": "^https://", + "type": "string" + }, + "descriptions": { + "items": { + "maxLength": 90, + "minLength": 1, + "type": "string" + }, + "maxItems": 5, + "minItems": 1, + "type": "array" + }, + "goal": { + "enum": [ + "install_tcpi", + "install_volume", + "install_action_tcpi", + "action_tcpa", + "action_volume", + "value_roas", + "value_volume", + "engagement", + "pre_registration" + ] + }, + "headlines": { + "items": { + "maxLength": 30, + "minLength": 1, + "type": "string" + }, + "maxItems": 5, + "minItems": 1, + "type": "array" + }, + "image_assets": { + "items": { + "pattern": "^customers/[0-9]+/assets/[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 20, + "type": "array", + "uniqueItems": true + }, + "language_ids": { + "items": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "location_ids": { + "items": { + "pattern": "^[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "target_cpa_micros": { + "maximum": 9223372036854776000, + "minimum": 1, + "type": "integer" + }, + "target_roas": { + "exclusiveMinimum": 0, + "type": "number" + }, + "user_list": { + "pattern": "^customers/[0-9]+/userLists/[1-9][0-9]*$", + "type": "string" + }, + "video_assets": { + "items": { + "pattern": "^customers/[0-9]+/assets/[1-9][0-9]*$", + "type": "string" + }, + "maxItems": 20, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "channel_type", + "campaign_name", + "ad_group_name", + "budget_micros", + "app_id", + "app_store", + "currency_code", + "headlines", + "descriptions", + "contains_eu_political_advertising" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ad_group_name": { + "minLength": 1, + "type": "string" + }, + "budget_micros": { + "minimum": 1, + "type": "integer" + }, + "business_name": { + "minLength": 1, + "type": "string" + }, + "campaign_name": { + "minLength": 1, + "type": "string" + }, + "channel_type": { + "const": "DISPLAY" + }, + "contains_eu_political_advertising": { + "enum": [ + "CONTAINS_EU_POLITICAL_ADVERTISING", + "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" + ] + }, + "currency_code": { + "pattern": "^[A-Z]{3}$", + "type": "string" + }, + "customer_id": { + "minLength": 1, + "type": "string" + }, + "descriptions": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "final_urls": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "headlines": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "language_ids": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "location_ids": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "logo_assets": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "long_headline": { + "minLength": 1, + "type": "string" + }, + "marketing_image_assets": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "square_marketing_image_assets": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "channel_type", + "campaign_name", + "ad_group_name", + "budget_micros", + "currency_code", + "contains_eu_political_advertising", + "business_name", + "headlines", + "descriptions", + "final_urls", + "marketing_image_assets", + "square_marketing_image_assets", + "logo_assets", + "long_headline" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ad_group_name": { + "minLength": 1, + "type": "string" + }, + "all_products": { + "const": true + }, + "budget_micros": { + "minimum": 1, + "type": "integer" + }, + "campaign_name": { + "minLength": 1, + "type": "string" + }, + "channel_type": { + "const": "SHOPPING" + }, + "contains_eu_political_advertising": { + "enum": [ + "CONTAINS_EU_POLITICAL_ADVERTISING", + "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" + ] + }, + "cpc_bid_micros": { + "minimum": 1, + "type": "integer" + }, + "currency_code": { + "pattern": "^[A-Z]{3}$", + "type": "string" + }, + "customer_id": { + "minLength": 1, + "type": "string" + }, + "feed_label": { + "minLength": 1, + "type": "string" + }, + "language_ids": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "location_ids": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "merchant_id": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "channel_type", + "campaign_name", + "ad_group_name", + "budget_micros", + "currency_code", + "contains_eu_political_advertising", + "all_products", + "cpc_bid_micros", + "feed_label", + "merchant_id" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ad_group_name": { + "minLength": 1, + "type": "string" + }, + "audience": { + "minLength": 1, + "type": "string" + }, + "budget_micros": { + "minimum": 1, + "type": "integer" + }, + "business_name": { + "minLength": 1, + "type": "string" + }, + "campaign_name": { + "minLength": 1, + "type": "string" + }, + "channel_type": { + "const": "DEMAND_GEN" + }, + "channels": { + "items": { + "enum": [ + "gmail", + "discover", + "display", + "youtubeInFeed" + ] + }, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "contains_eu_political_advertising": { + "enum": [ + "CONTAINS_EU_POLITICAL_ADVERTISING", + "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" + ] + }, + "currency_code": { + "pattern": "^[A-Z]{3}$", + "type": "string" + }, + "customer_id": { + "minLength": 1, + "type": "string" + }, + "descriptions": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "final_urls": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "headlines": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "language_ids": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "location_ids": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "type": "array", + "uniqueItems": true + }, + "logo_assets": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "marketing_image_assets": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + }, + "square_marketing_image_assets": { + "items": { + "minLength": 1, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "channel_type", + "campaign_name", + "ad_group_name", + "budget_micros", + "currency_code", + "contains_eu_political_advertising", + "business_name", + "headlines", + "descriptions", + "final_urls", + "marketing_image_assets", + "square_marketing_image_assets", + "logo_assets", + "channels", + "audience" + ], + "type": "object" + }, + { + "not": { + "required": [ + "app_id" + ] + }, + "properties": { + "channel_type": { + "enum": [ + "SEARCH" + ] + }, + "contains_eu_political_advertising": { + "enum": [ + "CONTAINS_EU_POLITICAL_ADVERTISING", + "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" + ] + } + }, + "required": [ + "contains_eu_political_advertising" + ], + "type": "object" + } +] - removed
Input schema / properties / body / typeRemoved value: -"object"
- Added
google_ads_reach_forecast - Added
google_ads_reach_locations - Added
google_ads_reach_products - Added
google_ads_trending_topics
82 tool updates
- First observed
google_ads_accounts_list - First observed
google_ads_ad_group_create_confirm - First observed
google_ads_ad_group_create_prepare - First observed
google_ads_analysis_families_list - First observed
google_ads_asset_link_confirm - First observed
google_ads_asset_link_prepare - First observed
google_ads_asset_requirements_get - First observed
google_ads_asset_unlink_confirm - First observed
google_ads_asset_unlink_prepare - First observed
google_ads_asset_upload_confirm - First observed
google_ads_asset_upload_prepare - First observed
google_ads_assets_list - First observed
google_ads_bidding_update_confirm - First observed
google_ads_bidding_update_prepare - First observed
google_ads_billing_get_setup - First observed
google_ads_budget_update_confirm - First observed
google_ads_budget_update_prepare - First observed
google_ads_campaign_create_confirm - First observed
google_ads_campaign_create_prepare - First observed
google_ads_connection_permissions_set - First observed
google_ads_connections_list - First observed
google_ads_conversion_action_create_confirm - First observed
google_ads_conversion_action_create_prepare - First observed
google_ads_conversion_action_remove_confirm - First observed
google_ads_conversion_action_remove_prepare - First observed
google_ads_conversion_action_update_confirm - First observed
google_ads_conversion_action_update_prepare - First observed
google_ads_conversion_actions_list - First observed
google_ads_copy_ad_confirm - First observed
google_ads_copy_ad_prepare - First observed
google_ads_customer_route_permissions_set - First observed
google_ads_deep_analysis_export - First observed
google_ads_deep_analysis_query - First observed
google_ads_entity_remove_confirm - First observed
google_ads_entity_remove_prepare - First observed
google_ads_entity_update_confirm - First observed
google_ads_entity_update_prepare - First observed
google_ads_insights_overview_batch - First observed
google_ads_insights_overview_query - First observed
google_ads_insights_query_daily - First observed
google_ads_keyword_create_confirm - First observed
google_ads_keyword_create_prepare - First observed
google_ads_keyword_ideas_generate - First observed
google_ads_mutation_receipt_get - First observed
google_ads_mutation_reconcile - First observed
google_ads_pmax_create_confirm - First observed
google_ads_pmax_create_prepare - First observed
google_ads_product_card_delete - First observed
google_ads_product_card_save - First observed
google_ads_product_card_update - First observed
google_ads_product_cards_list - First observed
google_ads_quick_create_confirm - First observed
google_ads_quick_create_prepare - First observed
google_ads_recommendation_apply_confirm - First observed
google_ads_recommendation_apply_prepare - First observed
google_ads_recommendation_dismiss_confirm - First observed
google_ads_recommendation_dismiss_prepare - First observed
google_ads_recommendations_list - First observed
google_ads_responsive_search_ad_create_confirm - First observed
google_ads_responsive_search_ad_create_prepare - First observed
google_ads_status_enable_confirm - First observed
google_ads_status_enable_prepare - First observed
google_ads_status_pause_confirm - First observed
google_ads_status_pause_prepare - First observed
google_ads_task_get - First observed
google_ads_tasks_list - First observed
google_ads_template_delete - First observed
google_ads_template_reverse_engineer - First observed
google_ads_template_save - First observed
google_ads_template_update - First observed
google_ads_templates_list - First observed
google_ads_video_upload_confirm - First observed
google_ads_video_upload_prepare - First observed
google_ads_video_upload_remove_confirm - First observed
google_ads_video_upload_remove_prepare - First observed
google_ads_video_upload_status - First observed
google_ads_video_uploads_list - First observed
google_ads_youtube_asset_confirm - First observed
google_ads_youtube_asset_prepare - First observed
insights_query_consistent - First observed
setup_get_status - First observed
tasks_get_status
Related MCP Connectors
Hosted Meta ads MCP with OAuth, bounded reads, and prepare/confirm writes.
Hosted TikTok ads MCP with OAuth, bounded reads, and prepare/confirm writes.
Google Ads MCP with 20,000+ account peer context and staged approve-then-execute writes.
Google Ads MCP: reports, search terms, negatives, budgets, campaigns. Approval on every write.
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server to read and manage Google Ads accounts via GAQL queries, campaign/ad group/keyword operations, and safe write support with draft-confirm flow.1621 npmMIT
- AlicenseAqualityAmaintenanceAn MCP server that enables safe, audited mutation of Google Ads campaigns—creating ads, ad groups, keywords, and assets or adjusting budgets and statuses—with a dry-run default and an optional guarded remove operation, plus read-only Keyword Planner ideas.221MIT
- AlicenseAqualityCmaintenanceEnables MCP clients to retrieve Google Ads performance data, run GAQL queries and keyword planner research, and create or manage search and P-MAX campaigns, budgets, keywords, and ad status. Includes safety defaults such as paused creation and read-only mode.16MIT
- FlicenseNot gradedqualityCmaintenanceEnables authorized users to securely connect to and manage their Google Ads accounts through MCP clients, with support for campaigns, ad groups, ads, keywords, reporting, and billing. Runs as a remote multi-user server on Cloudflare Workers with per-user authentication and safety controls.-
Glama MCP Gateway
Add one secure layer between your agents and this server.