AI & LLMs
How to Connect Claude to Google Ads with MCP
You can connect Claude to your Google Ads account with Google’s official MCP server, google-ads-mcp. It runs on your computer, uses the Google Ads API, and lets Claude answer questions about your campaigns. It is read-only: Claude can report on your account but can’t change it.
Key facts (as of October 2026)
- The official server is strictly read-only. It can’t modify bids, pause campaigns, or create assets (Google Ads API: MCP server).
- Developer tokens were sunset on September 9, 2026. API access levels now belong to the Google Cloud project you use for OAuth (Google Ads API: Developer token).
- Your Cloud project needs Explorer, Basic, or Standard access to query real accounts. Explorer allows 2,880 operations per day on production accounts (Google Ads API: Access levels).
- The server exposes your account data to whichever AI model you connect it to (googleads/google-ads-mcp on GitHub).
What does the Google Ads MCP server do?
MCP (Model Context Protocol) is a standard way for AI apps to call outside tools. The Google Ads MCP server is published by Google Ads Developer Relations on GitHub and on PyPI as google-ads-mcp (PyPI).
It gives Claude three tools (Google Ads API: MCP server):
| Tool | What it does |
|---|---|
list_accessible_customers | Lists the customer IDs and account names your login can access |
search | Runs GAQL (Google Ads Query Language) queries for metrics, budgets, and status |
get_resource_metadata | Describes a resource type, such as campaign, and the fields you can query |
You don’t need to know GAQL. Claude writes the queries for you. The server also gives Claude reference resources, such as the API’s lists of metrics and segments and the latest release notes (GitHub README).
Because it is read-only, this is a reporting assistant. If you want Claude to pause a campaign or change a bid, this server can’t do it.
What do you need before you start?
Google’s documentation lists these prerequisites (Google Ads API: MCP server):
- A Google Cloud project. You will need its project ID.
- The Google Ads API enabled in that project.
- An API access level of Explorer, Basic, or Standard on the project.
- Credentials: an OAuth 2.0 client ID and secret, or Application Default Credentials (ADC). A service account also works.
- Python tooling to run the server. Google’s docs use
pipx. Many people useuvxinstead (see Step 4). - Claude Desktop, which runs local MCP servers on macOS and Windows (Model Context Protocol docs).
Do you still need a developer token?
No, not with the current version. Google’s developer token page says: “Developer tokens were sunset on September 9, 2026.” You can still send one in API headers, but it is “optional and ignored by the API servers” (Google Ads API: Developer token).
The MCP server page confirms tokens “are no longer required in the latest version of the Google Ads MCP server because API access levels are associated with the Google Cloud project” (Google Ads API: MCP server).
You may still see GOOGLE_ADS_DEVELOPER_TOKEN in the GitHub README’s config examples. The README now marks that step “(Optional)”. Follow Google’s developer docs and leave the token out.
Step 1: Set up the Google Cloud project
- Open the Google Cloud console and create a project, or pick an existing one. Note the project ID.
- Enable the Google Ads API for that project.
- Check the project’s access level.
There are four access levels (Google Ads API: Access levels):
| Access level | Accounts | Daily operations | How you get it |
|---|---|---|---|
| Test | Test accounts only | 15,000 | Automatic when you enable the API |
| Explorer | Test and production | 2,880 (production), 15,000 (test) | Apply in the Cloud console’s upgrade section |
| Basic | Test and production | 15,000 | Apply after completing brand verification |
| Standard | Test and production | Unlimited | Detailed manual review, typically 10 business days |
Test access can’t read your real account. For a small business asking Claude a handful of questions a day, Explorer is usually where you start. The server calls the Google Ads API, so your project’s daily limit applies to what Claude does.
Step 2: Create credentials
The README describes three ways to authenticate (GitHub README):
- Application Default Credentials (ADC). The simplest option for one person on one computer.
- A FastMCP OAuth proxy. For running the server as a web service, for example on Cloud Run.
- An existing
google-ads.yamlfrom the Google Ads Python client library.
For ADC, you need an OAuth client ID file from your Cloud project and the Google Cloud CLI (gcloud). The README’s command requests the Google Ads scope:
gcloud auth application-default login \
--scopes https://www.googleapis.com/auth/adwords,https://www.googleapis.com/auth/cloud-platform \
--client-id-file=YOUR_CLIENT_JSON_FILE
A browser window opens. Sign in with the Google account that has access to your Google Ads account. When it finishes, the command prints the path of the credentials file it saved. Copy that path. You need it in Step 4.
The README also shows a service-account version that uses --impersonate-service-account=SERVICE_ACCOUNT_EMAIL with the same scopes.
Since the sunset, the Cloud project that owns your OAuth client (or your service account) decides your access level (Google Ads API: Developer token). Use the same project from Step 1.
Step 3: Check that the server runs
Before you touch Claude, run the server once in a terminal. Google’s documented command uses pipx (Google Ads API: MCP server):
pipx run --spec git+https://github.com/googleads/google-ads-mcp.git google-ads-mcp
That runs the latest code from GitHub. To run a fixed release from PyPI instead, the README gives pipx run --spec "google-ads-mcp==X.Y.Z" google-ads-mcp.
If you use uv, uvx does the same job. The uv docs say uvx “invokes a tool without installing it” in a temporary, isolated environment (uv docs: Tools):
uvx google-ads-mcp
Google doesn’t document uvx for this server, but the package is on PyPI under the same name, so this works the same way as the pipx command. If the server starts and waits for input, it works. Stop it with Ctrl+C.
Step 4: Add the server to Claude Desktop
- In Claude Desktop, open Settings from the Claude menu (not your account settings inside the chat window).
- Go to the Developer tab and click Edit Config.
- This opens
claude_desktop_config.json. On macOS it lives at~/Library/Application Support/Claude/claude_desktop_config.json. On Windows it lives at%APPDATA%\Claude\claude_desktop_config.json(Model Context Protocol docs).
Add the server under mcpServers. With uvx:
{
"mcpServers": {
"google-ads-mcp": {
"command": "uvx",
"args": ["google-ads-mcp"],
"env": {
"GOOGLE_PROJECT_ID": "YOUR_PROJECT_ID",
"GOOGLE_APPLICATION_CREDENTIALS": "/path/to/credentials.json"
}
}
}
}
With pipx, as in Google’s docs:
{
"mcpServers": {
"google-ads-mcp": {
"command": "pipx",
"args": [
"run",
"--spec",
"git+https://github.com/googleads/google-ads-mcp.git",
"google-ads-mcp"
],
"env": {
"GOOGLE_PROJECT_ID": "YOUR_PROJECT_ID",
"GOOGLE_APPLICATION_CREDENTIALS": "/path/to/credentials.json"
}
}
}
}
Replace the placeholders:
YOUR_PROJECT_ID: your Cloud project ID from Step 1./path/to/credentials.json: the full path printed in Step 2. On Windows, escape backslashes in JSON, for exampleC:\\Users\\you\\....
If you reach client accounts through a manager account, add "GOOGLE_ADS_LOGIN_CUSTOMER_ID": "YOUR_MANAGER_CUSTOMER_ID" to env. Claude can also pass a login_customer_id per request, and that value wins over the default (GitHub README).
- Save the file, then quit Claude Desktop completely and open it again. Claude Desktop only reads the config at startup.
- In a new chat, click the “Add files, connectors, and more” button at the bottom left of the message box, go to Connectors, then Manage connectors. You should see
google-ads-mcpand its tools (Model Context Protocol docs).
What can you ask Claude?
Start with the sample prompts from Google’s README (GitHub README):
- “What can the ads-mcp server do?”
- “What customers do I have access to?”
- “How many active campaigns do I have?”
- “How is my campaign performance this week?”
- “How many active campaigns do I have for customer id 1234567890?”
Then move to questions you would normally answer by building a report:
- “List my Search campaigns with spend, clicks, and conversions for the last 30 days, sorted by spend.”
- “Which ad groups had clicks but no conversions last month?”
- “Show the daily budget and status of every enabled campaign.”
Claude asks for permission before it calls a tool. Read what it plans to run before you approve. For important numbers, check them against the Google Ads interface the first few times, using the same date range.
What can go wrong?
| Problem | Likely cause | Fix |
|---|---|---|
| Server doesn’t appear in Claude | JSON syntax error, or Claude wasn’t fully restarted | Validate the JSON, quit Claude Desktop fully, reopen |
uvx or pipx “not found” | Claude Desktop can’t see the program on its path | Use the full path to the executable in command |
| Authentication errors | Wrong credentials path, or the login lacks the adwords scope | Rerun the gcloud command in Step 2 and update the path |
| Access level errors on real accounts | The project only has Test access | Apply for Explorer access in the Cloud console |
| Daily limit reached | Explorer’s 2,880 production operations per day | Ask fewer, broader questions or apply for Basic |
| Empty results for a client account | Access goes through a manager account | Set GOOGLE_ADS_LOGIN_CUSTOMER_ID |
Claude Desktop writes MCP logs to ~/Library/Logs/Claude on macOS and %APPDATA%\Claude\logs on Windows. Files named mcp-server-SERVERNAME.log contain the server’s own output (Model Context Protocol docs).
Claude can also write a GAQL query that the API rejects. When that happens, ask it to check the fields with get_resource_metadata and try again.
How do you use it safely?
- Know what the AI sees. Google’s README warns: “The MCP Server will expose your data to the Agent or LLM that you connect to it.” Only connect accounts you are allowed to share with your AI provider.
- Protect the credentials file. It grants access to your Google Ads data. Keep it out of shared folders and code repositories, and never paste its contents into a chat.
- Use a dedicated Cloud project. That keeps the quota and access level separate from other API work.
- Expect a usage header. The README notes that the server adds a header to API calls so Google can collect usage data.
- Don’t treat answers as audited reports. Use Claude to find questions worth asking, then confirm the numbers in Google Ads before you act.
Next steps
- Cloud project created and project ID noted
- Google Ads API enabled, access level is Explorer or higher
- ADC credentials created with the
adwordsscope - Server starts with
uvx google-ads-mcpor the pipx command -
claude_desktop_config.jsonupdated with placeholders replaced - Claude Desktop restarted and the tools are listed
- First answers checked against the Google Ads interface
If you also want Claude to work on your website, see How to Connect WordPress to an AI Agent with MCP. Before you use Claude’s answers to change campaigns, run through the Google Ads Search Campaign Setup Checklist.
Related articles
AI & LLMs
How to Connect Claude to Google Analytics 4 with MCP
Set up Google's official Analytics MCP server for Claude: enable two APIs, create read-only credentials, add a Claude Desktop config, ask GA4 questions.
AI & LLMs
How to Connect Claude to Google Search Console with MCP
There's no official Google MCP server for Search Console. Here's how to vet a community server, set up mcp-gsc in Claude Desktop, and keep it safe.
AI & LLMs
How to Connect Claude to Meta Ads with MCP
Connect Claude to Meta's official ads MCP server as a custom connector, sign in with Facebook, ask for reports, and keep write actions under control.