Model Context Protocol · Google Ads API v24+
An MCP server that connects Claude to your Google Ads accounts — reads, reporting, keyword research and Search-campaign creation, with an embedded OAuth login. Status: LIVE.
MCP Google Ads is a Model Context Protocol server that gives Claude real access to your accounts — not a chatbot that guesses, but typed calls against the Google Ads REST API (v24+).
List campaigns, pull spend and conversion reports, research keywords and build Search campaigns — all by chatting with Claude. The Google login is OAuth2, embedded in the flow.
Domain, application and infrastructure kept apart; a pure async httpx client, no gRPC. The same core runs local over stdio (single-tenant) or multi-tenant on Vercel.
Multi-tenant deploy at gamcp.vercel.app — tokens in Supabase, cache in Upstash, and we are the OAuth Authorization Server. Local mode keeps the refresh token in a 0600 file.
37 tools grouped by function — from auth to GAQL reporting, from keyword research to the Search funnel that's born paused. Everything below is already implemented and live.
confirm).confirm).confirm).confirm).confirm).There's also an MCP prompt analyze_account_performance for guided reporting.
Writing to Google Ads touches real money. So every write goes through explicit guardrails — you're always in control of what becomes spend.
Creations born PAUSED
Nothing spends until you explicitly activate it. Every campaign, ad group and ad is created paused.
Status needs confirm=true
Changing status is destructive. Without confirm, the tool returns a preview and makes no HTTP call.
preview=true = dry-run
Runs a server-side validateOnly: validates the operation without persisting anything. Check before running for real.
No auto-rollback
The funnel is non-atomic: on a mid-way failure it returns the resources already created (PAUSED) and where it stopped — it deletes nothing.
Money in units
Budgets are given in currency units (20.0 = $20/day) and converted to micros in the use case. No cents confusion.
Scope whitelist
The credential only accesses what you authorized in the OAuth consent — and google_token_status shows exactly which scopes are active.
Two paths: hosted (recommended, zero setup) and local stdio (for single-tenant devs). Both end in the same place — Claude operating your account.
Add the MCP server as a connector in Claude and log in. Nothing to install; we handle the developer token and the OAuth tokens.
# Claude Code claude mcp add --transport http \ google-ads https://gamcp.vercel.app
google_login tool — it opens browser consent and stores your refresh token securely.google_token_status to validate the credential and list_accessible_customers to see your accounts. Ready to operate.Run the server on your machine. The refresh token lives in a local 0600 file; you use your own MCC developer token.
python -m venv venv
venv/bin/pip install -e ".[dev]"
cp .env.example .env.local.env.local: GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_ADS_DEVELOPER_TOKEN and NGROK_URL (public tunnel for the OAuth callback).PYTHONPATH=src venv/bin/python \
-m mcp_google_ads
# then, in Claude: google_loginStill have a question? Write to bruno@b2tech.io.
confirm=true; without confirm, the tool returns a preview and makes no HTTP call.gamcp.vercel.app) the platform token is already configured; you just OAuth-log in your account.0600 file on your machine (single-tenant).list_accessible_customers lists them all, and the manager/login-customer is auto-resolved per credential at google_login.validateOnly): it validates the operation without persisting anything. Handy to check a write before running it for real.gamcp.vercel.app) is the fast path: zero setup, just add it as a connector in Claude and log in. Local stdio is single-tenant, for devs who want everything on their own machine with the refresh token in a 0600 file.Reads, reporting, keyword research and Search campaigns — with embedded OAuth and writes that are born paused. Free and live.
37 tools · embedded OAuth2 · multi-tenant on Vercel