Google Ads MCP

Google Ads MCP Server

How a Google Ads MCP server works, how to set this one up in Claude Code or Claude Desktop, what it can and cannot change, and when an open-source server from GitHub is the better choice.

A Google Ads MCP server gives an AI client — Claude, Claude Code, ChatGPT, Cursor, Codex, Gemini CLI — direct, authenticated access to the Google Ads API through the Model Context Protocol. The assistant lists the tools the server exposes, picks one to answer your prompt, and gets structured data back from the live account instead of reasoning over a CSV you pasted. MCP Ads is a hosted Google Ads MCP server with 755 Google Ads tools, the largest surface in the product because Google Ads has the largest API. It works with single accounts and with manager (MCC) accounts, it holds the developer token so you do not have to apply for one, and its write tools are designed so that a misread prompt ends in a paused campaign rather than unplanned spend. This page covers setup, the Google OAuth grant, what the tools cover, the safety defaults, pricing, and a straight answer on when a community Google Ads MCP server from GitHub is the better fit.
755
tools on this platform
3,189
tools in total
Browser
sign-in, no API keys

What a call looks like

These are real tool names from the live server, with the shape of what they return.

YouGive me an overview of this account.
Toolgoogle_ads_account_overview
{
  "customer_id": "482-193-7755",
  "currency": "USD",
  "last_30_days": { "cost": 41288.42, "conversions": 612, "cpa": 67.46, "roas": 4.12 },
  "active_campaigns": 14
}
YouWhat search terms wasted money last month?
Toolgoogle_ads_search_terms
{
  "terms": [
    { "term": "free crm software", "cost": 812.40, "conversions": 0, "clicks": 214 },
    { "term": "crm jobs",          "cost": 366.15, "conversions": 0, "clicks": 98 }
  ],
  "suggestion": "Both look like negative keyword candidates at the campaign level."
}
YouAdd "free crm software" and "crm jobs" as campaign negatives.
Toolgoogle_ads_bulk_add_search_terms_as_negatives
{
  "campaign_id": "20481920331",
  "added": [
    { "text": "free crm software", "match_type": "PHRASE" },
    { "text": "crm jobs",          "match_type": "PHRASE" }
  ]
}
YouWhich campaigns are pacing over budget?
Toolgoogle_ads_budget_pacing
{
  "campaigns": [
    { "name": "Brand - Exact",    "daily_budget": 200, "avg_daily_spend": 187.22, "pacing": "on track" },
    { "name": "Competitor Terms", "daily_budget": 150, "avg_daily_spend": 214.90, "pacing": "over" }
  ]
}
YouFind the Acme Dental account — it is somewhere under our MCC.
Toolgoogle_ads_find_account
{
  "matches": [
    { "customer_id": "913-447-2210", "name": "Acme Dental - Search", "manager": "Agency MCC", "status": "ENABLED" }
  ]
}

What a Google Ads MCP server actually does

The Google Ads API is large, query-based (GAQL) and has a steep on-ramp: a developer token that Google has to approve, an OAuth client, a refresh token, and a client library. An MCP server hides all of that behind named tools. When you ask "which keywords had zero conversions and more than $100 of spend last month", the assistant calls a keyword performance tool with a date range, gets rows back, and answers. When you ask it to add negatives, it calls a write tool with the exact terms, and the call is visible in your client before the answer arrives. MCP Ads exposes 755 Google Ads tools. About 390 of them are writes; the rest are reads, reports and diagnostics. The recommended everyday tools are prefixed google_ads_ and the long-tail, lower-level ones are prefixed gads_, so a model reaches for the common one first and the specialised one only when it needs it.

Add the server to Claude Code, Claude Desktop or ChatGPT

The server is remote. There is nothing to install, no Python environment, no google-ads.yaml and no developer token to apply for. Sign up at mcp-ads.com, connect Google Ads from the dashboard, then point your client at the endpoint. In Claude Code it is one command:

  • Claude Code: `claude mcp add --transport http mcp-ads https://mcp-ads.com/mcp-slim` — "mcp-ads" is the local label and can be anything. Run `/mcp` inside Claude Code the first time to complete the browser sign-in.
  • Claude Desktop and claude.ai: Settings → Connectors → Add custom connector, paste `https://mcp-ads.com/mcp-slim`, approve the sign-in that opens.
  • ChatGPT: add the same URL as a connector in Developer Mode, or use the Custom GPT action in the docs.
  • Cursor, Windsurf, Codex, Gemini CLI: add `{ "mcpServers": { "mcp-ads": { "url": "https://mcp-ads.com/mcp-slim" } } }` to the client's MCP config. `/mcp-slim` exposes one dispatcher per platform and is fast to discover; the full `/mcp` endpoint lists all 755 Google Ads tools individually and is slower for clients to load.

What the Google OAuth screen asks for

Connecting Google Ads is the standard Google consent screen. It asks for one Google Ads scope — permission to view and manage your Google Ads campaigns on the accounts your Google identity can already access — plus your basic profile so the dashboard can label the connection. It cannot reach an account your login has no role on, and it does not ask for Gmail, Drive or anything outside Google Ads; GA4 and Search Console are separate connections with their own scopes. The refresh token Google returns is stored encrypted on the MCP Ads side, used only to make the calls you trigger, and never exposed to your AI client. Choose the Google identity that already has access to the ad account — picking a different one is the most common reason an account does not appear afterwards. You can revoke the grant from the MCP Ads dashboard or from your Google account's third-party access page at any time.

Tool categories in the Google Ads server

The 755 tools cover both the everyday work and the long tail underneath it. The names below are real tool names, searchable in the API reference.

  • Accounts and MCC — google_ads_account_overview, google_ads_list_mcc_clients, google_ads_find_account, gads_list_manager_accounts, gads_list_accessible_accounts, gads_get_mcc_performance, gads_check_accounts_inactivity
  • Campaigns, ad groups and ads — google_ads_create_campaign, google_ads_create_performance_max, google_ads_copy_campaign, google_ads_create_adgroup, google_ads_create_responsive_search_ad, google_ads_create_responsive_display_ad, google_ads_create_video_ad, google_ads_enable_campaign, gads_pause_campaign, gads_bulk_pause_campaigns, gads_create_campaign_experiment
  • Keywords and negatives — google_ads_add_keywords, google_ads_bulk_create_keywords, google_ads_add_negative_keywords, google_ads_add_search_term_as_negative, google_ads_bulk_add_search_terms_as_negatives, google_ads_create_shared_negative_list, google_ads_apply_shared_negative_list, gads_bulk_update_keyword_bids, gads_bulk_pause_keywords
  • Search terms and insights — google_ads_search_terms, gads_get_search_terms_report, gads_get_search_term_insights, google_ads_auction_insights, gads_get_placement_report
  • Budgets and bidding — google_ads_create_budget, google_ads_update_campaign_budget, google_ads_budget_pacing, gads_create_shared_budget, gads_get_budget_change_log, gads_create_bidding_strategy, gads_create_bidding_seasonality_adjustment, gads_create_bidding_data_exclusion, google_ads_bid_modifiers, gads_get_bidding_strategy_simulation
  • Conversions and audiences — google_ads_conversion_actions, google_ads_create_conversion_action, google_ads_upload_offline_conversions, gads_upload_enhanced_conversions, google_ads_upload_customer_match, google_ads_audience_segments, gads_create_custom_audience, gads_create_combined_audience
  • Reporting and breakdowns — google_ads_campaign_performance, google_ads_adgroup_performance, google_ads_ad_performance, google_ads_daily_trend, google_ads_device_breakdown, google_ads_demographic_breakdown, google_ads_geo_performance, google_ads_ad_schedule_report, gads_get_pmax_performance, gads_get_rsa_asset_performance, google_ads_change_history
  • Recommendations and assets — google_ads_apply_recommendation, google_ads_dismiss_recommendation, google_ads_add_rsa_asset, google_ads_create_sitelink_asset, google_ads_create_callout_asset, gads_upload_image_asset, google_ads_asset_report

Safety defaults: what the server will and will not do on its own

Google Ads writes spend real money, so the defaults matter more here than anywhere else in the product. google_ads_create_campaign and gads_create_campaign both default to status PAUSED, and so do the Performance Max and ad-group creators; a campaign goes live only when you say so or pass ENABLED explicitly. Budget changes are their own tool (google_ads_update_campaign_budget takes a budget id and a new daily amount) and are never chosen by the model as a side effect of another request. Read tools and write tools are separate, and a user with the viewer role in an MCP Ads workspace can run every report without being able to call a single write. The everyday google_ads_ layer does not expose deleting campaigns or removing budgets outright at all; a handful of gads_remove_ tools exist in the low-level layer for criteria and drafts, and they are writes like any other — blocked for viewers and never called without an explicit instruction. Every call is shown in your client as it runs, and google_ads_change_history and gads_get_budget_change_log give you an audit trail afterwards. In practice the worst realistic outcome of a misunderstanding is a paused campaign you delete, not a live one you did not want.

MCC and multi-account access

Accounts under a manager account are reachable through the same connection: authorise with a Google identity that has access to the MCC and every child account resolves through it. google_ads_list_mcc_clients lists the tree, gads_get_mcc_performance rolls performance up across it, and google_ads_find_account does a fuzzy match by name or id when you do not know which manager a client sits under. Several Google logins can be connected at once, which is how agencies handle clients that grant access to a personal account rather than to the agency MCC. Every tool takes an optional customer_id, and the dashboard lets you set a default so you do not have to repeat it.

Open-source Google Ads MCP servers — when they are the better pick

There are several community Google Ads MCP servers on GitHub, most of them Python or TypeScript wrappers over the official client library that run locally as a stdio server. They are free, you own everything, and for some people that is the right answer. The honest split:

  • Pick an open-source server if you already have an approved Google Ads developer token (applying takes days to weeks and requires a manager account), you are comfortable creating an OAuth client and refresh token and keeping a google-ads.yaml in sync, you want the server running on your own machine, and Google Ads is the only platform you need. Most of them expose a smaller set of tools — often a GAQL query tool plus a few helpers — which is fine if you are happy writing GAQL yourself.
  • Pick MCP Ads if you do not have a developer token and do not want to apply for one; if you manage Google Ads alongside Meta, GA4, Search Console, Microsoft or the other platforms it covers and want a single connector; if you work across an MCC with many clients and multiple logins; if you need viewer-versus-editor roles for a team; or if you want named tools for search term mining, pacing, negatives and bidding rather than raw GAQL. It is a paid product: the free plan covers 30 tool calls a month and the unlimited plan is a flat $49/month for every account you connect. A solo advertiser with one account and their own developer token may not need it.

Which clients it works with, and pricing

Anything with remote MCP support: Claude Desktop, claude.ai, Claude Code, ChatGPT, Cursor, Windsurf, Codex, Gemini CLI and Grok. The OAuth grant persists, so you connect Google once and add the URL to every client you use. The free plan includes 30 tool calls a month with no time limit — enough for a full audit workflow end to end. The unlimited plan is $49/month, flat, regardless of how many accounts, MCCs or platforms you connect, and you can upgrade without reconnecting anything.

Questions

Is there a free Google Ads MCP?

Yes. MCP Ads has a free plan with 30 tool calls a month and no time limit. If you want unlimited free use, community Google Ads MCP servers on GitHub are open source and can be self-hosted — but you will need your own approved Google Ads developer token, an OAuth client and a refresh token, and you maintain all of it yourself.

Does it work with Claude Code?

Yes. Run `claude mcp add --transport http mcp-ads https://mcp-ads.com/mcp-slim`, then `/mcp` inside Claude Code to complete the browser sign-in. The same tools are available in Claude Desktop and claude.ai through a custom connector with the same URL.

Does it work with an MCC (manager account)?

Yes. Authorise with a Google identity that has access to the manager account and every child account is reachable through it. google_ads_list_mcc_clients lists them, google_ads_find_account finds one by name or id, and gads_get_mcc_performance reports across the whole tree. Multiple Google logins can be connected for clients that sit outside your MCC.

Can it change budgets?

Yes, through google_ads_update_campaign_budget, which takes a budget id and a new daily amount in the account currency. It is only called when you explicitly ask for a budget change, viewers cannot call it, and gads_get_budget_change_log shows every change afterwards. Removing a budget outright is not exposed in the everyday tool layer.

Do I need a Google Ads developer token?

No. MCP Ads holds the developer token and the API access; you authorise your account with a normal Google sign-in. This is the main practical difference from a self-hosted server, where you have to apply for and maintain your own token.

Are new campaigns created live?

No. google_ads_create_campaign, gads_create_campaign and google_ads_create_performance_max all default to PAUSED. You check the structure in the Google Ads UI or ask the assistant to enable the campaign when it is ready.

Does the assistant see my Google credentials?

No. Tool results go into the conversation like any answer, but the OAuth refresh token stays encrypted on the MCP Ads side and is never exposed to the client or the model.

Related

Connect an account and try it

Add MCP Ads to Claude or ChatGPT with one URL, authorise an ad account in the browser, and ask it something.