# Google Ads (npm · @zleventer/google-ads-mcp)

MCP server for Google Ads — 22 tools for spend diagnosis, impression share, and asset performance.

- Trust score: 60/100 (medium)
- Change this week: +45
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-07

## Components

- npm · `@zleventer/google-ads-mcp`: 60/100 (this document), [markdown](https://verifymcp.io/servers/zleventer-google-ads-mcp/zleventer-google-ads-mcp.md), [page](https://verifymcp.io/servers/zleventer-google-ads-mcp/zleventer-google-ads-mcp)

## Channel facts

- Registry: `npm`
- Package: `@zleventer/google-ads-mcp`
- Version: `1.0.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-07.

- **Supply Chain Security**: 89/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known high-severity CVE affects uuid 9.0.1, reached via google-ads-api > google-auth-library > gaxios > uuid. A fixed version is available.
  - No install/post-install scripts declared.
  - 68 of 219 dependencies flagged as unhealthy (3 deprecated).
- **Provenance & Transparency**: 19/100
  - Repository check failed: the declared repository URL redirects; it must resolve directly.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 102 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 77/100
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 2011 tokens (~91/item across 22 items; 22 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 89/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 68% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add zleventer-google-ads-mcp -- npx -y @zleventer/google-ads-mcp
```

### Codex

```bash
codex mcp add zleventer-google-ads-mcp -- npx -y @zleventer/google-ads-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "zleventer-google-ads-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@zleventer/google-ads-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add zleventer-google-ads-mcp --command npx --arg -y --arg @zleventer/google-ads-mcp
```

### Hermes

```yaml
mcp_servers:
  zleventer-google-ads-mcp:
    command: "npx"
    args: ["-y", "@zleventer/google-ads-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "zleventer-google-ads-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@zleventer/google-ads-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-07 (score 60, +3)

- [functional] Dependency health: partial → 0.85

### 2026-08-06 (score 57, +29)

- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Schema quality: pass
- [functional] First check of Tool coverage: 68
- [functional] First check of Schema quality: excellent
- [functional] First check of Schema quality: fail

### 2026-08-05 (score 28, 0)

- [security improvement] CVE-2026-69207 no longer affects this package

### 2026-08-04 (score 28, 0)

- [security regression] CVE-2026-69207 affects this package: high

### 2026-08-03 (score 28, +13)

- [security regression] CVE-2026-41907 affects this package: high
- [security regression] Provenance: unverified → fail
- [security regression] Known CVEs: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional] Licence: MIT

### 2026-08-02 (score 15, 0)

- [security] Stability: Stability not yet verified: our sandbox run of this package did not complete, so we have no schema to compare.
- [functional regression] Security disclosure: unverified → fail
- [functional] Tool coverage: Tool coverage not yet verified: our sandbox run of this package did not complete, so we have no tool definitions to assess.
- [functional] Capabilities: Protocol version not yet verified: our sandbox run of this package did not complete, so we never saw its MCP handshake.
- [functional] Schema quality: Schema quality not yet verified: our sandbox run of this package did not complete, so we have no schema to assess.

### 2026-08-01 (score 15, 0)

- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Security disclosure: fail → unverified
- [functional] Capabilities: Protocol version not yet verified: we do not have a sandbox capture of the MCP handshake this version of the package performs yet.
- [functional] Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional] Tool coverage: Tool coverage not yet verified: we do not have a sandbox capture of the tool definitions this version of the package serves yet.

### 2026-07-31 (score 15, +15)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

## MCP tools (22)

### `gads_run_gaql` (~129 tokens)

Escape hatch: run any raw GAQL query against Google Ads. Use when preset tools don't cover the report shape you need. Docs: developers.google.com/google-ads/api/docs/query/overview

Input parameters:

- `customer_id` (string): Override GOOGLE_ADS_CUSTOMER_ID for this call (no dashes)
- `query` (string, required): Raw GAQL query. Example: SELECT campaign.id, campaign.name, metrics.impressions, metrics.clicks, metrics.cost_micros FROM campaign WHERE segments.date DURING LAST_30_DAYS ORDER BY metrics.cost_micros…

### `gads_list_accounts` (~29 tokens)

List all Google Ads customer accounts the authenticated user has access to. Useful for finding customer IDs.

### `gads_account_info` (~53 tokens)

Get basic info for the current Google Ads account: name, currency, timezone, manager flag, status.

Input parameters:

- `customer_id` (string): Override GOOGLE_ADS_CUSTOMER_ID for this call (no dashes)

### `gads_list_campaigns` (~65 tokens)

List campaigns in the account with name, status, channel type, bidding strategy, and date range. Filter by status (default ENABLED).

Input parameters:

- `customer_id` (string)
- `limit` (integer)
- `status` (string): Filter by campaign status

### `gads_campaign_performance` (~159 tokens)

Campaign-level performance: impressions, clicks, CTR, avg CPC, cost, conversions, conv value, CPA, ROAS. Defaults to last 28 days, enabled campaigns, sorted by cost desc.

Input parameters:

- `customer_id` (string): Override GOOGLE_ADS_CUSTOMER_ID for this call
- `end_date` (string): End date: YYYY-MM-DD, NdaysAgo, yesterday, or today
- `limit` (integer): Max rows to return
- `order_by` (string): Metric to sort by desc: cost_micros, clicks, impressions, conversions, ctr
- `start_date` (string): Start date: YYYY-MM-DD, NdaysAgo, yesterday, or today
- `status` (string)

### `gads_ad_group_performance` (~130 tokens)

Ad group performance with campaign context. Optional campaign_id filter. Default last 28 days, enabled ad groups.

Input parameters:

- `campaign_id` (string): Filter to a specific campaign ID
- `customer_id` (string): Override GOOGLE_ADS_CUSTOMER_ID for this call
- `end_date` (string): End date: YYYY-MM-DD, NdaysAgo, yesterday, or today
- `limit` (integer): Max rows to return
- `start_date` (string): Start date: YYYY-MM-DD, NdaysAgo, yesterday, or today
- `status` (string)

### `gads_keyword_performance` (~113 tokens)

Keyword-level performance with match type, quality score, clicks, cost, conversions. Filter by campaign_id or ad_group_id. Default last 28 days, enabled keywords.

Input parameters:

- `ad_group_id` (string): Filter to a specific ad group ID
- `campaign_id` (string): Filter to a specific campaign ID
- `customer_id` (string)
- `end_date` (string)
- `limit` (integer)
- `start_date` (string)
- `status` (string)

### `gads_search_terms_report` (~99 tokens)

Search terms that triggered ads (the actual user queries, not your keywords). Essential for finding wasted spend and negative keyword candidates. Default last 28 days.

Input parameters:

- `campaign_id` (string): Filter to a specific campaign ID
- `customer_id` (string)
- `end_date` (string)
- `limit` (integer)
- `min_impressions` (integer): Minimum impressions threshold
- `start_date` (string)

### `gads_conversions_by_campaign` (~67 tokens)

Conversions and conversion value broken down by campaign × conversion action. Sorted by conversions desc. Default last 28 days.

Input parameters:

- `customer_id` (string)
- `end_date` (string)
- `limit` (integer)
- `start_date` (string)

### `gads_list_conversion_actions` (~51 tokens)

List all conversion actions configured in the account: name, category, type, whether included in Conversions metric, counting type.

Input parameters:

- `customer_id` (string)
- `status` (string)

### `gads_list_rsas` (~91 tokens)

List Responsive Search Ads with all headlines, descriptions, Ad Strength rating, and approval status. Filter by campaign or ad group.

Input parameters:

- `ad_group_id` (string): Filter to a specific ad group ID
- `campaign_id` (string): Filter to a specific campaign ID
- `customer_id` (string): Override GOOGLE_ADS_CUSTOMER_ID for this call
- `limit` (integer)

### `gads_rsa_asset_performance` (~113 tokens)

Asset-level performance labels (BEST / GOOD / LOW / PENDING / LEARNING) for RSA headlines and descriptions. Identifies which assets to keep, test, or replace.

Input parameters:

- `ad_group_id` (string): Filter to a specific ad group ID
- `customer_id` (string): Override GOOGLE_ADS_CUSTOMER_ID for this call
- `date_range` (string): GAQL date range literal, e.g. LAST_30_DAYS, LAST_7_DAYS, LAST_MONTH

### `gads_list_assets` (~95 tokens)

List account-level assets: sitelinks, callouts, structured snippets, images, call extensions, and more. Filter by asset type.

Input parameters:

- `asset_type` (string): Filter by asset type: SITELINK, CALLOUT, STRUCTURED_SNIPPET, IMAGE, CALL, etc.
- `customer_id` (string): Override GOOGLE_ADS_CUSTOMER_ID for this call
- `limit` (integer)

### `gads_campaign_assets` (~61 tokens)

Assets linked to campaigns with field type and status. Shows which extensions are active on which campaigns.

Input parameters:

- `campaign_id` (string): Filter to a specific campaign ID
- `customer_id` (string): Override GOOGLE_ADS_CUSTOMER_ID for this call

### `gads_list_audiences` (~61 tokens)

List user lists (remarketing audiences, customer match lists) in the account with size, eligibility, and match rate.

Input parameters:

- `customer_id` (string): Override GOOGLE_ADS_CUSTOMER_ID for this call
- `limit` (integer)

### `gads_campaign_audience_targeting` (~70 tokens)

Audiences attached to campaigns with targeting setting (observation vs targeting) and bid modifier. Shows both inclusion and exclusion lists.

Input parameters:

- `campaign_id` (string): Filter to a specific campaign ID
- `customer_id` (string): Override GOOGLE_ADS_CUSTOMER_ID for this call

### `gads_geo_performance` (~121 tokens)

Performance broken down by geographic location (country, region, city). Surfaces top and bottom geo segments by cost and conversions.

Input parameters:

- `campaign_id` (string): Filter to a specific campaign ID
- `customer_id` (string): Override GOOGLE_ADS_CUSTOMER_ID for this call
- `end_date` (string): End date: YYYY-MM-DD, NdaysAgo, yesterday, or today
- `limit` (integer)
- `start_date` (string): Start date: YYYY-MM-DD, NdaysAgo, yesterday, or today

### `gads_device_performance` (~118 tokens)

Clicks, cost, CTR, conversions, and CPA split by MOBILE / DESKTOP / TABLET per campaign. Default last 28 days.

Input parameters:

- `campaign_id` (string): Filter to a specific campaign ID
- `customer_id` (string): Override GOOGLE_ADS_CUSTOMER_ID for this call
- `end_date` (string): End date: YYYY-MM-DD, NdaysAgo, yesterday, or today
- `start_date` (string): Start date: YYYY-MM-DD, NdaysAgo, yesterday, or today

### `gads_impression_share` (~106 tokens)

Search Impression Share, Lost IS (Budget), and Lost IS (Rank) per campaign. Identifies whether budget or Quality Score/bid is limiting reach.

Input parameters:

- `customer_id` (string): Override GOOGLE_ADS_CUSTOMER_ID for this call
- `end_date` (string): End date: YYYY-MM-DD, NdaysAgo, yesterday, or today
- `start_date` (string): Start date: YYYY-MM-DD, NdaysAgo, yesterday, or today

### `gads_auction_insights` (~119 tokens)

Auction Insights report: impression share, overlap rate, outranking share, top-of-page %, and absolute top % vs competitors. Optional campaign filter.

Input parameters:

- `campaign_id` (string): Filter to a specific campaign ID
- `customer_id` (string): Override GOOGLE_ADS_CUSTOMER_ID for this call
- `end_date` (string): End date: YYYY-MM-DD, NdaysAgo, yesterday, or today
- `start_date` (string): Start date: YYYY-MM-DD, NdaysAgo, yesterday, or today

### `gads_list_budgets` (~58 tokens)

All campaign budgets with daily/total amount, delivery method (STANDARD/ACCELERATED), period, and whether a recommended budget exists.

Input parameters:

- `customer_id` (string): Override GOOGLE_ADS_CUSTOMER_ID for this call

### `gads_budget_pacing` (~103 tokens)

Cost vs budget per campaign for the specified period with utilization percentage. Flags over- and under-pacing campaigns. Default last 28 days.

Input parameters:

- `customer_id` (string): Override GOOGLE_ADS_CUSTOMER_ID for this call
- `end_date` (string): End date: YYYY-MM-DD, NdaysAgo, yesterday, or today
- `start_date` (string): Start date: YYYY-MM-DD, NdaysAgo, yesterday, or today

## Diagnostics

Captured diagnostic sections: Provenance, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/zleventer-google-ads-mcp/zleventer-google-ads-mcp#diagnostics

## Score history

- 2026-08-07: 60
- 2026-08-06: 57
- 2026-08-05: 28
- 2026-08-04: 28
- 2026-08-03: 28
- 2026-08-02: 15
- 2026-08-01: 15
- 2026-07-31: 15
- 2026-07-30: 0
- 2026-07-28: 18
- 2026-07-27: 18

## Links

- npm package: https://www.npmjs.com/package/@zleventer/google-ads-mcp
- Socket report: https://socket.dev/npm/package/@zleventer/google-ads-mcp
- Changelog RSS feed: https://verifymcp.io/servers/zleventer-google-ads-mcp/zleventer-google-ads-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/zleventer-google-ads-mcp/zleventer-google-ads-mcp.json
- HTML version of this page: https://verifymcp.io/servers/zleventer-google-ads-mcp/zleventer-google-ads-mcp
