google-ads-mcp-server
Provides tools for reading and analyzing Google Ads data, including campaigns, ad groups, budgets, bidding strategies, search terms, landing pages, Performance Max assets and placements, Shopping, recommendations, and change history, plus Keyword Planner support and guarded write operations that preview changes before applying them.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@google-ads-mcp-serverShow me campaign spend and conversions for last 30 days"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
google-ads-mcp-server
An open-source Model Context Protocol server for the Google Ads API. It lets Claude, ChatGPT, Cursor or any MCP client read and analyse your Google Ads data, plan keywords, and change campaigns if you choose to.
You run it. Your credentials stay on your machine. Nothing is proxied through a third party.
npx -y @getmcpads/google-ads-mcp-serverPrefer not to run it yourself? getmcpads.com is the hosted version of this server, with Google Ads alongside Meta Ads, TikTok Ads, Pinterest Ads, GA4 and Search Console behind a single endpoint, hosted OAuth, and cross-platform reporting. Same tools, same safety model, no setup.
What you get
31 read tools | Campaigns, ad groups, budgets, bidding strategies, search terms, landing pages, Performance Max assets and placements, Shopping, recommendations, change history |
7 write tools | Off by default. Status, budgets, bids, schedules, renames, campaign creation. Each one previews before it applies |
Full Keyword Planner | Keyword ideas, historical metrics, forecasts, ad group themes, geo target suggestions |
130 metrics, 84 dimensions | With a compatibility matrix that catches invalid combinations before they hit the API |
5 resources | Live catalogues the model can read: metrics, dimensions, compatibility rules, 11 workflow recipes |
GAQL and beyond |
|
You do not need to know GAQL
The Google Ads API is queried with GAQL, its own query language, and most of its surface is
only reachable that way. This server carries the metric and dimension catalogues, so the model
asks for cost and conversions by name and the server writes the query.
google_ads_validate_query lets it check a combination before spending a call on it, and
google_ads_run_gaql is still there when you want to write GAQL yourself.
Keyword Planner is not in GAQL
Keyword ideas, historical volumes and forecasts live in a separate RPC service that GAQL
cannot reach at all. Same for Reach Planner, audience insights and benchmarks. This server
covers them through google_ads_run_readonly_rpc and dedicated tools.
Related MCP server: Google Ads MCP Server
How this compares to Google's own MCP server
Google shipped an official Google Ads MCP server in April 2026. It takes the opposite design approach, and the comparison is more nuanced than for other platforms.
Google's official server | This server | ||
Tools | 3: list accounts, GAQL search, resource metadata | 38 (31 read + 7 write) | 38, plus 5 other platforms |
Hosting | Self-hosted (pipx) or Cloud Run | Self-hosted. stdio, local process | Hosted for you |
Requires knowing GAQL | Yes, for anything beyond listing accounts | No, catalogues drive the query | No |
Keyword Planner | ❌ | ✅ ideas, history, forecasts | ✅ |
Reach Planner, audience insights | ❌ | ✅ via read-only RPC | ✅ |
Performance Max diagnostics | Via hand-written GAQL | ✅ dedicated tools | ✅ |
Writes | ❌ read-only by design | ✅ preview first, applied only on | ✅ preview first |
Metric compatibility | None | Query planner splits incompatible requests | Same planner |
Auditable | Yes, it is open too | Yes. Apache-2.0 | This server, audited |
Be fair about it. Google's server is self-hostable too, so "your data stays on your machine" is not a difference here. Its 3 tools are a deliberate minimalist design: one GAQL tool can express most of the reporting surface, and a model fluent in GAQL will do a lot with very little.
The difference is where the knowledge lives. There, it lives in the model, which has to write correct GAQL against a schema of thousands of fields. Here, it lives in the server, in catalogues and a compatibility matrix. Add to that the planning services GAQL cannot reach at all, and writes that cannot fire on the first call.
Choose Google's if your model writes good GAQL and you only need reporting. Choose this one if you want named metrics instead of query language, Keyword Planner and Reach Planner access, or guarded writes. Choose getmcpads.com if you want this server's capabilities without running it, or you need more than one ad platform in the same conversation.
Getting credentials
This is the heaviest setup of any advertising platform. Four values are needed, and one of them requires a review by Google. Budget an hour the first time.
1. Developer token
From a manager (MCC) account, open Tools → API Center and apply for a token. It starts at Test Account level, which only reaches test accounts. Apply for Basic Access to reach live accounts. Google reviews the application, which can take a few days.
📖 Developer token documentation
2. OAuth client
In a Google Cloud project, enable the Google Ads API, then create an OAuth client under APIs & Services → Credentials. Choose Desktop app for local use. Note the client ID and client secret.
3. Refresh token
Run the OAuth consent flow once, signed in as the Google account that can see your ad accounts, and keep the refresh token it returns. Google's own helper script does this in one command.
The refresh token does not expire. It is the sensitive value here: anyone holding it can mint access tokens indefinitely. Treat it like a password, and use an OAuth client dedicated to this server so you can revoke it on its own.
4. Login customer ID, if you use a manager account
If the accounts you query sit under an MCC, set GOOGLE_ADS_LOGIN_CUSTOMER_ID to the manager
account ID. Dashes are accepted and stripped. Skip it for a standalone account.
Run google_ads_health_check as your first call. It verifies all four credentials, lists
the accounts you can actually reach, and reports what is missing, without printing any secret.
Setup
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"google-ads": {
"command": "npx",
"args": ["-y", "@getmcpads/google-ads-mcp-server"],
"env": {
"GOOGLE_ADS_DEVELOPER_TOKEN": "your-developer-token",
"GOOGLE_ADS_CLIENT_ID": "your-client-id",
"GOOGLE_ADS_CLIENT_SECRET": "your-client-secret",
"GOOGLE_ADS_REFRESH_TOKEN": "your-refresh-token"
}
}
}
}Restart Claude Desktop. Ask it: "list my Google Ads accounts".
Claude Code
claude mcp add google-ads --env GOOGLE_ADS_DEVELOPER_TOKEN=... --env GOOGLE_ADS_CLIENT_ID=... --env GOOGLE_ADS_CLIENT_SECRET=... --env GOOGLE_ADS_REFRESH_TOKEN=... -- npx -y @getmcpads/google-ads-mcp-serverCursor
.cursor/mcp.json in your project, same shape as the Claude Desktop config above.
From source
git clone https://github.com/getmcpads-com/google-ads-mcp-server.git
cd google-ads-mcp-server
npm install && npm run build
cp .env.example .env # then fill in your credentials
npm startConfiguration
Variable | Default | Meaning |
| none | Required. From the API Center, Basic Access or above |
| none | Required. OAuth client ID |
| none | Required. OAuth client secret |
| none | Required. From the consent flow |
| none | Optional. Manager (MCC) account ID |
| unset | Set to |
|
|
|
Check your setup at any time:
npm run doctorWrites, and why they preview first
Write tools are disabled by default. Enable them with GOOGLE_ADS_ENABLE_WRITES=1.
Google's own server has none at all, so this is the part to read carefully.
When enabled, every write tool returns a preview and changes nothing:
// google_ads_update_campaign_budget { customerId: "123-456-7890", budgetId: "555", dailyAmount: 50 }
{
"applied": false,
"action": "google_ads_update_campaign_budget",
"change": { "customer": "1234567890", "budget": "555",
"newDailyBudget": 50, "inMicros": 50000000 },
"message": "Preview only, nothing was changed. Repeat the same call with confirm: true to apply this change to the live account."
}Only a second call carrying confirm: true touches the live account.
This is deliberate. An assistant composes these calls, and it can pick the wrong customer, the wrong campaign, or the wrong order of magnitude on a budget. A mandatory preview makes the mistake visible before it costs money, and gives a human the stopping point the protocol does not guarantee on its own.
Two further guardrails:
google_ads_create_campaignalways creates the campaignPAUSED. There is no option to create it active. Someone has to look at it before it spends.Amounts are converted to micros for you. Google holds money in millionths, so 12.50 in the account currency is
12500000. The preview shows both, so a factor-of-a-thousand mistake is visible before it applies.
Tool | What it changes |
| Pause, re-enable or remove |
| Daily budget |
| Default CPC bid |
| Start and end dates |
| Name only |
| Creates a budget, then a campaign, always |
Tools
Discovery and health
Tool | Purpose |
| Validates all four credentials and lists reachable accounts |
| Every account the credentials can reach |
| Currency, timezone, status, account settings |
| The MCC tree above and below an account |
Structure and settings
Tool | Purpose |
| List entities and their settings |
| Budgets and bidding configuration |
| Conversion actions and their settings |
| Change history: who changed what, and when |
Performance
Tool | Purpose |
| The main reporting tool. Named metrics, no GAQL required |
| Check a metric and dimension combination before running it |
| Keyword and query performance |
| Landing page performance |
| Paid and organic side by side |
| Bid and budget simulations |
| Google's own recommendations for the account |
Performance Max and Shopping
Tool | Purpose |
| Asset groups, assets and their issues |
| Where Performance Max actually served |
| Shopping performance and product data |
Keyword Planner
Tool | Purpose |
| Keyword ideas from seeds or a URL |
| Volumes, competition, trends |
| Forecast clicks, cost and conversions |
| Suggested ad group groupings |
| Resolve place names to geo target constants |
Escape hatches
Tool | Purpose |
| Run a raw read-only GAQL SELECT |
| Call an allowlisted non-GAQL read service: Reach Planner, audience insights, benchmarks |
| Search the API field schema |
These exist so a new field or service doesn't require a new release. Only read-only statements and an allowlist of services are accepted.
URI | Contents |
| What this server exposes, and which tool to run first |
| All 130 metrics with categories and formats |
| All 84 dimensions and where they are valid |
| The compatibility matrix |
| 11 step-by-step workflows |
Security
This server holds a refresh token that never expires, a client secret and a developer token. Concretely:
None of the four credentials is ever logged, at any log level, or written to disk.
The access token is cached in memory until a minute before expiry, rather than re-requested on every call.
Two hosts are contacted, and only two:
googleads.googleapis.comandoauth2.googleapis.com. A test fails the build if a third host appears in the source.No fetch follows a redirect. Every outbound call sets
redirect: "error", so a redirect cannot forward a bearer token or client secret to another host. A test fails the build if any fetch omits this.No telemetry. The server makes no network call other than to Google.
Full policy and reporting instructions: SECURITY.md.
Looking for a managed, multi-platform version?
This server does one platform, on your machine, with your credentials. That is on purpose.
If you'd rather not run it yourself, or you need Google Ads alongside Meta Ads, TikTok Ads, Pinterest Ads, GA4 and Search Console behind one endpoint, with hosted OAuth and cross-platform reporting, that's what we build at getmcpads.com.
Same philosophy, less plumbing. This project stays open source and independently useful either way.
Contributing
Issues and pull requests are welcome. See CONTRIBUTING.md. Please read SECURITY.md before reporting anything security-related.
Licence
Apache License 2.0. See also NOTICE.
Google, Google Ads and the Google Ads API are trademarks of Google LLC. This project is not affiliated with, endorsed by, or sponsored by Google LLC. It is an independent client of a public API.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Tools
Related MCP Servers
- AlicenseBqualityBmaintenanceEnables comprehensive Google Ads campaign management and analysis through natural language, including performance metrics, keyword optimization, budget management, and custom GAQL queries.10013MIT
- FlicenseNot gradedqualityCmaintenanceEnables comprehensive management of Google Ads campaigns through natural language, including campaign creation, ad group management, keyword operations, Performance Max campaigns, conversion tracking, and performance insights with support for multiple accounts.3
- FlicenseNot gradedqualityDmaintenanceEnables natural language access to Google Ads campaigns, accounts, and performance metrics via Claude, with tools for managing ad groups, keywords, budgets, and visualizing data.1
- AlicenseAqualityBmaintenanceEnables managing Google Ads campaigns through an AI assistant with read-only reporting, recommendations, and gated write operations for bids, budgets, and statuses, all backed by preview and audit logging.311MIT
Related MCP Connectors
Ask AI about your ads — query Meta, TikTok, and Google Ads performance in natural language.
Google Ads, Meta (Facebook) Ads, GA4 and Merchant Center analysis in plain language. Read-only.
Run Google, Meta, Microsoft, TikTok and LinkedIn Ads from Claude or ChatGPT. Writes need approval.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/getmcpads-com/google-ads-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server