Skip to main content
Glama

AdsAgent — Google Ads MCP

Server Details

Hosted Google Ads MCP with OAuth, bounded reads, and prepare/confirm writes.

Ownership verified
Status
Healthy
Uptime
61.0% over 62 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

C2.9/5.0

Scored across 161 tools

Disambiguation3/5

The dominant prepare/confirm pairs target distinct resources, but generic compatibility entrypoints (google_ads_management_prepare/confirm, google_ads_entity_update_prepare/confirm, google_ads_experiment_action_prepare/confirm) explicitly overlap with dozens of named tools, and generic status tools (google_ads_status_pause/enable) overlap with google_ads_ad_status_update and entity updates. Descriptions steer toward the named tools, but boundaries between generic and specific tools are genuinely blurry.

Naming Consistency4/5

Most tools follow a predictable resource_action_prepare/confirm snake_case pattern with a consistent google_ads_ prefix. Deviations exist (noun-first forms like google_ads_field_metadata, google_ads_asset_requirements_get, google_ads_keyword_forecast_metrics, and mixed get/list suffixes), but these are minor relative to the dominant convention.

Tool Count1/5

161 tools vastly exceeds any reasonable surface and the rubric's 50+ threshold. The prepare/confirm split plus generic compatibility duplicates, insight readers, and sub-service groups (approval, creatives, mmp, support, tasks) create an enormous, hard-to-navigate set where many tools earn questionable place.

Completeness5/5

Coverage is exceptionally thorough: full lifecycle (prepare/confirm/reconcile/receipt) for campaigns, ad groups, ads, keywords, assets, budgets, bidding, experiments, conversion actions, negatives, schedules, retail trees, plus templates, approval plans, insights, and account/connection management. No obvious domain gaps in the Google Ads surface.

Available Tools

161 tools
approval_plan_confirmA
Destructive
Inspect

Confirm a stored mixed advertising plan using approval_ref and expected_plan_digest. The exact expected_changes returned by prepare and the user's agreement to every displayed item are required; 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. One approval covers the complete displayed change set within this platform, including account and target names, operations, before/after values, warnings and expiry. Confirmation requires the user's agreement in the conversation. Approval refs, draft IDs, digests and tokens are tool-traffic handles. Each item has its own receipt. A submitted background task is not a verified provider change. Uncertain writes and host safety denials are never replayed. A waiting_quota plan retains its confirmation until the original expiry; the same agreement covers proven-unsent rows after retry_at. Changed or expired plans require review.

ParametersJSON Schema
NameRequiredDescriptionDefault
approval_refYes
expected_changesYes
connection_contextNo
expected_plan_digestYes

TDQS

A4.7/5.0
Behavior5/5

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

Far beyond the annotations: it enumerates the mutation classes (create/copy/edit/remove/delivery/budget/bid), states spend impact, sequential-not-atomic execution, stop-on-failure, per-item receipts, and how uncertain writes/host denials are never replayed. Annotations only supply destructive/openWorld flags; the description carries all the operational risk context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core confirm/mismatch rule, but the block is long and repeats itself: the waiting_quota/retry_at agreement is stated twice, and 'user agreement' appears three times. Content earns its place but could be trimmed materially.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, no-output-schema tool it covers everything an agent needs: required evidence, idempotency/repeat semantics, receipt handling, quota-deferred resumption, and no-replay guarantees for uncertain or denied writes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It explains approval_ref, expected_plan_digest, and expected_changes semantically (matching the displayed plan/digest, one-entry-per-change). It does not clarify connection_context, leaving one of four params unaddressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Confirm a stored mixed advertising plan') and ties the inputs to their producer ('The exact expected_changes returned by prepare'). Combined with the sibling set (approval_plan_prepare/deny/get), an agent can immediately place it in the lifecycle.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit preconditions: the prepare-returned expected_changes and the user's in-conversation agreement are required, the server rejects mismatches, and 'Changed or expired plans require review' gives an explicit when-not. Repeat-call behavior is also specified, so the agent knows how to re-invoke safely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

approval_plan_denyA
Destructive
Inspect

Discard a prepared or quota-waiting mixed approval, preserving completed receipts; no Google changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
approval_refYes
connection_contextNo
expected_plan_digestYes

TDQS

A3.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_getB
Read-only
Inspect

Read one stored mixed approval and its receipts. No provider requests or writes.

ParametersJSON Schema
NameRequiredDescriptionDefault
approval_refYes
connection_contextNo

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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. One approval covers the complete displayed change set within this platform, including account and target names, operations, before/after values, warnings and expiry. Confirmation requires the user's agreement in the conversation. Approval refs, draft IDs, digests and tokens are tool-traffic handles. Each item has its own receipt. A submitted background task is not a verified provider change. Uncertain writes and host safety denials are never replayed. A waiting_quota plan retains its confirmation until the original expiry; the same agreement covers proven-unsent rows after retry_at. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
draft_idsYes
source_urlsNo
connection_contextNo

TDQS

A4.3/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: the approval is private and immutable, no ad changes are sent, source drafts become members and can no longer be confirmed separately, and edge-case policy is spelled out (waiting_quota retention, changed/expired plans require review, uncertain writes never replayed, URLs encrypted at rest and omitted from review). The annotations (readOnly=false, destructive=false) are consistent with this 'writes internal state only' framing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action is front-loaded in the first sentence and each subsequent sentence carries operational policy rather than filler. However, some lines are terse to the point of opacity ('Approval refs, draft IDs, digests and tokens are tool-traffic handles'), which costs a little clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex multi-draft approval tool with no output schema and no parameter descriptions, the description covers lifecycle, confirmation requirements, and failure/retry edge cases thoroughly. It still omits what the tool returns (only hinting at 'refs' and 'receipts') and never documents connection_context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning. It explains source_urls well (keyed by draft ID, original video source URL, encrypted at rest) and implies the constraints on draft_ids (1–20, owned, unexpired, unconfirmed), but connection_context is never described, leaving one of three parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with explicit scope: 'Combine 1–20 owned, unexpired, unconfirmed advertising drafts into one immutable approval.' The two-phase semantics ('sends no advertising changes', 'Confirmation requires the user's agreement') clearly separate it from approval_plan_confirm/deny without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives prerequisites for the drafts (owned, unexpired, unconfirmed) and a conditional usage rule ('For video uploads supply the original source URL in source_urls keyed by draft ID'). It does not explicitly state when to prefer this over other prepare tools or what to do if drafts fail the eligibility conditions, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

creatives_cloud_statusA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
connection_contextNo

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_cloudA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNo
limitNo
parent_idNoDrive folder id copied from an earlier item parent_id.
connection_contextNo

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

insights_query_consistentA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
scopeNo
fieldsNo
scopesNo
date_toYes
wait_msNo
group_byYes
date_fromYes
page_sizeNo
consistencyNocached
continuationNoUse 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_modeNocompact
date_range_modeNoexplicit
connection_contextNo
query_contract_versionYes
require_complete_rangeNo

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_connectionA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
connection_idYes
connection_contextNo

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNo
app_refYes
date_toYes
date_fromYes
connection_idYes
connection_contextNo
selected_source_refsNo

TDQS

A3.7/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_stateA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNo
connection_contextNo

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
connection_idYes
connection_contextNo

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_configC
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kpisNo
app_refYes
groupingsNo
cohort_typeNo
partial_dataNo
connection_idYes
period_filtersNo
min_cohort_sizeNo
aggregation_typeNo
connection_contextNo
preferred_currencyNo
preferred_timezoneNo
selected_source_refsNo

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_statusA
Read-only
Inspect

Start here. Returns redacted OAuth readiness, capability truth, guide version, and notify-only client skill-pack policy; never token values.

ParametersJSON Schema
NameRequiredDescriptionDefault
connection_contextNo

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_statusB
Read-only
Inspect

Read the status of your support report using its report_ref. Does not retry the failed operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
report_refYes
connection_contextNo

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_errorA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
clientYes
task_stageYes
support_refYes
user_impactYes
idempotency_keyYes
submission_modeYes
observation_codeYes
connection_contextNo

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_statusA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_refYes
response_modeNocompact
connection_contextNo

TDQS

A3.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 8 tool updates
    • Changedgoogle_ads_bidding_update_confirm4 fields changed
      • addedInput schema / properties / approval_ref
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / expected_changes
        Added value: +{
        +  "items": {
        +    "type": "object"
        +  },
        +  "maxItems": 10,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / expected_plan_digest
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "customer_id",
        -  "draft_id"
        -]New value: +[
        +  "customer_id"
        +]
    • Changedgoogle_ads_bidding_update_prepare2 fields changed
      • addedInput schema / properties / items
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "amount_micros": {
        +        "type": "integer"
        +      },
        +      "campaign_id": {
        +        "type": "string"
        +      },
        +      "roas": {
        +        "type": "number"
        +      },
        +      "strategy": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "campaign_id",
        +      "strategy"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 10,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "customer_id",
        -  "campaign_id",
        -  "strategy"
        -]New value: +[
        +  "customer_id"
        +]
    • Changedgoogle_ads_budget_update_confirm4 fields changed
      • addedInput schema / properties / approval_ref
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / expected_changes
        Added value: +{
        +  "items": {
        +    "type": "object"
        +  },
        +  "maxItems": 10,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / expected_plan_digest
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "customer_id",
        -  "draft_id"
        -]New value: +[
        +  "customer_id"
        +]
    • Changedgoogle_ads_budget_update_prepare2 fields changed
      • addedInput schema / properties / items
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "amount_micros": {
        +        "type": "integer"
        +      },
        +      "campaign_id": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "campaign_id",
        +      "amount_micros"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 10,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "customer_id",
        -  "campaign_id",
        -  "amount_micros"
        -]New value: +[
        +  "customer_id"
        +]
    • Changedgoogle_ads_status_enable_confirm4 fields changed
      • addedInput schema / properties / approval_ref
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / expected_changes
        Added value: +{
        +  "items": {
        +    "type": "object"
        +  },
        +  "maxItems": 10,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / expected_plan_digest
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "customer_id",
        -  "draft_id"
        -]New value: +[
        +  "customer_id"
        +]
    • Changedgoogle_ads_status_enable_prepare2 fields changed
      • addedInput schema / properties / items
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "ad_group_id": {
        +        "type": "string"
        +      },
        +      "entity_id": {
        +        "type": "string"
        +      },
        +      "entity_level": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "entity_level",
        +      "entity_id"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 10,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "customer_id",
        -  "entity_level",
        -  "entity_id"
        -]New value: +[
        +  "customer_id"
        +]
    • Changedgoogle_ads_status_pause_confirm4 fields changed
      • addedInput schema / properties / approval_ref
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / expected_changes
        Added value: +{
        +  "items": {
        +    "type": "object"
        +  },
        +  "maxItems": 10,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / expected_plan_digest
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "customer_id",
        -  "draft_id"
        -]New value: +[
        +  "customer_id"
        +]
    • Changedgoogle_ads_status_pause_prepare2 fields changed
      • addedInput schema / properties / items
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "ad_group_id": {
        +        "type": "string"
        +      },
        +      "entity_id": {
        +        "type": "string"
        +      },
        +      "entity_level": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "entity_level",
        +      "entity_id"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 10,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "customer_id",
        -  "entity_level",
        -  "entity_id"
        -]New value: +[
        +  "customer_id"
        +]
  2. 4 tool updates
    • Changedcreatives_list_cloud1 field changed
      • addedInput schema / properties / parent_id
        Added value: +{
        +  "description": "Drive folder id copied from an earlier item parent_id.",
        +  "maxLength": 200,
        +  "type": "string"
        +}
    • Changedgoogle_ads_template_save1 field changed
      • addedInput schema / properties / product_ref
        Added value: +{
        +  "type": "string"
        +}
    • Changedgoogle_ads_template_update1 field changed
      • addedInput schema / properties / product_ref
        Added value: +{
        +  "type": "string"
        +}
    • Changedgoogle_ads_templates_list1 field changed
      • addedInput schema / properties / product_ref
        Added value: +{
        +  "type": "string"
        +}
  3. 5 tool updates
    • Addedmmp_delete_connection
    • Addedmmp_fetch_cohorts
    • Addedmmp_get_state
    • Addedmmp_refresh_connection
    • Addedmmp_save_cohort_config
  4. 3 tool updates
    • Changedgoogle_ads_accounts_list1 field changed
      • changedInput schema / properties / source / description
        Previous 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."
    • Changedgoogle_ads_billing_get_setup1 field changed
      • changedInput schema / properties / source / description
        Previous 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."
    • Changedgoogle_ads_insights_query_daily1 field changed
      • changedInput schema / properties / source / description
        Previous 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."
  5. 2 tool updates
    • Changedgoogle_ads_campaign_dates_update_prepare1 field changed
      • changedInput schema / properties / body / required
        Previous value: -[
        -  "campaign_id",
        -  "end_date",
        -  "start_date"
        -]New value: +[
        +  "campaign_id",
        +  "end_date"
        +]
    • Changedgoogle_ads_management_prepare1 field changed
      • changedInput schema / properties / body / oneOf
        Previous 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"
        +  }
        +]
  6. 1 tool update
    • Addedgoogle_ads_accounts_pull
  7. 3 tool updates
    • Changedgoogle_ads_campaign_create_prepare5 fields changed
      • addedInput schema / properties / excluded_location_ids
        Added value: +{
        +  "description": "geo_target_constant ids to exclude.",
        +  "items": {
        +    "pattern": "^[1-9][0-9]*$",
        +    "type": "string"
        +  },
        +  "maxItems": 100,
        +  "type": "array",
        +  "uniqueItems": true
        +}
      • addedInput schema / properties / geo_target_type
        Added value: +{
        +  "description": "Defaults to PRESENCE (only people in the location).",
        +  "enum": [
        +    "PRESENCE",
        +    "PRESENCE_OR_INTEREST"
        +  ]
        +}
      • addedInput schema / properties / language_ids
        Added 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
        +}
      • addedInput schema / properties / location_ids
        Added 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
        +}
      • addedInput schema / properties / targeting_source
        Added value: +{
        +  "description": "Where the targeting came from; shown in the approval summary. Defaults to user.",
        +  "enum": [
        +    "user",
        +    "template",
        +    "source_campaign"
        +  ]
        +}
    • Changedgoogle_ads_pmax_create_prepare5 fields changed
      • addedInput schema / properties / excluded_location_ids
        Added value: +{
        +  "description": "geo_target_constant ids to exclude.",
        +  "items": {
        +    "pattern": "^[1-9][0-9]*$",
        +    "type": "string"
        +  },
        +  "maxItems": 100,
        +  "type": "array",
        +  "uniqueItems": true
        +}
      • addedInput schema / properties / geo_target_type
        Added value: +{
        +  "description": "Defaults to PRESENCE (only people in the location).",
        +  "enum": [
        +    "PRESENCE",
        +    "PRESENCE_OR_INTEREST"
        +  ]
        +}
      • addedInput schema / properties / language_ids
        Added 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
        +}
      • addedInput schema / properties / location_ids
        Added 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
        +}
      • addedInput schema / properties / targeting_source
        Added value: +{
        +  "description": "Where the targeting came from; shown in the approval summary. Defaults to user.",
        +  "enum": [
        +    "user",
        +    "template",
        +    "source_campaign"
        +  ]
        +}
    • Changedgoogle_ads_quick_create_prepare1 field changed
      • changedInput schema / properties / body / oneOf
        Previous 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"
        +  }
        +]
  8. 2 tool updates
    • Addedcreatives_cloud_status
    • Addedcreatives_list_cloud
  9. 153 tool updates
    • Changedapproval_plan_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedapproval_plan_deny1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedapproval_plan_get1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedapproval_plan_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_account_eligibility_snapshot1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_accounts_list1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_accounts_sync1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_ad_group_create_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_ad_group_create_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_ad_status_update_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_ad_status_update_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_ad_text_update_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_ad_text_update_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_analysis_families_list1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_asset_diagnostics1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_asset_group_link_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_asset_group_link_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_asset_group_unlink_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_asset_group_unlink_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_asset_group_update_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_asset_group_update_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_asset_inventory_list1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_asset_link_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_asset_link_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_asset_requirements_get1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_asset_unlink_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_asset_unlink_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_asset_upload_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_asset_upload_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_assets_list1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_audience_attributes1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_audience_dates1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_benchmark_dates1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_benchmark_locations1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_benchmark_metrics1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_benchmark_products1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_benchmark_sources1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_bidding_update_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_bidding_update_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_billing_get_setup1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_budget_update_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_budget_update_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_campaign_create_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_campaign_create_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_campaign_dates_update_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_campaign_dates_update_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_connection_permissions_set1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_connections_list1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_conversion_action_create_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_conversion_action_create_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_conversion_action_remove_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_conversion_action_remove_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_conversion_action_update_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_conversion_action_update_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_conversion_actions_list1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_copy_ad_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_copy_ad_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_creation_capabilities_get1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_creator_channels1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_customer_route_permissions_set1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_deep_analysis_export1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_deep_analysis_query1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_entity_remove_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_entity_remove_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_entity_update_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_entity_update_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_experiment_action_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_experiment_action_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_experiment_create_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_experiment_create_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_experiment_halt_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_experiment_halt_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_experiment_initiate_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_experiment_initiate_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_experiment_promote_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_experiment_promote_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_experiment_schedule_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_experiment_schedule_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_experiment_state1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_extension_asset_create_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_extension_asset_create_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_field_metadata1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_geo_targets_suggest1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_insights_overview_batch1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_insights_overview_query1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_insights_query_daily1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_keyword_create_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_keyword_create_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_keyword_forecast_metrics1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_keyword_historical_metrics1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_keyword_ideas_generate1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_keyword_themes1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_management_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_management_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_mutation_receipt_get1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_mutation_reconcile1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_negative_keyword_add_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_negative_keyword_add_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_negative_location_add_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_negative_location_add_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_pmax_create_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_pmax_create_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_portfolio_target_update_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_portfolio_target_update_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_product_card_delete1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_product_card_save1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_product_card_update1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_product_cards_list1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_query_preflight1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_quick_create_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_quick_create_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_reach_forecast1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_reach_locations1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_reach_products1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_recommendation_apply_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_recommendation_apply_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_recommendation_dismiss_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_recommendation_dismiss_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_recommendations_list1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_responsive_search_ad_create_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_responsive_search_ad_create_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_retail_tree_replace_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_retail_tree_replace_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_schedule_replace_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_schedule_replace_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_shared_budget_update_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_shared_budget_update_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_status_enable_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_status_enable_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_status_pause_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_status_pause_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_task_get1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_tasks_list1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_template_delete1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_template_reverse_engineer1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_template_save1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_template_update1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_templates_list1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_trending_topics1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_video_upload_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_video_upload_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_video_upload_remove_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_video_upload_remove_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_video_upload_status1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_video_uploads_list1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_workspace_get1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_youtube_asset_confirm1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedgoogle_ads_youtube_asset_prepare1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedinsights_query_consistent1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedsetup_get_status1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedsupport_get_report_status1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedsupport_report_error1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
    • Changedtasks_get_status1 field changed
      • addedInput schema / properties / connection_context
        Added value: +{
        +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
        +  "type": "string"
        +}
  10. 4 tool updates
    • Addedapproval_plan_confirm
    • Addedapproval_plan_deny
    • Addedapproval_plan_get
    • Addedapproval_plan_prepare
  11. 34 tool updates
    • Addedgoogle_ads_ad_status_update_confirm
    • Addedgoogle_ads_ad_status_update_prepare
    • Addedgoogle_ads_ad_text_update_confirm
    • Addedgoogle_ads_ad_text_update_prepare
    • Addedgoogle_ads_asset_group_link_confirm
    • Addedgoogle_ads_asset_group_link_prepare
    • Addedgoogle_ads_asset_group_unlink_confirm
    • Addedgoogle_ads_asset_group_unlink_prepare
    • Addedgoogle_ads_asset_group_update_confirm
    • Addedgoogle_ads_asset_group_update_prepare
    • Addedgoogle_ads_campaign_dates_update_confirm
    • Addedgoogle_ads_campaign_dates_update_prepare
    • Addedgoogle_ads_experiment_create_confirm
    • Addedgoogle_ads_experiment_create_prepare
    • Addedgoogle_ads_experiment_halt_confirm
    • Addedgoogle_ads_experiment_halt_prepare
    • Addedgoogle_ads_experiment_initiate_confirm
    • Addedgoogle_ads_experiment_initiate_prepare
    • Addedgoogle_ads_experiment_promote_confirm
    • Addedgoogle_ads_experiment_promote_prepare
    • Addedgoogle_ads_experiment_schedule_confirm
    • Addedgoogle_ads_experiment_schedule_prepare
    • Addedgoogle_ads_negative_keyword_add_confirm
    • Addedgoogle_ads_negative_keyword_add_prepare
    • Addedgoogle_ads_negative_location_add_confirm
    • Addedgoogle_ads_negative_location_add_prepare
    • Addedgoogle_ads_portfolio_target_update_confirm
    • Addedgoogle_ads_portfolio_target_update_prepare
    • Addedgoogle_ads_retail_tree_replace_confirm
    • Addedgoogle_ads_retail_tree_replace_prepare
    • Addedgoogle_ads_schedule_replace_confirm
    • Addedgoogle_ads_schedule_replace_prepare
    • Addedgoogle_ads_shared_budget_update_confirm
    • Addedgoogle_ads_shared_budget_update_prepare
  12. 2 tool updates
    • Addedsupport_get_report_status
    • Addedsupport_report_error
  13. 5 tool updates
    • Addedgoogle_ads_accounts_sync
    • Addedgoogle_ads_asset_inventory_list
    • Addedgoogle_ads_creation_capabilities_get
    • Changedgoogle_ads_quick_create_prepare1 field changed
      • changedInput schema / properties / body / oneOf
        Previous 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"
        +  }
        +]
    • Addedgoogle_ads_workspace_get
  14. 30 tool updates
    • Addedgoogle_ads_account_eligibility_snapshot
    • Addedgoogle_ads_asset_diagnostics
    • Addedgoogle_ads_audience_attributes
    • Addedgoogle_ads_audience_dates
    • Addedgoogle_ads_benchmark_dates
    • Addedgoogle_ads_benchmark_locations
    • Addedgoogle_ads_benchmark_metrics
    • Addedgoogle_ads_benchmark_products
    • Addedgoogle_ads_benchmark_sources
    • Changedgoogle_ads_campaign_create_prepare2 fields changed
      • addedInput schema / properties / contains_eu_political_advertising
        Added value: +{
        +  "enum": [
        +    "CONTAINS_EU_POLITICAL_ADVERTISING",
        +    "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING"
        +  ]
        +}
      • changedInput schema / required
        Previous value: -[
        -  "customer_id",
        -  "name",
        -  "channel_type",
        -  "budget_micros"
        -]New value: +[
        +  "customer_id",
        +  "name",
        +  "channel_type",
        +  "budget_micros",
        +  "contains_eu_political_advertising"
        +]
    • Addedgoogle_ads_creator_channels
    • Addedgoogle_ads_experiment_action_confirm
    • Addedgoogle_ads_experiment_action_prepare
    • Addedgoogle_ads_experiment_state
    • Addedgoogle_ads_extension_asset_create_confirm
    • Addedgoogle_ads_extension_asset_create_prepare
    • Addedgoogle_ads_field_metadata
    • Addedgoogle_ads_geo_targets_suggest
    • Addedgoogle_ads_keyword_forecast_metrics
    • Addedgoogle_ads_keyword_historical_metrics
    • Addedgoogle_ads_keyword_themes
    • Addedgoogle_ads_management_confirm
    • Addedgoogle_ads_management_prepare
    • Changedgoogle_ads_pmax_create_prepare3 fields changed
      • addedInput schema / properties / audience_signal
        Added value: +{
        +  "pattern": "^customers/[0-9]+/audiences/[1-9][0-9]*$",
        +  "type": "string"
        +}
      • addedInput schema / properties / retail
        Added 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"
        +}
      • addedInput schema / properties / search_themes
        Added value: +{
        +  "items": {
        +    "maxLength": 80,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 25,
        +  "type": "array",
        +  "uniqueItems": true
        +}
    • Addedgoogle_ads_query_preflight
    • Changedgoogle_ads_quick_create_prepare3 fields changed
      • removedInput schema / properties / body / additionalProperties
        Removed value: -true
      • addedInput schema / properties / body / oneOf
        Added 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"
        +  }
        +]
      • removedInput schema / properties / body / type
        Removed value: -"object"
    • Addedgoogle_ads_reach_forecast
    • Addedgoogle_ads_reach_locations
    • Addedgoogle_ads_reach_products
    • Addedgoogle_ads_trending_topics
  15. 82 tool updates
    • First observedgoogle_ads_accounts_list
    • First observedgoogle_ads_ad_group_create_confirm
    • First observedgoogle_ads_ad_group_create_prepare
    • First observedgoogle_ads_analysis_families_list
    • First observedgoogle_ads_asset_link_confirm
    • First observedgoogle_ads_asset_link_prepare
    • First observedgoogle_ads_asset_requirements_get
    • First observedgoogle_ads_asset_unlink_confirm
    • First observedgoogle_ads_asset_unlink_prepare
    • First observedgoogle_ads_asset_upload_confirm
    • First observedgoogle_ads_asset_upload_prepare
    • First observedgoogle_ads_assets_list
    • First observedgoogle_ads_bidding_update_confirm
    • First observedgoogle_ads_bidding_update_prepare
    • First observedgoogle_ads_billing_get_setup
    • First observedgoogle_ads_budget_update_confirm
    • First observedgoogle_ads_budget_update_prepare
    • First observedgoogle_ads_campaign_create_confirm
    • First observedgoogle_ads_campaign_create_prepare
    • First observedgoogle_ads_connection_permissions_set
    • First observedgoogle_ads_connections_list
    • First observedgoogle_ads_conversion_action_create_confirm
    • First observedgoogle_ads_conversion_action_create_prepare
    • First observedgoogle_ads_conversion_action_remove_confirm
    • First observedgoogle_ads_conversion_action_remove_prepare
    • First observedgoogle_ads_conversion_action_update_confirm
    • First observedgoogle_ads_conversion_action_update_prepare
    • First observedgoogle_ads_conversion_actions_list
    • First observedgoogle_ads_copy_ad_confirm
    • First observedgoogle_ads_copy_ad_prepare
    • First observedgoogle_ads_customer_route_permissions_set
    • First observedgoogle_ads_deep_analysis_export
    • First observedgoogle_ads_deep_analysis_query
    • First observedgoogle_ads_entity_remove_confirm
    • First observedgoogle_ads_entity_remove_prepare
    • First observedgoogle_ads_entity_update_confirm
    • First observedgoogle_ads_entity_update_prepare
    • First observedgoogle_ads_insights_overview_batch
    • First observedgoogle_ads_insights_overview_query
    • First observedgoogle_ads_insights_query_daily
    • First observedgoogle_ads_keyword_create_confirm
    • First observedgoogle_ads_keyword_create_prepare
    • First observedgoogle_ads_keyword_ideas_generate
    • First observedgoogle_ads_mutation_receipt_get
    • First observedgoogle_ads_mutation_reconcile
    • First observedgoogle_ads_pmax_create_confirm
    • First observedgoogle_ads_pmax_create_prepare
    • First observedgoogle_ads_product_card_delete
    • First observedgoogle_ads_product_card_save
    • First observedgoogle_ads_product_card_update
    • First observedgoogle_ads_product_cards_list
    • First observedgoogle_ads_quick_create_confirm
    • First observedgoogle_ads_quick_create_prepare
    • First observedgoogle_ads_recommendation_apply_confirm
    • First observedgoogle_ads_recommendation_apply_prepare
    • First observedgoogle_ads_recommendation_dismiss_confirm
    • First observedgoogle_ads_recommendation_dismiss_prepare
    • First observedgoogle_ads_recommendations_list
    • First observedgoogle_ads_responsive_search_ad_create_confirm
    • First observedgoogle_ads_responsive_search_ad_create_prepare
    • First observedgoogle_ads_status_enable_confirm
    • First observedgoogle_ads_status_enable_prepare
    • First observedgoogle_ads_status_pause_confirm
    • First observedgoogle_ads_status_pause_prepare
    • First observedgoogle_ads_task_get
    • First observedgoogle_ads_tasks_list
    • First observedgoogle_ads_template_delete
    • First observedgoogle_ads_template_reverse_engineer
    • First observedgoogle_ads_template_save
    • First observedgoogle_ads_template_update
    • First observedgoogle_ads_templates_list
    • First observedgoogle_ads_video_upload_confirm
    • First observedgoogle_ads_video_upload_prepare
    • First observedgoogle_ads_video_upload_remove_confirm
    • First observedgoogle_ads_video_upload_remove_prepare
    • First observedgoogle_ads_video_upload_status
    • First observedgoogle_ads_video_uploads_list
    • First observedgoogle_ads_youtube_asset_confirm
    • First observedgoogle_ads_youtube_asset_prepare
    • First observedinsights_query_consistent
    • First observedsetup_get_status
    • First observedtasks_get_status

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    MCP server to read and manage Google Ads accounts via GAQL queries, campaign/ad group/keyword operations, and safe write support with draft-confirm flow.
    16
    21 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    An 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.
    22
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    16
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables 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.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources