Large Language ModelsGenerate imagesGenerate videos
Google Ads MCP Server: Connect Google Ads to Claude (Official)
Google now ships an official, open-source MCP server for Google Ads. This article shows how to authenticate, add it to Claude Desktop or Claude Code, run GAQL queries in plain English, and avoid the data and cost traps, then turn the findings into ad creative.
Ask your ad account a question in plain English and get the answer in seconds. That is the promise of the Google Ads MCP server, an open-source bridge from Google that lets an AI assistant like Claude read your live campaign data instead of waiting for you to export another CSV. It is the official route: Google publishes it in its own googleads GitHub organization under the Apache 2.0 license, and today it is strictly read-only. It can look at everything and change nothing.
This article shows how to connect Google Ads to Claude, which questions are worth asking first, and which traps quietly produce wrong numbers. One recent change matters: Google sunset developer tokens on September 9, 2026, so many older tutorials now describe a setup step you no longer need. Everything below follows Google's current documentation and the project README.
What the Official Server Does
The Model Context Protocol (MCP) is a standard that lets an AI client call tools exposed by a separate program. Google's server wraps the Google Ads API in three of those tools, so Claude can find your accounts, run queries, and look up field definitions without you writing a line of integration code. The server runs on your machine over stdio, and Claude talks to it the way it talks to any other MCP server.
Here is what changes compared with the weekly export routine most advertisers still follow:
Step
Export routine
With the MCP server
Pull data
Build and download reports by hand
Claude runs the query
Change the date range
Export again
Say it in one sentence
Ask a follow-up
Open a new spreadsheet
Ask again in the same chat
Data freshness
Whatever the file contained
Live account data
Three Tools, Read Only
Tool
What it returns
When Claude calls it
list_accessible_customers
The customer IDs the signed-in user can reach directly
First, to find the right account
search
Results of a Google Ads Query Language (GAQL) request: metrics, budgets, status
Every real question about performance
get_resource_metadata
The structure and available fields of a resource type
Before writing a query with unfamiliar fields
In practice you never write the query yourself. You say "which campaigns spent the most last week," Claude checks which fields exist, builds the GAQL, runs it through search, and summarizes the rows. You can still read the query it ran, which is how you catch mistakes.
What It Cannot Do
Google's documentation is blunt: the implementation "cannot modify bids, pause campaigns, or create new assets." That rules out:
Changing budgets or bids
Pausing or enabling campaigns
Creating or editing ads
Uploading new creative
💡 Read-only is a feature. A wrong answer from the model costs you a bad afternoon, not a drained budget, because it has no way to push a change to the account.
Before You Connect Anything
Three things have to be in place before the config file matters: a Google Cloud project with the right access level, working credentials, and the local tooling to run the server. Skipping any of them produces errors that look unrelated to the real cause.
Cloud Project and Access Level
Your Google Cloud project ID goes into the config as GOOGLE_PROJECT_ID. Open the Google Ads API overview page in the Cloud console and confirm the project sits on one of the three access levels listed there: the entry level, Basic, or Standard. If it has none of them, apply for one. Access levels are now tied to the Cloud project, which is exactly why developer tokens stopped being necessary.
Developer Tokens Are Gone
Google's docs state that developer tokens (GOOGLE_ADS_DEVELOPER_TOKEN) were sunset on September 9, 2026 and are no longer required in the latest version of the server. The GitHub README still lists that variable as optional, so if you pin an older release you might still need to set it. On the current version, leave it out.
💡 Check the date on any tutorial. If it tells you to apply for a developer token and wait for approval, it describes the old flow.
OAuth Credentials or ADC
You need one of two things: an OAuth 2.0 client ID and secret pair created in the same project, or a set of Application Default Credentials (ADC). The required scope is https://www.googleapis.com/auth/adwords. ADC through the gcloud CLI is the shortest path for a single user, and it is what the commands below use.
Have these ready before you continue:
pipx installed, the Python tool that runs the server straight from GitHub
The gcloud CLI installed and signed in
A Google user who has access to the Google Ads account
Your Cloud project ID
Connecting Claude Step by Step
Sign In with gcloud
Run the login command with both scopes the server needs, pointing at the OAuth client file you downloaded:
A browser window opens, you approve the scopes, and gcloud writes a credentials JSON file. Note where it lands, because that path becomes GOOGLE_APPLICATION_CREDENTIALS. Teams that prefer service accounts can swap in --impersonate-service-account=SERVICE_ACCOUNT_EMAIL with the same scopes.
Add It to Claude Desktop
Open the Claude Desktop config file: ~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows. Add the server:
Quit Claude Desktop fully and reopen it. The first launch downloads the server through pipx, so expect a short pause. For repeatable setups, the README suggests pinning a published version with pipx run --spec "google-ads-mcp==X.Y.Z" google-ads-mcp instead of following the latest repository state.
Claude Code in One Command
Claude Code can register the same server from the terminal:
claude mcp add google-ads-mcp \
--env GOOGLE_PROJECT_ID=your-project-id \
--env GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json \
-- pipx run --spec git+https://github.com/googleads/google-ads-mcp.git google-ads-mcp
Run /mcp inside Claude Code afterward and confirm google-ads-mcp shows as connected.
Test with One Question
Ask the sample prompt from Google's docs: "What customers do I have access to?" Claude should call list_accessible_customers and return account IDs and names. If something breaks, this table lists the usual suspects:
Symptom
Likely cause
Fix
No tools appear
Invalid JSON or Claude not restarted
Validate the JSON, quit Claude fully, reopen
Permission or access error
Project has no API access level yet
Check the Google Ads API overview page
Empty account list
Credentials belong to a user without account access
Rerun the gcloud login with the right user
Errors on client accounts
Missing manager account ID
Set GOOGLE_ADS_LOGIN_CUSTOMER_ID
These are the most likely causes, not an official error catalog, so read the actual message Claude shows before changing anything.
Questions Worth Asking First
Start by finding your accounts. "What customers do I have access to?" gives you the 10-digit customer IDs, written without dashes, that every later query needs. Tell Claude which ID you are working in once, and it will reuse it for the rest of the chat. Then move to questions that save real time. The queries below show what Claude tends to build behind the scenes, so you can sanity check it.
Weekly Performance Pulls
Google's second sample prompt is "How is my campaign performance this week?" A reasonable query behind it looks like this:
SELECT
campaign.name,
metrics.cost_micros,
metrics.clicks,
metrics.conversions
FROM campaign
WHERE segments.date DURING LAST_7_DAYS
ORDER BY metrics.cost_micros DESC
LIMIT 10
Look at cost_micros. Google Ads stores money in micros, so 12,500,000 means 12.50 in the account's currency. A model that forgets to divide will report spend a million times too high, so tell it to convert and to name the currency.
Wasted Spend Hunts
The most useful first project is a search terms review. This query finds terms that spent more than 5 units of currency in 30 days and never converted:
SELECT
search_term_view.search_term,
campaign.name,
metrics.clicks,
metrics.cost_micros,
metrics.conversions
FROM search_term_view
WHERE segments.date DURING LAST_30_DAYS
AND metrics.conversions = 0
AND metrics.cost_micros > 5000000
ORDER BY metrics.cost_micros DESC
LIMIT 25
Hand the rows back to Claude and ask it to group them into themes: job seekers, free-seekers, wrong product, wrong location. Those themes become your negative term list, which you then add in the Google Ads interface yourself, because the server cannot write.
A few more prompts worth keeping in a note:
Goal
Prompt to type
Likely resource
Spend check
"Which five campaigns spent the most this month?"
campaign
Efficiency
"Rank campaigns by cost per conversion over 30 days"
campaign
Pacing
"Which campaigns are limited by budget?"
campaign, campaign_budget
Ad quality
"List ads with the lowest click-through rate"
ad_group_ad
💡 State the date range and currency every time. Vague prompts are where silent errors start. "Last 30 days, in euros" beats "recently." Then spot-check one number against the Google Ads interface before you trust the rest.
Safety, Data, and Limits
Your Data Reaches the Model
The README warns that the server "will expose your data to the Agent or LLM that you connect to it." It also notes that an extra header is added to your API calls, which Google uses to improve the product. Before you connect an agency account that holds client data, check your contract and your client's policy. Treat the connection like emailing a report: anything a query returns goes to the model.
One cheap safeguard: sign in with a Google user whose access to the account is limited to what the work needs. The server acts with the credentials of the user who authenticated, so that user's permissions apply on top of the server's own read-only design.
Manager Accounts and Hosting
If you reach a customer account through a manager (MCC) account, set GOOGLE_ADS_LOGIN_CUSTOMER_ID to the manager's customer ID in the env block. Google marks it as required for that situation.
The local setup above uses stdio and suits one person. Google also documents a Cloud Run deployment for teams. There, the server needs GOOGLE_ADS_MCP_OAUTH_CLIENT_ID, GOOGLE_ADS_MCP_OAUTH_CLIENT_SECRET, and FASTMCP_HOST=0.0.0.0, and the client config points an httpUrl at the /mcp path of your service.
Official vs Community Servers
Plenty of community-built Google Ads MCP servers exist, and some may offer write access. Check scopes and capabilities before pointing any of them at a live account.
Official server
Community servers
Publisher
Google, in the googleads GitHub organization
Individual developers
Write access
None, strictly read-only
Varies by project
Authentication
OAuth or ADC
Varies by project
License
Apache 2.0
Varies by project
Turn Insights Into Ad Creative
The MCP server tells you what to fix. It does not make the pictures. Once Claude has shown which search themes convert, you still need fresh visuals and copy for them, and that is where PicassoIA fits. Nothing here connects PicassoIA to your ad account, so you carry the findings across yourself.
Suppose the data shows "waterproof hiking boots" converting at a fraction of the cost of "cheap boots." Ask Claude for three visual angles for the winning theme: a muddy trail close-up, a rainy-day lifestyle shot, and a boot on a doorstep. Then generate each one. Match the aspect ratio to the placement: 1:1 for feeds, 16:9 for wide banners, 9:16 for vertical video.
A prompt that works well for this kind of ad concept names the subject, the setting, the light, and the lens, and says plainly what to avoid:
Close-up of muddy waterproof hiking boots on a wet forest trail at dawn, soft side light, shallow depth of field, 50mm lens, photorealistic, no text, no logos.
Generate two or three versions, keep the one that matches the angle your data favors, and drop the rest. Keep the style natural: a believable photo of a real moment suits a hiking boot ad better than a glossy render.
Claude Sonnet 5 on PicassoIA is the writing desk in this workflow. It does not run the Google Ads MCP server. You paste in what your MCP session returned, and it drafts the ad copy. The steps:
Fill the System Prompt once: "You write Google responsive search ads. Headlines stay under 30 characters, descriptions under 90. Plain language, no hype, no claims we cannot prove."
Paste your data into Prompt: the top converting search terms, your current headlines, and the offer.
Pick the Effort level. The default, low, turns thinking off and answers fastest, which suits copy variants. Use high or max when you want a restructuring plan for a messy account.
Keep Max Tokens at 8,192 unless you want shorter output.
Optionally attach an Image, such as a screenshot of a performance chart. The model reads it as context.
Review the draft, edit it, and paste the copy into Google Ads yourself.
Parameter
Default
Tip
Prompt
Required
Include the data, the goal, and the date range
System Prompt
Empty
Fix the role and character limits once
Effort
low
Raise it only for planning tasks
Max Tokens
8192
Plenty for 15 headlines and 4 descriptions
Image
None
A chart screenshot adds context
Max Image Resolution
0.5 megapixels
Lower values save time and cost
Responsive search ads accept up to 15 headlines and 4 descriptions, so one run fills a full ad. Want a second opinion? Run the same prompt through Gemini 3.5 Flash or Claude Opus 4.7 and compare the drafts side by side.
Make Your Own Ad Visuals Today
Data says what to test. Visuals decide whether anyone stops scrolling. Open PicassoIA Image, paste a prompt for your best converting theme, choose 1:1 or 16:9, and generate as many variations as you like, since the model has no per-image cap. Lock a seed when one composition works, then change only the wording to test small differences.
PicassoIA also runs an MCP connection of its own, so the same Claude that reads your Google Ads data can ask for images and videos in one conversation. See the PicassoIA API page for details and check which plan includes access.
Try this tonight: connect the Google Ads MCP server, run the wasted spend query, pick the single best converting theme, and generate five visual variations on Picasso IA before you write anything else. Next week, run the weekly performance query again and see which version earned the clicks.