list_accountsLABSCO SUMMARY
It writes as well as reads, which is the part to think about.
Creating campaigns, changing budgets and pausing live ads are all in scope, so the credential you hand it is a credential that can spend money — the project's own security notes say to use service accounts in production and rotate refresh tokens. The error handling is the standout: a failure comes back with a retryable flag and a link to Google's documentation for that specific code, which is far more actionable than the raw API's response.
What it is
An MCP server over the Google Ads API v20 that covers the operational surface rather than reporting alone: accounts and hierarchy, campaigns, ad groups, ads, assets, shared budgets, keywords and negatives, plus custom GAQL queries. It handles the parts of the API that usually cost you a day — retrying transient errors with exponential backoff, refreshing OAuth tokens automatically, and continuing through a partial failure instead of aborting the batch.
What you get
- Accounts listed with their hierarchy —
list_accounts - Campaigns created, updated, paused and resumed, with the budget amount and campaign type set on creation —
create_campaign - Performance read over a named date range —
get_campaign_performance - Arbitrary GAQL executed, which is how you get the report the typed tools do not cover —
run_gaql_query - Negative keywords added, including campaign-level negatives for Performance Max, which is a v20 addition —
add_negative_keywords - Ad group CRUD, responsive search and expanded text ads, image and text asset management, and shared budgets
- Errors returned with the type and code, whether the failure is retryable, a link to Google's own documentation for it, and a suggested fix
Requirements
A Google Ads developer token in GOOGLE_ADS_DEVELOPER_TOKEN — required for every auth method — plus either the OAuth2 trio GOOGLE_ADS_CLIENT_ID, GOOGLE_ADS_CLIENT_SECRET and GOOGLE_ADS_REFRESH_TOKEN, or a service account via GOOGLE_ADS_SERVICE_ACCOUNT_PATH with an optional GOOGLE_ADS_IMPERSONATED_EMAIL. Set GOOGLE_ADS_LOGIN_CUSTOMER_ID when you work through a manager account. Configuration can live in the environment or in ~/.config/google-ads-mcp/config.json instead. Python 3.10 or newer: clone the repository, run pip install -e ., and point your client at the repository's run_server.py; LOG_LEVEL=DEBUG for detailed logs.
Setup effort
Build from source — git clone https://github.com/DigitalRocket-biz/google-ads-mcp-v20.git
USE CASES
Getting a report the UI will not give you
Write the GAQL query directly — metrics, segments, filters — instead of exporting and pivoting a spreadsheet.
Checking how a campaign has been doing
Ask for its performance over a named date range and read the numbers back without opening the console.
Cutting wasted spend on a Performance Max campaign
Add campaign-level negative keywords, which v20 made possible, rather than working around the old limitation.
Standing up a new campaign from a brief
Create it with the budget and type set, then add ad groups and ads in the same session.
Diagnosing a failed operation
Read the returned error's code, retryable flag and documentation link instead of searching for what the API meant.
5 tools
Listed in project docs. Your client may show a different list.
create_campaignget_campaign_performancerun_gaql_queryadd_negative_keywordsBEFORE YOU INSTALL
What to know first
Tools you get
5 tools named in the project's documentation.
Requires
- python on PATH
- GOOGLE_ADS_CLIENT_ID in your environment
- GOOGLE_ADS_CLIENT_SECRET in your environment
- GOOGLE_ADS_REFRESH_TOKEN in your environment
- GOOGLE_ADS_DEVELOPER_TOKEN in your environment
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
You clone this one yourself.
Server setup
git clone https://github.com/DigitalRocket-biz/google-ads-mcp-v20.git
cd google-ads-mcp-v20
pip install -e .MCP Clients
Claude Desktop
{
"mcpServers": {
"google-ads": {
"command": "python",
"args": [
"<YOUR_PATH_TO_GOOGLE_ADS_MCP_V20>/run_server.py"
],
"env": {
"GOOGLE_ADS_DEVELOPER_TOKEN": "<YOUR_GOOGLE_ADS_DEVELOPER_TOKEN>",
"GOOGLE_ADS_CLIENT_ID": "<YOUR_GOOGLE_ADS_CLIENT_ID>",
"GOOGLE_ADS_CLIENT_SECRET": "<YOUR_GOOGLE_ADS_CLIENT_SECRET>",
"GOOGLE_ADS_REFRESH_TOKEN": "<YOUR_GOOGLE_ADS_REFRESH_TOKEN>"
}
}
}
}<YOUR_PATH_TO_GOOGLE_ADS_MCP_V20> is the full path of your clone. The README's python -m google-ads-mcp names a module the repository does not contain; run_server.py is the repository's own launcher. Use the same python you ran pip install with, and put your developer token and OAuth2 values in env.