Google Ads MCP Server
A comprehensive Google Ads MCP server providing ~47 tools for full read/write access to Google Ads accounts, including campaign management, ad creation, keyword management, and reporting.
README
Google Ads MCP Server
A comprehensive Google Ads MCP server providing ~47 tools for full read/write access to Google Ads accounts. Built for Claude Desktop, Claude Code, and other MCP-compatible clients.
Features
- Accounts — list accessible accounts, get account info, MCC hierarchy
- Campaigns — full CRUD for Search, Display, Video, Demand Gen campaigns
- Ad Groups — create, update, list, and manage ad groups
- Ads — RSA, Responsive Display, Video, and Demand Gen ad creation
- Keywords — add, remove, update bids, get performance
- Performance Max — complete PMax support: asset groups, assets, audience signals
- Budgets — create, update, list, and check utilization
- Reporting — flexible GAQL queries, campaign/ad group/keyword performance
- Utilities — GAQL resource discovery, field metadata, micros conversion
Setup
Prerequisites
- Python 3.12+
- uv for dependency management
- Google Ads API credentials (developer token, GCP service account JSON key)
Installation
git clone https://github.com/bertramdev/GoogleAdsMCP.git
cd GoogleAdsMCP
uv sync
Configuration
Copy .env.example to .env and fill in your credentials:
cp .env.example .env
Required environment variables:
GOOGLE_ADS_DEVELOPER_TOKEN— your API developer tokenGOOGLE_ADS_SERVICE_ACCOUNT_PATH— path to GCP service account JSON key fileGOOGLE_ADS_LOGIN_CUSTOMER_ID— MCC customer ID (if using MCC)
Optional:
GOOGLE_ADS_IMPERSONATED_EMAIL— Workspace user email for domain-wide delegationGOOGLE_ADS_CUSTOMER_ID— default customer ID for operations
Running
uv run google-ads-mcp
Claude Desktop Configuration
Add to claude_desktop_config.json:
{
"mcpServers": {
"google-ads": {
"command": "uv",
"args": ["run", "--directory", "/path/to/GoogleAdsMCP", "google-ads-mcp"],
"env": {
"GOOGLE_ADS_DEVELOPER_TOKEN": "...",
"GOOGLE_ADS_SERVICE_ACCOUNT_PATH": "/path/to/service-account.json",
"GOOGLE_ADS_LOGIN_CUSTOMER_ID": "...",
"GOOGLE_ADS_IMPERSONATED_EMAIL": "user@yourdomain.com"
}
}
}
}
Claude Code Configuration
Add to .mcp.json in the project root:
{
"mcpServers": {
"google-ads": {
"command": "uv",
"args": ["run", "--directory", "/path/to/GoogleAdsMCP", "google-ads-mcp"],
"env": {
"GOOGLE_ADS_DEVELOPER_TOKEN": "...",
"GOOGLE_ADS_SERVICE_ACCOUNT_PATH": "/path/to/service-account.json",
"GOOGLE_ADS_LOGIN_CUSTOMER_ID": "...",
"GOOGLE_ADS_IMPERSONATED_EMAIL": "user@yourdomain.com"
}
}
}
}
Permissions
All tools include MCP tool annotations (readOnlyHint, destructiveHint, etc.) so clients can make informed permission decisions. However, Claude Code requires explicit allow rules — annotations alone don't auto-approve tools.
Within this project: The project-level .claude/settings.json auto-allows read-only tools (get_*, list_*, execute_gaql, convert_micros). Write tools require approval on each use.
From other projects: Project-level permissions don't apply. To allow all tools globally, add to ~/.claude/settings.json:
{
"permissions": {
"allow": [
"mcp__google-ads__*"
]
}
}
Or for read-only tools only:
{
"permissions": {
"allow": [
"mcp__google-ads__get_*",
"mcp__google-ads__list_*",
"mcp__google-ads__execute_gaql",
"mcp__google-ads__convert_micros"
]
}
}
Security Considerations
This MCP server cannot modify account access, user permissions, login credentials, billing, or payment methods. There are no tools for account administration — a compromised server cannot lock anyone out of their account.
Worst-case impact if credentials are compromised:
| Risk | Details |
|---|---|
| Financial | Creating campaigns/budgets or increasing keyword bids could spend money |
| Disruption | Pausing/removing campaigns, keywords, or ad groups |
| Data exposure | Reading account performance, search terms, and campaign details. execute_gaql can also read sensitive resources like customer_user_access and billing_setup (read-only — no mutations possible via GAQL) |
Removal tools (remove_campaign, remove_keyword, remove_asset_from_group) require confirm_removal=True as a server-side safety guard. The set_*_status tools execute immediately without a confirmation parameter.
Testing
uv run pytest
Tool Reference (47 tools)
Accounts (3)
list_accessible_accounts— List accounts accessible via credentialsget_account_info— Account details (name, currency, timezone)get_account_hierarchy— MCC hierarchy tree
Campaigns (6)
list_campaigns— List campaigns with optional status filterget_campaign— Single campaign detailscreate_campaign— Create Search/Display campaign with budgetupdate_campaign— Update name, bidding strategy, etc.set_campaign_status— Enable/pause/removeremove_campaign— Soft delete with confirm
Ad Groups (5)
list_ad_groups— List ad groups in campaignget_ad_group— Ad group detailscreate_ad_group— Create ad group with bidupdate_ad_group— Update name, bid, statusset_ad_group_status— Enable/pause/remove
Ads (7)
list_ads— List ads in ad groupcreate_responsive_search_ad— RSA for Search campaignscreate_responsive_display_ad— Responsive display adcreate_video_ad— Video ad for YouTubecreate_demand_gen_ad— Demand Gen adset_ad_status— Enable/pause/removeget_ad_details— Full ad details
Keywords (5)
list_keywords— List keywords in ad groupadd_keywords— Add keywords with match types (batch)remove_keyword— Remove keywordupdate_keyword_bid— Update CPC bidget_keyword_performance— Keyword metrics
Performance Max (8)
create_performance_max_campaign— Full PMax campaign creationlist_asset_groups— List asset groups in PMax campaignget_asset_group_details— Asset group details with linked assetsadd_assets_to_group— Add assets to asset groupremove_asset_from_group— Remove asset from asset groupadd_audience_signal— Add audience/search theme signalsget_asset_performance— Asset-level performance labelsget_pmax_placement_performance— Channel breakdown
Budgets (4)
list_budgets— List campaign budgetscreate_budget— Create shared budgetupdate_budget— Update budget amountget_budget_utilization— Budget vs actual spend
Reporting (6)
execute_gaql— Flexible GAQL query executionget_campaign_performance— Campaign metricsget_ad_group_performance— Ad group metricsget_search_terms_report— Search terms reportget_keyword_performance_report— Keyword metricsget_account_performance_summary— Account daily summary
Utilities (3)
list_gaql_resources— Available GAQL resourcesget_field_metadata— Field metadata for a resourceconvert_micros— Micros to currency conversion
License
Apache 2.0 — see LICENSE.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。