GOOGLE OAUTH

Google Ads MCP server, with a policy gate.

Gentkey connects Google Ads to Claude, Claude Code, Cursor, and any MCP client over one OAuth-protected URL — with the deepest constraint model of any connector: dollar-capped budget grants enforced by arithmetic, not prompts.

Your agents connect tohttps://app.gentkey.com/mcpclaude.ai (web & mobile) · Claude Code · Cursor · any MCP client
ACCESS MODEL

What’s free, what needs a grant.

Reads: Account discovery, campaign performance reporting, and custom GAQL queries work with no grant.

Writes: Budget changes go through a curated tool gated by google-ads.write.budget, capped per call (max $ change per call) and per day (max total $ moved). Raw mutates are typed per resource from the operation itself — the field Google dispatches on — and every budget movement, daily or lifetime, is priced against your caps.

GrantWhat it governs
google-ads.readAccount discovery, campaign reporting, GAQL queries — on by default
google-ads.write.budgetCampaign daily budgets through the curated tool — max $ change per call, plus hourly and daily total caps
google-ads.campaignBudgets.mutateBudget operations in raw mutates — priced against your dollar caps
google-ads.campaigns.mutateCampaign create/update/pause operations
google-ads.adGroups.mutateAd group operations
google-ads.adGroupAds.mutateAd create/update/pause operations
google-ads.adGroupCriteria.mutateKeyword and audience criteria at the ad-group level
google-ads.campaignCriteria.mutateTargeting criteria at the campaign level
google-ads.writeEverything the typed grants don't cover — mixed-family or unclassifiable calls fail closed to this
CONSTRAINTS

Bounds the gate enforces with arithmetic.

GRANTEDgoogle-ads.write.budget · max $ change/call = 50

An agent raising a campaign budget by $30 is allowed; the same agent raising it by $500 is denied by policy — nothing changes upstream, and both decisions land in the audit log. Hourly and daily total caps bound repeated changes.

COMPARISON

Official Google Ads MCP server vs. Gentkey

Official serverGentkey
WritesNone — read-only reporting (as of mid-2026)Typed mutate grants with dollar-capped budget changes
HostingSelf-hosted (runs on your machine)Hosted — one OAuth URL, works from claude.ai web and mobile
Spend safetyN/A (no writes)max $ change per call plus hourly/daily totals, enforced by arithmetic; every denial logged
Audit trailNoneEvery call, allowed or denied, attributed per agent
SETUP

Connect once, use everywhere.

Sign in at gentkey.com, add Google Ads (google oauth), then point each client at your endpoint. Every client completes a standard OAuth flow and lands in your Gentkey — your connections, nobody else’s.

claude.ai (web & mobile)

  1. Settings → Connectors
  2. Add custom connector
  3. Paste https://app.gentkey.com/mcp and finish the OAuth prompt

Claude Code

claude mcp add --transport http \
  gentkey https://app.gentkey.com/mcp

Cursor

// .cursor/mcp.json
{
  "mcpServers": {
    "gentkey": { "url": "https://app.gentkey.com/mcp" }
  }
}
IN PRACTICE

Things agents do with Google Ads here.

  • How did my campaigns perform last week compared to the week before?
  • Which keywords spent the most with zero conversions this month?
  • Raise the Summer Sale campaign budget by $30.
  • Pause every ad group with CTR under 0.5% in the Brand campaign.
  • Write a GAQL query for search terms that triggered my ads yesterday.
SECURITY

Custody, gating, and audit — built in.

aes-256-gcm

The model never sees a credential

Your Google Ads token is encrypted at rest and injected server-side at call time. Your stored credential never enters a context window.

grants

Writes need a grant

Anything that changes state needs a capability you granted explicitly — revoke it and the next call is denied.

audit_log

A trail you can act on

Every decision is attributed to the agent that made it — allowed, denied, or denied by constraint.

FAQ

Fair questions.

How are dollar caps enforced on budget changes?

The policy gate prices every budget movement — daily and lifetime budgets both — before it reaches Google, and sums deltas across batched operations. Each change is checked against your max $ change per call and your hourly and daily moved-total caps; anything over is denied upstream of Google Ads, and the denial is logged.

Is this Google's official Google Ads MCP server?

No. Gentkey is a native connector built on the Google Ads API over your own OAuth. Google's official MCP server is read-only reporting as of mid-2026; Gentkey adds governed writes with typed, dollar-capped grants.

What happens when an agent calls a Google Ads write tool it hasn't been granted?

The call is denied at the gateway — nothing reaches Google Ads — and the denial is recorded in the audit log along with the grant that would have authorized it, so you can decide deliberately instead of finding out later.

Where are my credentials stored?

Encrypted at rest (AES-256-GCM) on Gentkey's server and injected server-side at call time. No credential you store with Gentkey ever enters a model's context window or an agent's config file.

Can I use this from claude.ai's free plan?

Yes — and it's the strongest case for a gateway: free claude.ai accounts currently get a single custom connector, so pointing that one slot at Gentkey puts every connector you've linked behind it.

How do I revoke an agent's access?

Revoke the grant (the next write is denied) or revoke the agent's tokens entirely in one click. Other agents and their grants are untouched — no shared key to rotate.

Is Gentkey affiliated with Google Ads?

No. Gentkey is an independent MCP gateway. Trademarks belong to their owners; where an official Google Ads MCP server exists, Gentkey proxies it and adds custody, gating, and audit on top.

Cut Google Ads a smaller key.

Sign in, connect Google Ads, and grant your first scoped capability in under a minute.