Skip to main content

Google Ads MCP

Read-only MCP server for the Google Ads API. Eleven tools cover discovery, GAQL reporting, resource schema, recommendations, keyword planning and forecasts, and change history for any account reachable under a manager account (MCC). We run this server in production for every ads client. Read-only is enforced at three layers: no mutate or apply service imports, an SDK method allowlist, and a GAQL-starts-with-SELECT guard.

Install

Claude Code:

claude mcp add google-ads \
  -e GOOGLE_ADS_DEVELOPER_TOKEN=your-token \
  -e GOOGLE_ADS_CLIENT_ID=your-client-id \
  -e GOOGLE_ADS_CLIENT_SECRET=your-client-secret \
  -e GOOGLE_ADS_REFRESH_TOKEN=your-refresh-token \
  -e GOOGLE_ADS_LOGIN_CUSTOMER_ID=1234567890 \
  -- uvx scalably-google-ads-mcp

Codex:

codex mcp add google-ads \
  --env GOOGLE_ADS_DEVELOPER_TOKEN=your-token \
  --env GOOGLE_ADS_CLIENT_ID=your-client-id \
  --env GOOGLE_ADS_CLIENT_SECRET=your-client-secret \
  --env GOOGLE_ADS_REFRESH_TOKEN=your-refresh-token \
  --env GOOGLE_ADS_LOGIN_CUSTOMER_ID=1234567890 \
  -- uvx scalably-google-ads-mcp

Claude Desktop: download google-ads-mcp.mcpb from the latest GitHub release and open it.

Setup

This is the heaviest setup in the gallery: expect up to two days waiting on developer token approval. One set of credentials, rooted at a manager account (MCC), can read any customer account linked under it, so there is no per-client configuration beyond linking an account to the MCC.

  1. Google Ads developer token. Sign in at ads.google.com under your manager account, go to Tools and Settings, API Center, and apply for a developer token. A new token starts on the Explorer access level, which Google grants after a review that can take a few days; discovery, query and recommendation tools work there. Basic access (a separate application) is needed for higher quotas and may be needed for the keyword-planning tools.
  2. Google Cloud OAuth client. In a Google Cloud project, enable the Google Ads API, then create an OAuth client ID of type Desktop app under APIs and Services, Credentials. Note the client ID and client secret, and add the https://www.googleapis.com/auth/adwords scope to the OAuth consent screen.
  3. Refresh token. Generate a refresh token once, as an admin user of the manager account, using Google's oauth2l tool or the generate_user_credentials.py example shipped with the google-ads Python library. Save the refresh token; it does not expire from normal use.
  4. Login customer ID. Use the 10-digit customer ID of the manager account itself (no hyphens) as GOOGLE_ADS_LOGIN_CUSTOMER_ID. Any client account accepts an invite to link under this manager account in its own Google Ads UI, after which google_ads_list_customer_clients sees it.

Tools (11)

Tool What it does
google_ads_list_accessible_customers List every customer_id the OAuth user has direct access to
google_ads_list_customer_clients Walk the MCC hierarchy and return every child account
google_ads_query Run a GAQL query against a specific customer account
google_ads_describe_resource Schema (fields, metrics, segments) for a GAQL resource
google_ads_list_resources Return the full catalog of GAQL resources
google_ads_recommendations Read Google's optimization recommendations for a customer account
google_ads_keyword_ideas Generate keyword ideas with search volume, competition and CPC estimates
google_ads_keyword_historical_metrics Historical monthly search-volume and competition metrics for specific keywords
google_ads_keyword_forecast_metrics Forecast KPIs for a proposed keyword plan
google_ads_change_events Audit trail of who changed what, last 30 days
google_ads_change_status Lightweight last-modified change tracker per resource

Configuration

Variable Required Purpose
GOOGLE_ADS_DEVELOPER_TOKEN yes Google Ads API developer token from the Ads API Center
GOOGLE_ADS_CLIENT_ID yes OAuth2 client_id for a Desktop-app credential
GOOGLE_ADS_CLIENT_SECRET yes OAuth2 client_secret paired with the client_id
GOOGLE_ADS_REFRESH_TOKEN yes Long-lived OAuth2 refresh_token for the adwords scope
GOOGLE_ADS_LOGIN_CUSTOMER_ID yes 10-digit customer ID of the manager account (MCC), no hyphens
GOOGLE_ADS_API_VERSION no Google Ads API version to target, default v25
GOOGLE_ADS_USE_PROTO_PLUS no Use proto-plus message types, default true
GOOGLE_ADS_LOG_LEVEL no Python log level, default WARNING

Reply shape

Every tool returns JSON with status (succeeded, partial, no_op), operation, summary, target, result, proof, warnings, recovery. Failures surface as a tool error whose text is google_ads_request_failed: <message> <hint>. proof.apiVersion names the Google Ads API version used. proof.microsConverted is set on google_ads_query. A partial status means the result hit its configured bound (max_rows, page_size or limit); recovery.nextAction says how to continue.

Limits

google_ads_query responses are capped at 64 MB per call by the Google Ads API; split large date ranges across calls. KeywordPlanIdeaService (keyword ideas, historical metrics, forecasts) is rate-limited to 1 query per second and may require Basic Access if you get a permission error on the Explorer tier. google_ads_change_events covers up to 30 days back; google_ads_change_status covers up to 14 days back. metrics.cost_micros and other *_micros fields are 1 unit = $0.000001; google_ads_query emits a matching *_units field alongside when convert_micros is true (the default).

Verify

Each release lists the package version, the .mcpb sha256 and the production commit it was derived from in CHANGELOG.md. CI runs the tests and a clean install of the built wheel on every push.

Privacy Policy

This server runs locally, on your machine, under your own credentials. It collects no personal data, contains no telemetry, stores nothing persistently, and talks only to the vendor API it wraps. No third party, including Scalably, receives your data. Contact: hello@scalably.io. Canonical copy: https://scalably.io/connector-privacy.html

License

MIT. Copyright Scalably.

Metadata

Release files for scalably-google-ads-mcp 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for scalably-google-ads-mcp 1.0.1
File Size Uploaded Provenance
scalably_google_ads_mcp-1.0.1.tar.gz 23.4 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for scalably-google-ads-mcp 1.0.1
File Interpreter ABI Platform
scalably_google_ads_mcp-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 40.1 kB

Release files / scalably_google_ads_mcp-1.0.1.tar.gz

Download URL scalably_google_ads_mcp-1.0.1.tar.gz
Size 23.4 kB
Tags Source
SHA-256 checksum
How to use checksums
a66492567367e9f5455db3ce14dbd7955e8ed79dc5584b40c571035158e92b1d
BLAKE2b-256 checksum
How to use checksums
9787492d565383273cb365180a034e8e5708c9642eabae1d409f91c87bdc56ca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.

Transparency log

Release files / scalably_google_ads_mcp-1.0.1-py3-none-any.whl

Download URL scalably_google_ads_mcp-1.0.1-py3-none-any.whl
Size 16.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
517380f2705dc9554287cbe9326e6c4e76f558ec89669271e5055136d7f65251
BLAKE2b-256 checksum
How to use checksums
801ba83e9f537a8324464e38160c42f5e31528bda97ab3f19f3e078f76025141
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.

Transparency log

Security for scalably-google-ads-mcp 1.0.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for scalably_google_ads_mcp-1.0.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page