Google Ads MCP

Google Ads MCP

Enables reading and modifying Google Ads accounts, including campaign management, ad status changes, budget updates, and more.

Category
Visit Server

README

Google Ads MCP — with write operations

An MCP server that lets Claude (or any MCP client) read and change a Google Ads account.

This is a rebuilt fork of cohnen/mcp-google-ads. The original is query-only — it exposes 12 read tools and cannot modify anything. Google's own googleads/google-ads-mcp is read-only too: it wraps GAQL search and resource metadata, with no mutate operations at all.

So if you want an agent that actually manages campaigns — pauses ads, updates budgets, pushes negative keywords — neither of those will do it. This fork adds that layer.

What's different from upstream:

  • 16 write tools built on a shared _mutate() helper (upstream had none)
  • Google Ads API v19 → v24 (v19 and v20 are deprecated)
  • Credentials are read from .env everywhere — no hardcoded secrets, and .gitignore actually covers them (upstream's last entry was glued together by a missing newline, so it matched nothing)
  • Helper scripts: OAuth re-authorization, a standalone GAQL runner for debugging

Tools

Readrun_gaql, execute_gaql_query (arbitrary GAQL), get_campaign_performance, get_ad_performance, get_ad_creatives, get_image_assets, download_image_asset, get_asset_usage, analyze_image_assets, get_account_currency, list_accounts, list_resources

Writecreate_campaign, create_ad_group, create_rsa_ad, add_keywords, update_keyword_status, add_negative_keywords, remove_negative_keywords, create_shared_negative_set, add_to_shared_negative_set, attach_shared_set_to_campaign, update_campaign_status, update_ad_status, update_campaign_budget, update_campaign_geo_targeting, add_sitelink_extensions, add_callout_extensions

Not covered — keyword/ad-group level bids, bidding strategies, Performance Max assets, audiences, ad scheduling. Do those in the UI, or extend _mutate().

What you need

  1. Google Ads developer token — MCC account → Tools → API Center. A fresh token starts at Test level, which only sees test accounts; request Basic access to work against live accounts.
  2. OAuth client ID + secret — Google Cloud Console → create a project → enable the Google Ads API → APIs & Services → Credentials → Create OAuth client ID → type Desktop app.
  3. Refresh token — you don't get this by hand; reauth.py generates it (step 3 below).

Setup

python3 -m venv .venv && ./.venv/bin/pip install -r requirements.txt

cp .env.example .env          # fill in the developer token and OAuth pair from above

./.venv/bin/python reauth.py  # opens a browser for consent, writes client_secret.json

Then point your MCP client at it:

{
  "mcpServers": {
    "google-ads": {
      "type": "stdio",
      "command": "/absolute/path/to/.venv/bin/python",
      "args": ["/absolute/path/to/google_ads_server.py"],
      "env": { "GOOGLE_ADS_AUTH_TYPE": "oauth" }
    }
  }
}

Everything else is picked up from .env — the server loads it via python-dotenv.

Helper scripts

File Purpose
reauth.py get or refresh the OAuth refresh token when it expires
gaql_rest.py run a GAQL query straight over REST, bypassing MCP — handy for debugging
pause_ads.py example: bulk-pause ads by ID
gaql-google-ads-query-language.mdc GAQL syntax cheatsheet

Secrets

They live in .env and client_secret.json only. Both are gitignored — don't commit them. If you add your own scripts, pull values with os.getenv(); never inline them.

License

MIT, inherited from cohnen/mcp-google-ads (Copyright © 2025 Ernesto Cohnen — ixigo). See LICENSE. Modifications © 2026 Vlad Petruk.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
E2B

E2B

Using MCP to run code via e2b.

Official
Featured