Skip to main content
Glama

AdsAgent — Google Ads MCP

approval_plan_confirm

Destructive

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.

Input Schema

NameRequiredDescriptionDefault
approval_refYes
expected_changesYes
connection_contextNo
expected_plan_digestYes

Output Schema

NameRequiredDescriptionDefault
okNo
codeNo
errorNo
itemsNo
needsNo
stateNo
reasonNo
changesNo
summaryNo
platformNo
receiptsNo
retry_atNo
retryableNo
error_codeNo
expires_atNo
approved_atNo
next_actionNo
plan_digestNo
support_refNo
approval_refNo
presentationNo
invalid_fieldsNo
rejected_pathsNo
expected_changesNo
origin_support_refNo
instruction_template_idNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "approval_ref": {
      +      "type": "string"
      +    },
      +    "approved_at": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "changes": {
      +      "items": {
      +        "additionalProperties": true,
      +        "properties": {},
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "code": {
      +      "type": "string"
      +    },
      +    "error": {
      +      "anyOf": [
      +        {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "additionalProperties": true,
      +              "properties": {
      +                "code": {
      +                  "type": "string"
      +                },
      +                "details": {
      +                  "additionalProperties": true,
      +                  "properties": {},
      +                  "type": "object"
      +                },
      +                "message": {
      +                  "type": "string"
      +                },
      +                "retryable": {
      +                  "type": "boolean"
      +                },
      +                "support_ref": {
      +                  "type": "string"
      +                }
      +              },
      +              "type": "object"
      +            }
      +          ]
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "error_code": {
      +      "type": "string"
      +    },
      +    "expected_changes": {
      +      "items": {
      +        "additionalProperties": true,
      +        "properties": {},
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "expires_at": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "instruction_template_id": {
      +      "type": "string"
      +    },
      +    "invalid_fields": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "items": {
      +      "items": {
      +        "additionalProperties": true,
      +        "properties": {
      +          "index": {
      +            "type": "integer"
      +          },
      +          "operation": {
      +            "type": "string"
      +          },
      +          "receipt": {
      +            "additionalProperties": true,
      +            "properties": {},
      +            "type": "object"
      +          },
      +          "state": {
      +            "type": "string"
      +          },
      +          "summary": {
      +            "additionalProperties": true,
      +            "properties": {},
      +            "type": "object"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "needs": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "next_action": {
      +      "anyOf": [
      +        {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "additionalProperties": true,
      +              "properties": {},
      +              "type": "object"
      +            }
      +          ]
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "ok": {
      +      "type": "boolean"
      +    },
      +    "origin_support_ref": {
      +      "type": "string"
      +    },
      +    "plan_digest": {
      +      "type": "string"
      +    },
      +    "platform": {
      +      "type": "string"
      +    },
      +    "presentation": {
      +      "type": "string"
      +    },
      +    "reason": {
      +      "type": "string"
      +    },
      +    "receipts": {
      +      "items": {
      +        "additionalProperties": true,
      +        "properties": {},
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "rejected_paths": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "retry_at": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "retryable": {
      +      "type": "boolean"
      +    },
      +    "state": {
      +      "type": "string"
      +    },
      +    "summary": {
      +      "additionalProperties": true,
      +      "properties": {},
      +      "type": "object"
      +    },
      +    "support_ref": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / connection_context
      Added value: +{
      +  "pattern": "^mctx_v1_[0-9a-f]{64}$",
      +  "type": "string"
      +}
  3. Added

TDQS

A4.1/5.0
Behavior5/5

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

Far beyond the destructive/openWorld annotations, it discloses the mutation surface (create, copy, edit, remove, delivery, budgets, bids), spend impact, sequential non-atomic provider execution, no replay of uncertain writes, per-item receipts, and the idempotent repeat/quota-deferral semantics including retry_at and approval expiry. That is exactly the risk context an agent needs before a destructive confirm.

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?

It is front-loaded on the right facts, but the quota-deferral rule is stated twice in near-identical wording ('resumes only proven-unsent quota-deferred items after retry_at' vs 'the same agreement covers proven-unsent rows after retry_at'), and the handles/receipt caveats accumulate into a dense block.

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?

An output schema exists, so return values need no explanation, and the annotations cover the safety profile while the text covers execution semantics, idempotency and failure handling. Remaining gaps are connection_context and the nested expected_changes fields, which are left entirely to an undescribed schema.

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?

With 0% schema description coverage, the description carries the load and does explain approval_ref, the digest as a mismatch guard the server enforces, and expected_changes as the exact items the user agreed to. It says nothing about connection_context or about the per-item index/operation/summary structure, leaving part of the surface 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?

The description opens with a specific verb and resource ('Confirm a stored mixed advertising plan') plus the two handles that identify it, and it references the prepare step that produced the inputs, so an agent can place it in the prepare→confirm flow. It never explicitly names approval_plan_prepare/deny as the alternatives, so sibling differentiation is implied rather than stated.

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

Usage Guidelines4/5

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

It states the precondition chain clearly: exact expected_changes from prepare, the user's agreement to every displayed item, and 'changed or expired plans require review.' It also gives explicit when-not guidance ('Stop on failure or uncertainty'), though it never mentions approval_plan_deny as the path for refusing a plan.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources