Google Ads MCP
Provides read-only access to Google Ads accounts, enabling account inspection, customer hierarchy lookup, campaign and inventory queries, report retrieval, change event history, and safe GAQL search and validation.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Google Ads MCPshow me campaign performance for the last 7 days"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Google Ads MCP
Google Ads MCP is a local, security-first, read-only MCP server and Codex plugin for inspecting Google Ads accounts. Version 0.1.0 exposes bounded inventory, reporting, metadata, change-history, and safe GAQL tools. It contains no write, upload, scheduling, delete, optimizer, or hosted transport capability.
The public Python distribution is named google-ads-operator-mcp. The product and command remain Google Ads MCP and google-ads-mcp.
Security boundary
Every account-scoped request names both a profile and a customer ID.
Google credentials remain in Application Default Credentials or an explicit owner-only
google-ads.yamloutside the repository.accounts.jsonmay contain only an environment-variable name for the developer token, never the token itself.allowWritesmust befalse; any other value is rejected.Only
GoogleAdsService,CustomerService, andGoogleAdsFieldServiceare constructed by the production adapter.A tool receives normalized rows, never a Google client or raw response envelope.
MCP mode reserves stdout for JSON-RPC. Diagnostics and sanitized failure codes go to stderr.
Read SECURITY.md, PRIVACY.md, and the threat model before connecting a production account.
Related MCP server: appstoreconnect-codex-mcp
Requirements
Python 3.11, 3.12, or 3.13
Google Ads API access with a developer token
ADC, or a separately stored owner-only
google-ads.yaml
Use Google's official guidance for the developer token, Python client configuration, and Application Default Credentials.
Local setup
uv sync --frozen --all-groups
uv run --frozen google-ads-mcp version
uv run --frozen google-ads-mcp config initAfter the public release, the standalone CLI can also be installed with uv tool install google-ads-operator-mcp==0.1.0. Use the release plugin archive, not a source-tree copy, for the final clean-plugin acceptance gate.
Edit ~/.config/google-ads-mcp/accounts.json, replace the public account IDs, then restore owner-only permissions:
Expose GOOGLE_ADS_DEVELOPER_TOKEN from your local secret manager without putting its value in the repository or shell history, then run:
chmod 600 ~/.config/google-ads-mcp/accounts.json
gcloud auth application-default login
uv run --frozen google-ads-mcp config validate
uv run --frozen google-ads-mcp auth doctor --profile production-read-onlyDo not paste the developer token, OAuth refresh token, client secret, ADC JSON, or YAML contents into this repository, an issue, terminal transcript, or chat.
Configuration
Config precedence is --config, then GOOGLE_ADS_MCP_CONFIG, then ~/.config/google-ads-mcp/accounts.json.
{
"profiles": [
{
"name": "production-read-only",
"loginCustomerId": "1234567890",
"defaultCustomerId": "0987654321",
"auth": {
"type": "adc",
"developerTokenEnv": "GOOGLE_ADS_DEVELOPER_TOKEN"
},
"allowWrites": false
}
]
}For an existing Google client YAML, use {"type":"googleAdsYaml","path":"/absolute/owner-only/google-ads.yaml"}. Relative paths and symbolic links are rejected. The server never searches the working directory or repository for YAML credentials.
CLI
google-ads-mcp version
google-ads-mcp config init
google-ads-mcp config validate
google-ads-mcp auth doctor --profile <name>
google-ads-mcp accounts discover --profile <name>
google-ads-mcp serve --stdioMCP tools
The fixed v0.1 surface is:
auth_check customers_list
customer_get customer_hierarchy
account_health campaigns_query
campaign_inventory resource_metadata
reports_catalog report_run
change_events_query gaql_validate
gaql_searchTyped lists return at most 200 items per page. A single Google read is capped at 1,000 normalized rows. Five-minute cursors are bound to the profile and exact request, with at most 20 active cursors per profile. Safe GAQL has no cursor and requires a single comment-free SELECT, a non-sensitive resource, and LIMIT 1..1000.
See docs/tools.md for parameters, evidence semantics, and report behavior.
Codex plugin
The repository root is the plugin root. .mcp.json calls ./bin/google-ads-mcp-launcher, which only executes the frozen uv environment over stdio. The implicit google-ads-operator skill treats all account strings as untrusted data and never proposes unavailable mutation tools.
The repository intentionally does not create or modify a personal marketplace entry. Release-archive installation is validated separately during acceptance.
Verification
uv run --frozen ruff check .
uv run --frozen pyright
uv run --frozen pytest
uv run --frozen python scripts/validate_read_only.py
uv run --frozen python scripts/validate_gaql_templates.py
uv run --frozen python ~/.codex/skills/.system/plugin-creator/scripts/validate_plugin.py .
uv run --frozen python ~/.codex/skills/.system/skill-creator/scripts/quick_validate.py skills/google-ads-operatorAutomated verification is not live-account acceptance. The test-account and production-read-only gates in docs/acceptance.md remain required before v0.1.0.
License
Apache-2.0. Google Ads is a trademark of Google LLC. This project is independent and is not endorsed by Google.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables read-only access to SentinelOne's platform through MCP, allowing security investigations, threat hunting, and asset inventory queries via natural language.MIT
- AlicenseNot gradedqualityCmaintenanceEnables read-only interaction with App Store Connect via MCP tools, including listing apps, versions, builds, and review submissions, with compliance boundaries and no write operations by default.MIT
- AlicenseBqualityCmaintenanceRead-only MCP server for Google Ads, enabling querying campaigns, ad groups, ads, insights, and keywords without create/update/delete operations.9MIT
- AlicenseNot gradedqualityCmaintenanceProvides read-only access to Google Ads account data including campaigns, ad groups, keywords, and performance reports. Enables querying via GAQL through an MCP interface.MIT
Related MCP Connectors
Read-only MCP access to sessions, funnels, campaigns, errors, live visitors, and anomalies.
Read-only access to your VortexIQ store data: audits, KPIs, alerts, Brand DNA, reports, Ask VIQ.
Read-only Frasma MCP: profile, knowledge search, diagnostic handoff. No email.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/zelentsov-dev/google-ads-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server