Google Ads MCP Explained: What It Actually Does for Advertisers

Google Ads MCP: What Google’s Official Server Actually Does for Advertisers

If you’ve spent any time in a Google Ads Discord or LinkedIn feed in the last few months, you’ve probably seen the term MCP attached to Google Ads. Some posts make it sound like your account is about to run itself. Others barely explain what it is before jumping to setup instructions.

Neither approach is that useful if you’re the one who has to actually manage the budget.

So here’s the practitioner version: what Google Ads MCP is, how the pieces connect, what it can and can’t do today, and where it actually saves you time as an advertiser — not as a developer.

What Is Google Ads MCP?

MCP stands for Model Context Protocol, an open standard that lets AI assistants like Claude, Gemini, or ChatGPT connect to external tools and data sources without custom-built integrations for each one. Think of it as a shared connector format — one protocol, many tools, instead of a different plug for every platform.

Google’s official Google Ads MCP server is Google’s first-party implementation of that standard for the Google Ads API. It’s open source, free to run, and built in Python. Once it’s connected to an MCP-compatible AI assistant, that assistant can query your Google Ads account and answer questions in plain language, without you writing a single GAQL query yourself.

This is different from the dozen or so third-party “Google Ads MCP” servers that popped up earlier — those are unofficial community builds. Google’s version is the one maintained directly by the Google Ads API team, published on GitHub under the googleads organization.

How It Actually Works, Step by Step

Here’s the mechanic, not the marketing version:

  1. You ask your AI assistant something like “How did my Search campaigns perform this week?”
  2. The assistant checks which tools it has access to and recognizes the Google Ads MCP server can answer this.
  3. The server translates that request into a GAQL query (Google Ads Query Language — the SQL-like syntax the Google Ads API uses for reporting).
  4. The query runs against your account through the Google Ads API, using OAuth 2.0 or a service account for authentication.
  5. The results come back into the assistant’s context, and it turns raw rows of data into a readable answer.

No custom reporting script. No manually building a GAQL query and cross-referencing field names in the docs. You’re describing what you want in normal language, and the server handles the translation.

The Three Tools It Actually Exposes

This is the part most explainer posts skip, and it matters because it tells you the real boundaries of what you’re working with. The official server currently exposes exactly three tools:

  • list_accessible_customers — returns every Google Ads account (by customer ID and name) that your credentials can see. Useful the moment you’re managing more than one account.
  • search — runs GAQL queries to pull metrics, budgets, statuses, and any other reportable field. This is the workhorse; almost every reporting question routes through here.
  • get_resource_metadata — looks up what fields exist on a given resource (like “campaign” or “ad_group”), so the assistant can figure out what’s queryable without you memorizing the schema.

That’s the entire toolset. It’s deliberately narrow.

Why It’s Read-Only — and Why That’s the Point

The current release cannot pause campaigns, change bids, edit budgets, or create new assets. It only reads.

This isn’t a limitation Google plans to quietly patch away — it’s the actual safety model. An AI agent that can only read your account is an agent that can never accidentally zero out your top campaign’s budget because it misread a prompt. The read-only boundary means you can let it run analysis loose on a live account without a human double-checking every step before it executes.

If you want an AI agent to act on your account — pause an underperformer, shift a budget — that still has to go through a separate, audited write path today. Google’s MCP server is the diagnostic layer, not the execution layer, and that separation is intentional.

What This Actually Changes for Advertisers

Strip away the protocol talk and here’s where it hits your day-to-day work:

  • Reporting stops being a GAQL exercise. You ask for “top spending campaigns by device over the last 7 days” in plain English instead of writing the query by hand.
  • Multi-account work gets faster. list_accessible_customers means an agency managing dozens of accounts can ask cross-account questions without switching contexts manually.
  • Diagnostics happen in the same conversation as everything else. If you’re already using an AI assistant for briefs, creative, or client communication, account performance data now sits in the same thread instead of a separate dashboard tab.
  • Junior team members query without needing to know the schema. get_resource_metadata means someone unfamiliar with the Google Ads API’s field names can still get an accurate pull, because the assistant looks up the structure itself.
  • You can trust it with a live account without a safety net. Because it can’t mutate anything, there’s no scenario where an AI hallucination costs you actual ad spend.

Setting It Up: The Short Version

You’ll need a Google Ads developer token, a Google Cloud project ID, and OAuth credentials (or application default credentials). From there, you add the server to your MCP-compatible client’s config file, pointing it at the official GitHub repository. Google also supports deploying it on Cloud Run if you want to share one server across a team instead of running it locally per person.

The setup itself is a developer task — but using it, once it’s connected, requires zero technical knowledge. That’s the actual shift here: the setup barrier is one-time and falls on whoever manages your stack, not on every marketer who wants to ask a question.

Using It With Claude

Since the server is a standard MCP implementation, it connects to Claude the same way any other MCP server does — there’s no Google-specific plugin to install. Two setup paths, depending on how you deployed it:

  • Local server (STDIO): In Claude Desktop, go to Settings → Developer → Edit Config and add the Google Ads MCP entry (the pipx run --spec git+https://github.com/googleads/google-ads-mcp.git google-ads-mcp command from earlier) to the mcpServers block, alongside your developer token and project ID as environment variables. Restart Claude Desktop for the config to load.
  • Remote server (Cloud Run): If you deployed the server on Google Cloud Run instead of running it locally, connect it as a Custom Connector from Settings → Connectors → Add custom connector, pointing at your Cloud Run URL. This path uses OAuth over Streamable HTTP rather than a local config file, and it’s the better option if more than one person on your team needs to query the same account.

Once it’s connected, you’ll see the tool icon in the chat input showing the server is live, and you can confirm the three tools (list_accessible_customers, search, get_resource_metadata) are listed under that connector. From there, it’s just a normal conversation — no special syntax, no need to mention GAQL unless you want to sanity-check a query yourself.

A few practical notes if you’re running this inside Claude day to day:

  • Keep the account list in view before you ask campaign-level questions. If you manage multiple clients or brands, start a session with “what accounts do I have access to” so Claude — and you — know which customer ID you’re querying before numbers show up.
  • Pair it with a written brief, not a blind prompt. “Compare Search vs. Performance Max spend efficiency this month” gets a more useful GAQL query than “how are we doing,” because the assistant has to guess less about which metrics you actually mean.
  • Don’t stack it with too many other connectors at once. Every connected MCP server adds its tool definitions to the context window, and a cluttered tool list can make Claude slower to pick the right one. If you’re not actively using a connector in a session, it’s worth disconnecting it rather than leaving everything on by default.
  • Treat the output as a first pass, not a final report. The server pulls real numbers accurately, but the framing and the “so what” is still worth a manual sanity check — especially before it goes in front of a client.

Frequently Asked Questions

Is the Google Ads MCP server free?

Yes. It’s open source and free to run. You’ll still need standard Google Ads API access, which is free for typical usage levels.

Can it make changes to my campaigns?

No. The current release is strictly read-only — it can analyze and report, but it cannot pause campaigns, adjust bids, or create assets.

Which AI assistant works best with it?

Any MCP-compatible client can connect to it, including Claude Desktop and Gemini. The server itself is assistant-agnostic — it’s a standard connector, not a platform-specific plugin.

Do I need to know GAQL to use it?

No. That’s the point of the abstraction. You ask questions in plain language, and the server translates them into GAQL behind the scenes. Knowing GAQL helps you sanity-check the output, but it isn’t required to use the tool.

How is this different from the unofficial Google Ads MCP servers already out there?

Community-built versions have existed for a while and some support write actions. Google’s official server is the first-party, Google-maintained implementation — narrower in scope (read-only, three tools) but backed directly by the Google Ads API team.

How do I connect it to Claude specifically?

If you’re running the server locally, add it under Claude Desktop’s Settings → Developer → Edit Config. If you deployed it on Google Cloud Run, connect it instead as a Custom Connector under Settings → Connectors, using OAuth over Streamable HTTP. Both paths expose the same three tools once connected.


Have you connected the official MCP server to your account yet, or are you still testing one of the community builds? Curious what the actual query volume looks like once a team gets used to asking instead of building reports manually.