Google Ads MCP server
Google Ads MCP with MCC support: 35 tools for campaigns, keywords, reporting, GAQL.
1 stars
Reviews
Write oneNobody has reviewed Google Ads yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
Google Ads tools (34, 11 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
google_ads_ad_performanceGet ad performance report with metrics, ad copy (headlines/descriptions), final URLs, and ad strength rating.
google_ads_ad_performance_by_conversionGet ad performance broken down by conversion action. Shows which ads drive which conversion types.
google_ads_add_campaign_negativesAdd negative keywords at the campaign level. Use for campaign-specific negatives that shouldn't be in a shared list.
google_ads_add_shared_negativesAdd negative keywords to a shared negative keyword list. Keywords will immediately block matching queries across all campaigns the list is applied to.
google_ads_create_ad_groupwrite actionCreate a new ad group (will be PAUSED until approved). Returns ad group ID.
google_ads_create_campaignwrite actionCreate a new campaign (will be PAUSED until approved). Returns campaign ID.
google_ads_create_keywordswrite actionCreate keywords for an ad group (will be PAUSED until approved). Keywords are auto-labeled for easy discovery via google_ads_list_pending_changes.
google_ads_create_responsive_search_adwrite actionCreate a responsive search ad (will be PAUSED until approved). Validates before creating. Headlines/descriptions can be plain strings or objects with pinned_position (1-3 for headlines, 1-2 for descriptions).
google_ads_create_shared_setwrite actionCreate a new shared negative keyword list at account level. Returns the new shared set ID.
google_ads_enable_itemsEnable paused campaigns, ad groups, or ads. REQUIRES USER APPROVAL. Use after reviewing in Google Ads UI.
google_ads_gaql_querywrite actionExecute a raw GAQL (Google Ads Query Language) query. Use this for custom reports or accessing any Google Ads API resource not covered by other tools. See https://developers.google.com/google-ads/api/docs/query/overview for GAQL syntax.
google_ads_get_campaign_trackingGet campaign tracking parameters including tracking URL template, final URL suffix, and custom URL parameters
google_ads_get_client_contextGet the current client context based on working directory. Call this first to confirm which Google Ads account you're working with.
google_ads_keyword_performanceGet keyword performance report with metrics including impressions, clicks, cost, conversions, quality score components (quality score, expected CTR, ad relevance, landing page experience), and impression share metrics.
google_ads_keyword_performance_by_conversionGet keyword performance broken down by conversion action. Shows which keywords drive which conversion types (e.g., form fills, MQLs, etc.).
google_ads_keyword_volumeGet historical search volume estimates for a list of keywords using the Google Ads Keyword Planner. Returns avg monthly searches, competition level, and CPC bid range for each keyword.
google_ads_link_shared_setLink a shared negative keyword list to one or more campaigns. Once linked, all negatives in the list will apply to those campaigns.
google_ads_list_ad_groupsList ad groups, optionally filtered by campaign
google_ads_list_campaignsList all campaigns for the current client account
google_ads_list_conversion_actionsList all available conversion actions (e.g., form fills, MQLs, etc.) to understand what conversion tracking is set up.
google_ads_list_pending_changesList all pending changes (paused items with claude- label) awaiting review
google_ads_pause_itemsPause enabled campaigns, ad groups, or ads. REQUIRES USER APPROVAL. This will stop items from serving.
google_ads_pause_keywordsPause active keywords by their criterion resource names.
google_ads_remove_adgroup_negativeswrite actionRemove ad-group-level negative keywords by their resource names. Get resource names from a GAQL query on ad_group_criterion.
google_ads_remove_campaign_negativeswrite actionRemove campaign-level negative keywords by their resource names. Get resource names from a GAQL query on campaign_criterion.
google_ads_remove_shared_negativeswrite actionRemove negative keywords from a shared negative keyword list by their resource names. Get resource names from a GAQL query on shared_criterion.
google_ads_search_term_insight_termsDrill into a specific search term category to see the individual search terms within it. Requires an insight_id from google_ads_search_term_insights.
google_ads_search_term_insightsGet search term category insights for a campaign. Shows the search categories your ads appeared against (like the Insights panel in the Google Ads UI). Must query one campaign at a time. Optionally compares two date ranges to show trends.
google_ads_search_term_reportGet search term report showing actual search queries that triggered ads, with the keyword they matched to.
google_ads_search_term_report_by_conversionGet search term report broken down by conversion action. Shows which search queries drive which conversion types.
google_ads_unlink_shared_setUnlink a shared negative keyword list from one or more campaigns. The list's negatives will no longer apply to those campaigns.
google_ads_update_campaign_budgetwrite actionUpdate the daily budget for a campaign. Can update the existing budget amount or create a new solo budget and reassign the campaign to it (useful for breaking shared budgets).
google_ads_update_campaign_trackingwrite actionUpdate campaign tracking parameters: final URL suffix, tracking URL template, and/or custom URL parameters. Use google_ads_get_campaign_tracking first to see current values.
google_ads_validate_adValidate an RSA without creating it. Use this to check for errors before creating.
Public scan report
scanner v0.1.9 · 2026-09-27 · same rubric, same numbers if you re-run it
- Code scan11 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitystatic API keys via environment variables6/15
- Maintenancelast push 2 days ago15/15
- Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10
How Google Ads compares
Against every graded MCP server, from our own scans and uptime checks. Updated after each scan run.
- Safety score
- 83/100
- higher than 65% of 48,255 servers
- Tools
- 34
- the typical server has 7
- Tools that change things
- 32%
- typical: 0%. Fewer write tools means less an agent can break
- GitHub stars
- 1
- more than 65% of 28,688 servers
What its tools let an agent do: 23 read · 11 change
Install Google Ads in Claude Code, Cursor or VS Code
Runs npx -y mcp-google-ads on your machine. Read the scan report first; the gateway never runs local packages.
claude mcp add google-ads -- npx -y mcp-google-ads
What the publisher says
From the Google Ads repository's README, as published. We do not edit it. Read it on GitHub
MCP Google Ads Server
An MCP (Model Context Protocol) server for the Google Ads API with built-in safeguards for review before changes go live. Production-proven with MCC (Manager Account) support, 36 tools for campaign management, reporting, and optimization. v1.2.0 adds Demand Gen campaign creation end-to-end.
Features
- MCC Support: Works with Manager accounts and multiple client accounts
- Auto-Context: Detects which client account based on your working directory
- Safe by Default: All new items created in PAUSED state
- Approval Workflow: Enable items only after manual review
- Validation: Validates ads before creating to catch errors early
- Resilience: Circuit breakers, retry with backoff, and timeout handling (cockatiel)
- Structured Logging: Pino-based logging with build fingerprinting
Setup
1. Google Ads API Access
You need:
- A Google Ads Developer Token (apply at Google Ads API Center)
- OAuth credentials (Client ID & Secret from Google Cloud Console)
- A Refresh Token for your MCC account
Getting OAuth Credentials
- Go to Google Cloud Console
- Create a project or select existing
- Enable the Google Ads API
- Go to Credentials → Create Credentials → OAuth Client ID
- Choose Desktop App
- Download the JSON (contains clientid and clientsecret)
Getting a Refresh Token
Bring your own OAuth client (the clientid / clientsecret from the step above) and run the bundled helper. It runs Google's installed-app loopback flow with PKCE (S256) and prints your refresh token. It reads nothing from your home directory and needs no shared OAuth keyfile.
export GOOGLE_ADS_CLIENT_ID="YOUR_CLIENT_ID.apps.googleusercontent.com"
export GOOGLE_ADS_CLIENT_SECRET="YOUR_CLIENT_SECRET"
node get-refresh-token.cjsYour browser opens for Google sign-in; approve as the Google account that owns the Ads data. On success the helper prints one line to stdout:
GOOGLE_ADS_REFRESH_TOKEN=1//0a...Set that value in your environment (or config.json, below). The OAuth scope requested is read from config.json (oauth.scope), falling back to config.example.json, so the helper and the running server always request the same scope. This MCP requests only the minimum scope it needs: https://www.googleapis.com/auth/adwords.
Do not run this with stdout redirected to a shared log file — the refresh
token is printed to stdout by design.
Note: GOOGLEADSDEVELOPER_TOKEN is a separate Google Ads API credential, not an OAuth scope — set it independently (see Environment Variables below).
2. Install
npm install mcp-google-adsOr clone and build from source:
git clone https://github.com/mharnett/mcp-google-ads.git
cd mcp-google-ads
npm install
npm run buildSecurity: Never share your .mcp.json file or commit it to git -- it may contain API credentials. Add .mcp.json to your .gitignore.
3. Configure
cp config.example.json config.jsonEdit config.json with your credentials:
{
"oauth": {
"scope": "https://www.googleapis.com/auth/adwords"
},
"google_ads": {
"developer_token": "YOUR_DEVELOPER_TOKEN",
"client_id": "YOUR_CLIENT_ID.apps.googleusercontent.com",
"client_secret": "YOUR_CLIENT_SECRET",
"refresh_token": "YOUR_REFRESH_TOKEN",
"mcc_customer_id": "123-456-7890"
},
"clients": {
"my-client": {
"customer_id": "111-222-3333",
"name": "My Client",
"folder": "/path/to/client/workspace"
},
"another-client": {
"customer_id": "444-555-6666",
"name": "Another Client",
"folder": "/path/to/another/workspace"
}
},
"defaults": {
"create_paused": true,
"label_prefix": "claude-",
"require_approval_for_enable": true
}
}Environment Variables
Shortened. The full README is on GitHub.
Nothing above is checked by us. What we check is on the safety report.
Google Ads: common questions
- Is Google Ads MCP server safe?
- Mostly: it is graded B (83/100). Read the Google Ads safety report
- How do I install Google Ads?
- It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
- Does Google Ads need an API key?
- Yes. The registry entry asks for
GOOGLE_ADS_CLIENT_SECRET,GOOGLE_ADS_REFRESH_TOKEN,GOOGLE_ADS_DEVELOPER_TOKEN. - Is Google Ads maintained?
- The last commit was 39 days ago (2026-09-26). The latest release is v1.0.1.
- What can I use instead of Google Ads?
- Servers from other publishers that do the same job: AdLoop MCP server.
- How does Google Ads compare with other MCP servers?
- safety score 83/100 (higher than 65% of 48,255 servers); tools 34 (the typical server has 7); tools that change things 32% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.
Alternatives to Google Ads
Same job from other publishers: the closest match first, then the best rated.
- AdLoopGoogle Ads, Reddit Ads, GA4 and Tag Manager in your AI client, with a preview before every change.not reviewedEstablishedA