Skip to main content
Glama

AdsAgent — Google Ads MCP

google_ads_accounts_pull

Destructive

Pull structure, daily and entity metrics and the creative inventory for the named already-registered accounts only (no account discovery), under the same daily quota and time budget as any sync. Accounts outside this tenant return customer_not_owned. Requires mcp.assets.refresh and allow_pull; no Google mutation. Then read google_ads_insights_query_daily or the overview. An account with no rows in a window after a completed pull reads as empty, not needs_sync.

Input Schema

NameRequiredDescriptionDefault
customer_idsYes
connection_contextNo

Output Schema

NameRequiredDescriptionDefault
okNo
codeNo
errorNo
needsNo
errorsNo
reasonNo
ad_countNo
next_toolNo
retryableNo
error_codeNo
sync_stateNo
asset_countNo
error_countNo
next_actionNo
support_refNo
customer_idsNo
ad_group_countNo
campaign_countNo
connection_refNo
customer_countNo
invalid_fieldsNo
rejected_pathsNo
deferred_reasonNo
synced_componentsNo
origin_support_refNo
entity_metric_countNo
metric_days_writtenNo
enabled_non_manager_countNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "ad_count": {
      +      "type": "integer"
      +    },
      +    "ad_group_count": {
      +      "type": "integer"
      +    },
      +    "asset_count": {
      +      "type": "integer"
      +    },
      +    "campaign_count": {
      +      "type": "integer"
      +    },
      +    "code": {
      +      "type": "string"
      +    },
      +    "connection_ref": {
      +      "type": "string"
      +    },
      +    "customer_count": {
      +      "type": "integer"
      +    },
      +    "customer_ids": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "deferred_reason": {
      +      "type": "string"
      +    },
      +    "enabled_non_manager_count": {
      +      "type": "integer"
      +    },
      +    "entity_metric_count": {
      +      "type": "integer"
      +    },
      +    "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"
      +    },
      +    "error_count": {
      +      "type": "integer"
      +    },
      +    "errors": {
      +      "items": {
      +        "additionalProperties": true,
      +        "properties": {},
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "invalid_fields": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "metric_days_written": {
      +      "type": "integer"
      +    },
      +    "needs": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "next_action": {
      +      "anyOf": [
      +        {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "additionalProperties": true,
      +              "properties": {},
      +              "type": "object"
      +            }
      +          ]
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "next_tool": {
      +      "type": "string"
      +    },
      +    "ok": {
      +      "type": "boolean"
      +    },
      +    "origin_support_ref": {
      +      "type": "string"
      +    },
      +    "reason": {
      +      "type": "string"
      +    },
      +    "rejected_paths": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "retryable": {
      +      "type": "boolean"
      +    },
      +    "support_ref": {
      +      "type": "string"
      +    },
      +    "sync_state": {
      +      "type": "string"
      +    },
      +    "synced_components": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Added

TDQS

B3.2/5.0
Behavior3/5

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

The description adds meaningful context beyond annotations: quota/time budget, permission requirements, customer_not_owned behavior, and how empty results should be interpreted. But annotations declare destructiveHint=true, and the description does not explain what local data may be replaced or destroyed; 'no Google mutation' only covers Google-side effects.

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

Conciseness4/5

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

The description is a compact single paragraph with the core scope and requirements front-loaded. It is dense but mostly purposeful, though it could be split for readability.

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?

It covers many operational details and correctly points to follow-up read tools; the output schema means return values do not need explanation. Still, it omits parameter semantics for connection_context and does not clarify the destructive local behavior implied by destructiveHint=true.

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 compensate for parameter meaning, but it only partially explains account scoping. It never explains the connection_context parameter or the customer_ids format, array limits, or pattern constraints.

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 uses a specific verb, 'Pull', and names the resources fetched: structure, daily/entity metrics, and creative inventory. It also scopes the operation to already-registered accounts only. It does not explicitly contrast itself with nearby siblings such as google_ads_accounts_sync or google_ads_accounts_list.

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 useful conditions: already-registered accounts only, no account discovery, tenant-bound accounts, and follow-up reads via google_ads_insights_query_daily or the overview. However, it does not clearly say when to choose this over google_ads_accounts_sync, google_ads_accounts_list, or eligibility snapshot tools.

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