How to Connect MCP Server to Google Ads for AI PPC Management
Step-by-step guide to connecting Google's MCP server to Google Ads so Claude, ChatGPT, and Gemini can query, report on, and optimize live campaigns safely.

Most paid-media teams treated the first wave of "AI in Google Ads" as a novelty: a chatbot summarizing what a pivot table already showed. The Model Context Protocol changes the shape of that conversation. With Google's official MCP server for the Google Ads API, an LLM can query a live account, run a GAQL statement against yesterday's spend, and hand back structured results the model can reason over. It is not a wrapper. It is a wire.
The catch is that the initial release is scoped narrowly on purpose, and the setup rewards operators who already know how OAuth, developer tokens, and manager accounts fit together. This walkthrough covers the wiring end to end, then flags the guardrails a spend-accountable team should insist on before pointing Claude, Gemini, or a ChatGPT client at a production MCC.
What actually changes when a model can query the account itself?
What the Official Google Ads MCP Server Actually Does
Google open-sourced the server in October 2025. Google's own announcement is explicit that the first release is read-only, intended for reporting and diagnostics rather than mutations. The repo confirms the scope: three tools ship in the box, called list_accessible_customers, search (which runs GAQL), and a resource-metadata helper. No bid changes, no budget edits, no negative keyword pushes.
That constraint is a feature. A read-only server lets a team put an LLM in front of the account for the tasks where it earns its keep, without handing it the keys to pause a campaign at 2 a.m. When a strategist asks "which campaigns are spending above target CPA with no conversions this week," the flow is: the model picks the search tool, writes a GAQL query, the server executes it against the API, structured rows come back into the context window, and the model synthesizes the answer. That last hop is what makes the output usable instead of hallucinated.
Model Context Protocol itself is an open standard Anthropic published to give LLMs a common way to reach data and tools. Google adopting it for Ads matters because it collapses the "custom integration per client" tax that has kept LLM-native reporting stuck in demos.
Prerequisites Before You Touch a Config File
Four credentials do the work. Miss one and the connection fails silently or with an unhelpful auth error.
- A Google Ads manager account (MCC) with an approved developer token. The token lives on the MCC, not on a client account. New tokens are automatically upgraded to Explorer access in many cases; if not, the API Center is where you apply.
- A Google Cloud project with the Google Ads API enabled and an OAuth 2.0 client (or service account) created. Save the project ID.
- A credentials JSON file. Google's docs on the OAuth 2.0 flow walk through consent screen configuration and the refresh-token dance.
- Python 3.12+ and pipx on the machine that will host the server. The official install path is pipx run --spec git+https://github.com/googleads/google-ads-mcp.git google-ads-mcp.
One landmine worth calling out: if a developer token has only test-account approval, every GAQL query against a production customer ID returns the "developer token is only approved for use with test accounts" error. Standard access, in Google's tiering, historically covers up to $15,000 in monthly spend per token before a Basic Access upgrade is needed, per community documentation. Confirm current limits in the API Center before scaling.

Wiring the Server Into Claude, Gemini, or Cursor
The server runs locally, over stdio transport. That single fact determines which clients can actually talk to it. Claude Code (the CLI), Cursor, Gemini CLI, and VS Code launch local processes and work out of the box. The Claude.ai web app and ChatGPT web connect only to hosted URLs, so they cannot see a server on your laptop. This is by design and confirmed by Google's remote-MCP announcement for other Google services, which points to a separate fully-managed endpoint that does not currently cover Ads.
The configuration entry, per Google's toolkit docs, is a JSON block added to the host's MCP settings file:
- command: pipx
- args: run --spec git+https://github.com/googleads/google-ads-mcp.git google-ads-mcp
- env: GOOGLE_APPLICATION_CREDENTIALS, GOOGLE_PROJECT_ID, GOOGLE_ADS_DEVELOPER_TOKEN
Restart the client. If the connector shows Connected, ask the model "what customers do I have access to" as a sanity check. That call hits list_accessible_customers and confirms both the developer token and the OAuth refresh token are wired. From there, GAQL is the language of every subsequent question. Ask about campaigns burning budget with zero conversions in the last 14 days, and the model composes and executes the query itself.
| Client | Launches local process | Reads stdio transport | Works with official Ads MCP |
|---|---|---|---|
| Claude Code (CLI) | Yes | Yes | Yes |
| Cursor | Yes | Yes | Yes |
| Gemini CLI | Yes | Yes | Yes |
| VS Code (MCP) | Yes | Yes | Yes |
| Claude.ai web app | No | Hosted URL only | No |
| ChatGPT web | No | Hosted URL only | No |
Guardrails an Accountable Operator Needs
The read-only ceiling handles the loudest risk. It does not handle every risk. A few discipline points worth writing into an internal runbook:
- Scope credentials by customer ID. If a media team manages 40 accounts under one MCC but the LLM is only meant to analyze five, use a service account or a separately scoped OAuth client that lists only those customers. The login_customer_id field in the config controls which MCC the calls route through.
- Log every tool call. The MCP server's own logs plus the Google Cloud API dashboard give you a full audit trail. Treat them like any other production log source.
- Do not paste developer tokens into shared chats. Environment variables only. If a token leaks, rotate it from the API Center and revoke the associated OAuth client.
- Assume context leakage. Anthropic's own engineering guidance on MCP notes that returning large tool outputs into an LLM's context is expensive and can be filtered through code execution instead. For accounts with heavy query volumes, filter server-side before results hit the model.
- Keep a human in the loop for anything that touches spend. When write-capable community servers or hosted managed connectors enter the picture, insist on approval gates for mutations. The emerging tool landscape is moving fast, and the ones worth using make approval explicit rather than optional.
Where This Fits in a Real PPC Workflow
The honest read: the official server is a reporting layer, not an autopilot. That maps well to how a disciplined agency actually works. Diagnostic questions that used to require pulling a report, cleaning it in a sheet, and eyeballing patterns now resolve in one prompt. A senior strategist can ask for search-term waste across a portfolio and get a ranked list without touching Editor. That is a real hour saved, not a demo trick.
What it does not do is replace strategy or account structure. The playbooks that drive ROAS accountability, keyword hygiene, and full-funnel measurement still live with the operator. The MCP layer just removes the friction between the operator's questions and the account's data. Teams already thinking about how to structure PPC management should treat it as a productivity tool that finally makes conversational reporting truthful, and pair it with the same guardrails they would apply to any other API-level access.
For agencies weighing whether to build this in-house or lean on partners already running against the API at scale, the calculus is familiar. If the team can maintain a Cloud project, rotate tokens, and monitor logs, self-hosting the official server is essentially free. If not, an AI-forward PPC partner with existing infrastructure is the faster path to the same outcome. Either way, the model asking the account questions directly is not a future capability. It is a Tuesday afternoon setup with an approved developer token and fifteen minutes of config.
The read is the start of the loop. What a team does with the answers is still what separates a rigorous account from a comfortable one.