Google Ads自然语言管理服务器

一个基于模型上下文协议(MCP)的Google Ads API集成服务器,支持通过自然语言对话分析、管理和优化Google Ads广告系列。

  • by johnoconnor0
  • Python
  • 本地部署
  • 5 星标
  • 更新于
在 GitHub 查看 johnoconnor0/google-ads-mcp

使用说明

谷歌广告MCP服务器

用于Google Ads API集成的全面模型上下文协议(MCP)服务器,使Claude、ChatGPT和Gemini等人工智能助手能够通过自然语言对话分析、管理和优化Google广告活动。

目录

概述

Google Ads MCP服务器通过提供由模型上下文协议支持的自然语言界面,改变了您与Google Ads的交互方式。您可以通过与人工智能助手的简单对话来分析活动、优化关键词和管理预算,而不是浏览复杂的仪表板或编写自定义的API代码。

什么是MCP?

模型上下文协议(MCP)是一个开放标准,使AI助手能够安全地与外部数据源和工具连接。该服务器实现MCP,将人工智能助手与谷歌广告API连接起来。

主要优势:

  • 自然语言界面:用简单的英语提问和下达命令
  • 多平台支持:可与Claude Desktop、ChatGPT、Gemini和其他兼容MCP的AI助手配合使用
  • 全面覆盖:从基本报告到高级活动管理
  • 安全:OAuth 2.0身份验证与最佳实践凭据管理
  • 可扩展:模块化架构支持14个功能领域的161个计划工具

特性

当前功能(v1)

当前的稳定版本(v1)为Google Ads分析和管理提供了10个基本工具:

分析和报告

  • 列出所有可访问的Google Ads帐户
  • 使用过滤和日期范围进行活动绩效分析
  • 关键词绩效跟踪(质量分数、职位、转化率)
  • 搜索词发现(实际查询触发广告)
  • 广告组性能指标
  • 谷歌的人工智能优化建议

活动管理

  • 更新活动每日预算
  • 暂停或启用活动
  • 执行自定义GAQL查询以进行高级分析

路线图(v2)

v2路线图将服务器扩展到14个功能域的161个工具,覆盖了约85%的Google Ads API表面区域,用于活动管理和优化。

计划能力:

域 工具 描述
活动管理 23 创建、更新、删除活动(共9种类型)
广告与创意管理 18 响应式搜索广告、显示、视频、最高性能
关键字管理 15 批量操作、否定关键字、匹配类型
投标与优化 12 投资组合策略、出价调整、自动化
观众管理 14 再营销、客户匹配、定制受众
转化跟踪 11 设置、离线导入、归因
高级报告 25 地理、人口、竞争见解
批量操作 8 批量上传、批量更新、CSV导入/导出
扩展和资产 12 网站链接、标注、结构化片段
购物和PMax 10 产品推送、Performance Max活动
本地和应用程序活动 8 商店访问量、应用程序安装量、本地库存
自动化 10 自动规则、智能竞价、脚本集成
洞察与分析 8 预测、拍卖见解、变更历史
标签和组织 7 活动标签、资产组、组织

总计:161件工具 涵盖端到端的活动生命周期管理。

看 实施_计划.md 完整的路线图。

快速开始

5分钟后起床跑步:

先决条件

  • Python 3.8或更高版本
  • 带有活动广告的Google Ads帐户
  • 谷歌广告API开发者代币(在此申请)

安装

  1. 克隆仓库:

    git clone https://github.com/johnoconnor0/google-ads-mcp.git
    cd google-ads-mcp
    
  2. 安装依赖项:

    pip install -r requirements.txt
    
  3. 生成OAuth凭据 (参见 Google Ads API设置 详细信息):

    python generate_refresh_token.py
    
  4. 配置Claude桌面 (或您首选的AI助手):

    编辑 ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)或 %APPDATA%\Claude\claude_desktop_config.json (Windows):

    {
      "mcpServers": {
        "google-ads": {
          "command": "python",
          "args": ["/absolute/path/to/google_ads_mcp.py"],
          "env": {}
        }
      }
    }
    
  5. 重新启动克劳德桌面 并开始询问有关您的Google Ads帐户的问题!

第一步

配置后,在Claude Desktop中尝试以下命令:

"Initialize my Google Ads connection with these credentials..."
"Show me all my Google Ads accounts"
"Analyze campaign performance for the last 30 days"
"Which keywords have the lowest quality scores?"

看 使用示例 更多。

设置和安装

先决条件

必需

  • python:3.8或更高版本

    python --version  # Should output 3.8 or higher
    
  • Google广告帐户:活动帐户

  • Google Ads API访问:开发者代币(可能需要24-48小时才能获得批准)

  • OAuth 2.0凭据:来自Google Cloud控制台的客户端ID和客户端密码

可选的

  • MCC账户:用于管理多个客户帐户
  • 瑞迪斯:用于分布式缓存(可选,默认为内存缓存)

Google Ads API设置

第一步:申请开发者代币

  1. 登录您的Google Ads帐户
  2. 导航至 工具和设置 → 设置 → API中心
  3. 申请开发者代币
  4. 等待批准(通常24-48小时)
  5. 重要:测试开发人员令牌可以立即工作,但有局限性

资源: 谷歌广告API开发者代币指南

步骤2:创建OAuth 2.0凭据

  1. 首选 谷歌云控制台
  2. 创建新项目(或选择现有项目)
  3. 启用 谷歌广告API:
    • 导航→ API和服务 → 图书馆
    • 搜索“Google Ads API”
    • 点击“启用”
  4. 创建OAuth凭据:
    • API和服务 → 凭证
    • 点击 创建凭据 → OAuth客户端ID
    • 选择 桌面应用程序 作为应用程序类型
    • 命名您的OAuth客户端(例如,“谷歌广告MCP服务器”)
    • 点击 创建
  5. 下载 您的凭据或副本:
    • 客户端ID (以结尾 .apps.googleusercontent.com)
    • 客户端密钥

资源: OAuth 2.0安装指南

步骤3:生成刷新令牌

使用提供的实用程序脚本生成刷新令牌:

python generate_refresh_token.py

这个脚本的作用是什么:

  1. 打开浏览器进行谷歌授权
  2. 您授予对您的Google Ads帐户的访问权限
  3. 生成一个 刷新令牌 (长期证书)
  4. 显示要复制的刷新令牌

替代手动方法:

from google_auth_oauthlib.flow import InstalledAppFlow

CLIENT_ID = 'your-client-id.apps.googleusercontent.com'
CLIENT_SECRET = 'your-client-secret'
SCOPES = ['https://www.googleapis.com/auth/adwords']

flow = InstalledAppFlow.from_client_config(
    {
        "installed": {
            "client_id": CLIENT_ID,
            "client_secret": CLIENT_SECRET,
            "auth_uri": "https://accounts.google.com/o/oauth2/auth",
            "token_uri": "https://oauth2.googleapis.com/token",
        }
    },
    scopes=SCOPES
)

credentials = flow.run_local_server(port=0)
print(f"Refresh Token: {credentials.refresh_token}")

重要:安全地存储刷新令牌!它提供对您的Google Ads帐户的持续访问。

服务器安装

安装Python依赖项

选项1:从requirements.txt安装 (推荐):

pip install -r requirements.txt

选项2:手动安装:

pip install google-ads>=25.0.0 mcp>=1.1.0 httpx>=0.27.0 pydantic>=2.0.0 google-auth-oauthlib>=1.0.0

可选依赖关系 (高级功能):

# Caching with Redis
pip install redis>=5.0.0

# Export and reporting
pip install openpyxl>=3.1.2 reportlab>=4.0.0 matplotlib>=3.8.0

验证安装

python -c "import google.ads.googleads, mcp, httpx, pydantic; print('All dependencies installed successfully!')"

人工智能集成

Google Ads MCP服务器可以与多个AI平台集成:

Claude桌面集成

推荐给:大多数用户,最简单的设置

  1. 查找配置文件:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • 视窗: %APPDATA%\Claude\claude_desktop_config.json
  2. 添加MCP服务器配置:

    {
      "mcpServers": {
        "google-ads": {
          "command": "python",
          "args": ["/absolute/path/to/google_ads_mcp.py"],
          "env": {}
        }
      }
    }
    

    替换 /absolute/path/to/google_ads_mcp.py 使用实际文件路径。

  3. 重新启动克劳德桌面 使更改生效

  4. 初始化连接 克劳德:

    Initialize my Google Ads connection with these credentials:
    - Developer Token: YOUR_DEV_TOKEN
    - Client ID: YOUR_CLIENT_ID.apps.googleusercontent.com
    - Client Secret: YOUR_CLIENT_SECRET
    - Refresh Token: YOUR_REFRESH_TOKEN
    - Login Customer ID: YOUR_MCC_ID (optional, only if using MCC)
    

资源:

ChatGPT集成

状态:实验性(通过第三方工具支持MCP)

截至2025年12月,ChatGPT不支持MCP。但是,可以通过以下方式进行集成:

方案1:MCP桥 (如果可用)

  • 使用MCP-to-OpenAI API桥接
  • 配置网桥以将Google Ads MCP工具作为OpenAI功能公开
  • 通过支持插件的ChatGPT Plus访问

选项2:带有API包装器的自定义GPT

  • 在MCP服务器周围创建web API包装
  • 使用对API的函数调用构建自定义GPT
  • 配置身份验证和端点

选项3:使用克劳德代码或API

  • 使用Claude Code(CLI)运行MCP服务器
  • 使用Claude API以编程方式访问MCP工具
  • 将结果集成到您的ChatGPT工作流中

备注:随着ChatGPT的MCP支持的发展,本节将更新本机集成说明。

Gemini集成

状态:实验性(通过第三方工具支持MCP)

截至2025年12月,谷歌的Gemini不支持MCP。但是,可以通过以下方式进行集成:

选项1:顶点AI函数调用

  • 将MCP服务器部署为谷歌云功能或云运行服务
  • 在Gemini中使用Vertex AI的函数调用
  • 将MCP工具映射到Gemini功能定义

选项2:LangChain集成

  • 使用LangChain在Gemini和MCP工具之间建立桥梁
  • 将MCP工具定义为LangChain工具
  • 使用MCP工具访问创建Gemini代理

选项3:自定义集成

  • 围绕MCP服务器构建REST API包装
  • 将Gemini API与函数调用一起使用
  • 将Google Ads操作映射到功能定义

资源:

其他MCP兼容平台

服务器可与任何兼容MCP的客户端配合使用。看 MCP文件 集成指南。

MCP工具参考

v1工具(10个当前工具)

当前的稳定版本提供了以下工具:


1. google_ads_initialize

描述:使用OAuth凭据初始化API连接。

参数:

{
  "developer_token": "string (required)",
  "client_id": "string (required)",
  "client_secret": "string (required)",
  "refresh_token": "string (required)",
  "login_customer_id": "string (optional)"
}

示例:

Initialize with:
- Developer Token: abc123...
- Client ID: 123456789.apps.googleusercontent.com
- Client Secret: xyz789...
- Refresh Token: 1//abc...
- Login Customer ID: 1234567890 (only for MCC accounts)

退货:带有API版本和可访问性检查的确认消息


2. google_ads_list_accounts

描述:列出所有可访问的Google Ads帐户。

参数:

{
  "response_format": "markdown | json (default: markdown)"
}

示例:

"Show me all my Google Ads accounts"
"List accounts in JSON format"

退货:包含客户ID、姓名和描述性姓名的帐户列表


3. google_ads_campaign_performance

描述:通过过滤和日期范围获取全面的活动指标。

参数:

{
  "customer_id": "string (required, 10 digits no hyphens)",
  "date_range": "TODAY | YESTERDAY | LAST_7_DAYS | LAST_30_DAYS | etc. (default: LAST_30_DAYS)",
  "campaign_status": "ENABLED | PAUSED | REMOVED (optional)",
  "min_cost": "number (optional, in account currency)",
  "limit": "number (default: 50, max: 100)",
  "response_format": "markdown | json (default: markdown)"
}

示例:

"Show campaign performance for the last 30 days for account 1234567890"
"Find campaigns with at least $100 in spend this month"
"Show only enabled campaigns for account 1234567890"

退货:活动指标,包括展示、点击、成本、转化率、点击率、CPC、转化率


4. google_ads_keyword_performance

描述:使用质量分数和位置分析关键字级别的性能。

参数:

{
  "customer_id": "string (required)",
  "campaign_id": "string (optional)",
  "date_range": "string (default: LAST_30_DAYS)",
  "min_impressions": "number (optional)",
  "limit": "number (default: 50)",
  "response_format": "markdown | json"
}

示例:

"Analyze keyword performance for campaign 12345"
"Show keywords with quality score below 5"
"Find keywords with the highest cost per conversion"

退货:关键字指标,包括质量分数、平均位置、展示次数、点击次数、成本、转化率


5. google_ads_search_terms

描述:获取触发广告的实际搜索查询。

参数:

{
  "customer_id": "string (required)",
  "campaign_id": "string (optional)",
  "date_range": "string (default: LAST_30_DAYS)",
  "min_impressions": "number (default: 10)",
  "limit": "number (default: 50)",
  "response_format": "markdown | json"
}

示例:

"What search terms triggered my ads in the last 30 days?"
"Find high-impression search terms with low CTR"
"Show search terms for campaign 67890"

退货:搜索词、匹配类型、展示次数、点击次数、成本、转化率、点击率


6. google_ads_ad_group_performance

描述:分析广告组级别指标。

参数:

{
  "customer_id": "string (required)",
  "campaign_id": "string (optional)",
  "date_range": "string (default: LAST_30_DAYS)",
  "limit": "number (default: 50)",
  "response_format": "markdown | json"
}

示例:

"Show ad group performance for all campaigns"
"Find best-performing ad groups in campaign 12345"

退货:广告组指标,包括展示次数、点击量、成本、转化率、点击率、点击成本


7. google_ads_recommendations

描述:获取谷歌的人工智能优化建议。

参数:

{
  "customer_id": "string (required)",
  "recommendation_types": "array of strings (optional)",
  "limit": "number (default: 20)",
  "response_format": "markdown | json"
}

示例:

"Show optimization recommendations for account 1234567890"
"What does Google suggest for improving my campaigns?"

退货:建议类型、影响估计、建议更改、理由


8. google_ads_update_campaign_budget

描述:修改活动每日预算。

参数:

{
  "customer_id": "string (required)",
  "campaign_id": "string (required)",
  "budget_amount_micros": "number (required, in micros)"
}

预算转换:将你的预算乘以1000000

  • 10美元=1000万微
  • 50.50美元=5050万微
  • 100.00美元=100000000微

示例:

"Set campaign 12345 budget to $75 per day"
"Increase budget for campaign 67890 to 100,000,000 micros ($100)"

退货:确认新旧预算值


9. google_ads_update_campaign_status

描述:暂停或启用活动。

参数:

{
  "customer_id": "string (required)",
  "campaign_id": "string (required)",
  "status": "ENABLED | PAUSED (required)"
}

示例:

"Pause campaign 12345"
"Enable campaign 67890"

退货:确认新状态


10. google_ads_custom_query

描述:执行自定义GAQL(谷歌广告查询语言)查询。

参数:

{
  "customer_id": "string (required)",
  "query": "string (required, valid GAQL query)",
  "response_format": "markdown | json"
}

示例:

"Execute this GAQL query: SELECT campaign.name, metrics.clicks FROM campaign WHERE metrics.impressions > 1000"

资源:

退货:以请求的格式查询结果


v2路线图(161个计划工具)

v2实现将服务器扩展到14个域中的161个工具。以下是计划能力的总结。

活动管理(23个工具)

创建和配置:

  • 创建活动(共9种类型:搜索、展示、购物、视频、最大性能、应用程序、本地、智能、需求生成)
  • 配置网络、位置、语言、开始/结束日期
  • 制定预算(标准、共享、投资组合)
  • 配置竞价策略

更新和优化:

  • 修改活动设置(名称、网络、目标)
  • 更新位置和语言定位
  • 管理设备出价调整
  • 配置广告日程安排(分日)
  • 添加活动级别排除

管理:

  • 战役实验和A/B测试
  • 活动标签和组织
  • 活动删除和存档

状态:优先事项2-积极发展


广告与创意管理(18种工具)

广告创作:

  • 响应式搜索广告(RSA)-最多15个标题,4个描述
  • 扩展文本广告(传统)
  • 响应式显示广告
  • 图像广告(显示网络)
  • 视频广告(YouTube、TrueView)
  • 性能最大资产组

广告优化:

  • 广告文案测试与分析
  • 广告强度跟踪
  • 创意资产管理
  • 广告预览和测试

状态:优先事项2-已计划


关键字管理(15个工具)

关键字操作:

  • 批量添加关键字(CSV导入)
  • 关键字更新(匹配类型、出价、状态)
  • 关键字删除
  • 负面关键字管理
  • 负面关键字列表(共享)

关键词研究与分析:

  • 关键词预测
  • 关键字建议
  • 匹配类型优化
  • 质量分数跟踪和改进

状态:优先事项2-已计划


竞价与优化(12个工具)

投标策略:

  • 投资组合竞价策略(目标CPA、目标ROAS、最大化转化率)
  • 出价调整(设备、位置、人口统计、受众、一天中的时间)
  • 手动竞价配置
  • 智能竞价设置和监控

优化:

  • 自动规则和触发器
  • 投标模拟和预测
  • 性能优化建议

状态:优先事项2-已计划


受众管理(14个工具)

观众创造:

  • 再营销列表
  • 客户匹配观众上传
  • 定制受众(兴趣、行为)
  • 相似的观众(长相相似)
  • 市场和亲和力受众

受众定位:

  • 将受众应用于活动/广告组
  • 观众出价调整
  • 排除列表
  • 观众表现跟踪

状态:优先事项3-已计划


转化跟踪(11个工具)

设置和配置:

  • 创建转换操作
  • 配置转化跟踪标签
  • 导入离线转换
  • 设置呼叫跟踪

归因与分析:

  • 多点触控归因模型
  • 换算值规则
  • 转换升力研究
  • 跨设备转换跟踪

状态:优先事项3-已计划


高级报告(25个工具)

专业报告:

  • 地理表现(国家、地区、城市、邮政编码)
  • 人口统计报告(年龄、性别、家庭收入)
  • 基于时间的分析(一天中的小时、一周中的天)
  • 设备性能细分
  • 拍卖洞察(竞争分析)
  • 登录页面性能
  • 通话指标和通话跟踪
  • 视频表演(YouTube)
  • 购物表现(产品组)

报表定制:

  • 自定义报表生成器
  • 期间比较
  • 趋势分析
  • 导出到Excel/PDF/CSV
  • 预定报告

状态:优先事项2-3-部分计划


批量操作(8个工具)

批量操作:

  • 批量创建活动
  • 批量关键字上传(CSV)
  • 大规模广告群创建
  • 批量状态更改
  • 批量预算更新

导入/导出:

  • 谷歌广告编辑器CSV导入
  • 将活动导出到CSV
  • 批量更改历史记录

状态:优先事项3-已计划


扩展和资产(12个工具)

扩展类型:

  • 站点链接扩展
  • 标注扩展
  • 呼叫分机
  • 位置扩展
  • 价格延期
  • 结构化代码段扩展
  • 促销延期
  • 应用程序扩展

管理:

  • 扩展性能跟踪
  • 资产库管理
  • 延期计划
  • 延期投标调整

状态:优先事项3-已计划


购物和性能最大值(10个工具)

购物活动:

  • 产品进料管理
  • 产品组创建
  • 购物活动优化
  • 商户中心集成

最大性能:

  • 资产组创建
  • 观众信号
  • 性能跟踪
  • 预算优化

状态:优先事项3-已计划


本地和应用程序活动(8个工具)

地方活动:

  • 店铺访问跟踪
  • 本地库存广告
  • 基于位置的投标
  • 呼叫跟踪

应用程序活动:

  • 应用程序安装活动
  • 应用参与活动
  • 深度链接配置
  • 应用内事件跟踪

状态:优先事项3-已计划


自动化(10个工具)

自动化规则:

  • 创建自定义规则
  • 安排自动化任务
  • 基于触发器的操作
  • 规则性能跟踪

智能功能:

  • 智能竞价自动化
  • 自动化扩展
  • 动态广告定制
  • AI驱动的优化

状态:优先事项3-已计划


洞察与分析(8个工具)

预测:

  • 预算预测
  • 转化预测
  • 季节趋势分析
  • 增长预测

竞品分析:

  • 拍卖见解
  • 竞争性基准分析
  • 市场份额分析

变更历史:

  • 帐户更改日志
  • 绩效变化归因
  • 回滚功能

状态:优先事项3-已计划


标签和组织(7个工具)

标签:

  • 活动标签
  • 广告组标签
  • 关键字标签
  • 广告标签

组织:

  • 文件夹结构管理
  • 资源组织
  • 批量标签操作

状态:优先事项3-已计划


有关完整的技术细节实施计划,请参阅 实施_计划.md.

使用示例

克劳德桌面对话

帐户概览

User: "Show me all my Google Ads accounts"

Claude: [Calls google_ads_list_accounts]
I can see you have 3 accessible Google Ads accounts:
1. Account 123-456-7890 (My Business)
2. Account 234-567-8901 (E-commerce Store)
3. Account 345-678-9012 (Client ABC)

活动分析

User: "Analyze campaign performance for the last 30 days for my main account"

Claude: [Calls google_ads_campaign_performance with customer_id="1234567890"]
Here's the performance for your campaigns over the last 30 days:

Top Performers:
- Brand Campaign: $1,245 spent, 523 conversions, $2.38 CPA
- Shopping Campaign: $2,100 spent, 312 conversions, $6.73 CPA

Needs Attention:
- Generic Keywords: $850 spent, 12 conversions, $70.83 CPA (consider pausing)

关键字优化

User: "Show me keywords with quality score below 5 for campaign 12345"

Claude: [Calls google_ads_keyword_performance with filtering]
Found 8 keywords with quality scores below 5:

1. "cheap widgets" - QS: 3, Avg Pos: 4.2, $145 spent
   Suggestion: Improve ad relevance or pause
2. "buy widgets online" - QS: 4, Avg Pos: 3.8, $98 spent
   Suggestion: Create dedicated ad group with tailored ad copy
...

预算管理

User: "Increase the budget for campaign 67890 to $150 per day"

Claude: [Calls google_ads_update_campaign_budget with budget_amount_micros=150000000]
Budget updated successfully:
- Campaign: Summer Sale 2025
- Old Budget: $100.00/day
- New Budget: $150.00/day
- Effective: Immediately

搜索词发现

User: "What search terms are triggering my ads with high impressions but low CTR?"

Claude: [Calls google_ads_search_terms with analysis]
Found 15 search terms with >1000 impressions and CTR <1%:

High Priority:
1. "free widgets" - 5,234 impressions, 0.3% CTR
   Recommendation: Add as negative keyword
2. "how to make widgets" - 3,421 impressions, 0.5% CTR
   Recommendation: Add as negative keyword (informational intent)

程序化使用

如果以编程方式直接与MCP服务器集成:

from mcp import ClientSession
import asyncio

async def analyze_campaigns():
    async with ClientSession() as session:
        # Initialize connection
        await session.call_tool("google_ads_initialize", {
            "developer_token": "YOUR_TOKEN",
            "client_id": "YOUR_CLIENT_ID",
            "client_secret": "YOUR_SECRET",
            "refresh_token": "YOUR_REFRESH_TOKEN"
        })

        # Get campaign performance
        result = await session.call_tool("google_ads_campaign_performance", {
            "customer_id": "1234567890",
            "date_range": "LAST_7_DAYS",
            "response_format": "json"
        })

        print(result)

asyncio.run(analyze_campaigns())

配置

配置文件(config.yaml)

v2服务器支持通过YAML文件进行配置:

authentication:
  method: oauth2  # or service_account
  developer_token: ${GOOGLE_ADS_DEVELOPER_TOKEN}
  client_id: ${GOOGLE_ADS_CLIENT_ID}
  client_secret: ${GOOGLE_ADS_CLIENT_SECRET}
  refresh_token: ${GOOGLE_ADS_REFRESH_TOKEN}
  login_customer_id: ${GOOGLE_ADS_LOGIN_CUSTOMER_ID}  # Optional MCC

performance:
  cache:
    backend: memory  # Options: memory, redis, none
    ttl:
      accounts: 3600      # 1 hour
      campaigns: 300      # 5 minutes
      keywords: 300       # 5 minutes
      search_terms: 600   # 10 minutes
    redis_url: redis://localhost:6379/0  # If using Redis
    max_size: 1000  # For memory cache

  connection_pool:
    size: 10
    timeout: 30

  rate_limiting:
    enabled: true
    requests_per_minute: 60
    burst_size: 10

error_handling:
  retry:
    enabled: true
    max_attempts: 3
    backoff_strategy: exponential  # linear, exponential
    initial_delay: 1
    max_delay: 30

  alerts:
    webhook_url: https://your-webhook.com/alerts
    email: admin@example.com

  log_errors: true

logging:
  level: INFO  # DEBUG, INFO, WARNING, ERROR, CRITICAL
  format: json  # json, text
  file: /var/log/google-mcp/server.log
  console: true

features:
  batch_operations: true
  auto_recommendations: true
  advanced_reporting: true
  conversion_tracking: true
  audience_management: true

api_version: v17  # Google Ads API version
default_page_size: 50
character_limit: 25000  # MCP response size limit

环境变量

用环境变量覆盖配置:

# Authentication
export GOOGLE_ADS_DEVELOPER_TOKEN="your-token"
export GOOGLE_ADS_CLIENT_ID="your-client-id"
export GOOGLE_ADS_CLIENT_SECRET="your-secret"
export GOOGLE_ADS_REFRESH_TOKEN="your-refresh-token"
export GOOGLE_ADS_LOGIN_CUSTOMER_ID="1234567890"  # Optional

# Performance
export GOOGLE_MCP_CACHE_BACKEND="redis"
export GOOGLE_MCP_REDIS_URL="redis://localhost:6379/0"

# Logging
export GOOGLE_MCP_LOG_LEVEL="DEBUG"
export GOOGLE_MCP_LOG_FILE="/var/log/google-mcp.log"

功能标志

启用或禁用功能:

features:
  batch_operations: true      # Bulk operations support
  auto_recommendations: true  # Google AI recommendations
  advanced_reporting: true    # 25+ specialized reports
  conversion_tracking: true   # Conversion management
  audience_management: true   # Remarketing, Customer Match

缓存选项

内存缓存 (默认情况下,不需要设置):

  • 快速、进程内缓存
  • 无外部依赖关系
  • 仅限于单一流程

Redis缓存 (推荐用于生产):

  • 跨进程的分布式缓存
  • 跨重启的持久缓存
  • 支持集群

无缓存:

  • 禁用缓存以进行测试或调试

建筑

项目结构

google-mcp/
├── google_ads_mcp.py              # Main MCP server (v1) - 10 tools
├── google_ads_mcp_v2.py           # Enhanced server (v2) - 161 planned tools
├── generate_refresh_token.py      # OAuth token generation utility
│
├── Infrastructure Managers
├── auth_manager.py                # OAuth authentication & token management
├── config_manager.py              # Configuration loading (YAML/JSON)
├── cache_manager.py               # Caching layer (Memory/Redis)
├── error_handler.py               # Error handling & retry logic
├── logger.py                      # Structured logging
├── response_handler.py            # Response formatting & streaming
├── query_optimizer.py             # GAQL query optimization
│
├── Domain Managers
├── campaign_manager.py            # Campaign creation & management
├── ad_group_manager.py            # Ad group operations
├── ad_manager.py                  # Ad creation & management
├── keyword_manager.py             # Keyword operations
├── bidding_strategy_manager.py    # Bidding strategy configuration
├── audience_manager.py            # Audience management
├── conversion_manager.py          # Conversion tracking
├── automation_manager.py          # Automated rules
├── batch_operations_manager.py    # Bulk operations
├── extensions_manager.py          # Ad extensions
├── labels_manager.py              # Label management
├── shopping_pmax_manager.py       # Shopping & Performance Max
├── local_app_manager.py           # Local & app campaigns
├── insights_manager.py            # Analytics & insights
├── reporting_manager.py           # Advanced reporting
│
├── MCP Tool Registrations
├── mcp_tools_campaigns.py         # Campaign tools
├── mcp_tools_ad_groups.py         # Ad group tools
├── mcp_tools_ads.py               # Ad tools
├── mcp_tools_keywords.py          # Keyword tools
├── mcp_tools_bidding.py           # Bidding tools
├── mcp_tools_audiences.py         # Audience tools
├── mcp_tools_conversions.py       # Conversion tools
├── mcp_tools_automation.py        # Automation tools
├── mcp_tools_batch.py             # Batch operation tools
├── mcp_tools_extensions.py        # Extension tools
├── mcp_tools_shopping_pmax.py     # Shopping/PMax tools
├── mcp_tools_local_app.py         # Local/App tools
├── mcp_tools_insights.py          # Insights tools
├── mcp_tools_reporting.py         # Reporting tools
│
├── Configuration
├── config.yaml                    # Server configuration
├── config.example.yaml            # Configuration template
├── requirements.txt               # Python dependencies
│
├── Documentation
├── README.md                      # This file
├── SECURITY.md                    # Security policy
├── CONTRIBUTING.md                # Contribution guidelines
├── LICENSE                        # MIT License
├── CITATION.cff                   # Citation information
├── CODEOWNERS                     # Code ownership
├── documentation/                 # Additional documentation
│   ├── QUICKSTART.md
│   ├── IMPLEMENTATION_PLAN.md
│   ├── EXECUTIVE_SUMMARY.md
│   └── ...
│
└── .claude/                       # Claude Code configuration
    ├── claude_project.json
    └── CLAUDE.md

管理器模块模式

每个域管理器都遵循以下模式:

class CampaignManager:
    """Handles campaign-related operations."""

    def __init__(self, client: GoogleAdsClient, config: Config):
        self.client = client
        self.config = config

    def create_campaign(...) -> dict:
        """Create a new campaign."""
        # Validation
        # API operation
        # Error handling
        # Response formatting

MCP工具注册系统

使用FastMCP注册工具:

from mcp.server.fastmcp import FastMCP
from pydantic import BaseModel

mcp = FastMCP("google_ads_mcp")

@mcp.tool()
def google_ads_create_campaign(request: CampaignCreateRequest) -> dict:
    """Create a new Google Ads campaign."""
    manager = CampaignManager(client, config)
    return manager.create_campaign(**request.dict())

数据流

  1. AI助手 发送自然语言请求
  2. MCP 服务器 接收带有参数的工具调用
  3. 管理模块 验证输入并执行API操作
  4. 谷歌广告API 处理请求
  5. 响应处理器 格式化结果(Markdown/JSON)
  6. MCP 服务器 返回格式化的响应
  7. AI助手 向用户呈现结果

故障排除

常见错误

“客户端未初始化”错误

原因:尚未使用凭据初始化Google Ads客户端。

解决方案:

Initialize my Google Ads connection with these credentials:
- Developer Token: YOUR_TOKEN
- Client ID: YOUR_CLIENT_ID
- Client Secret: YOUR_SECRET
- Refresh Token: YOUR_REFRESH_TOKEN

“客户ID无效”错误

原因:客户ID格式不正确。

解决方案:确保客户ID为:

  • 10位数字
  • 没有连字符
  • 例子: 1234567890 (正确), 123-456-7890 (错误)

“身份验证失败”错误

原因和解决方案:

  1. 开发人员令牌无效:

    • 在Google Ads API中心验证令牌
    • 确保令牌获得批准(不仅仅是测试)
  2. OAuth凭据不正确:

    • 重新生成刷新令牌
    • 验证客户端ID和客户端密码
  3. 令牌已过期:

    • 刷新令牌可能会在长时间不活动后过期
    • 生成新的刷新令牌
  4. 登录customer_id错误:

    • 仅限使用 login_customer_id 对于MCC账户
    • 验证MCC ID是否正确

“权限不足”错误

原因:

  • 您的Google帐户无权访问Google Ads帐户
  • 开发人员令牌的访问级别有限
  • OAuth范围不包括Google Ads API

解决方案:

  1. 验证Google Ads中的帐户访问权限
  2. 确保OAuth范围 https://www.googleapis.com/auth/adwords
  3. 检查开发人员令牌访问级别

速率限制

原因:超过Google Ads API费率限制。

解决方案:

  • 降低请求频率
  • 使用较小的日期范围
  • 启用缓存(内存或Redis)
  • 实现请求限制

谷歌广告API限制:

  • 每天15000次操作(测试账户)
  • 生产账户限额更高
  • 联系谷歌以提高限额

调试日志

启用调试日志以进行故障排除:

v1(google_ads_mcp.py):

import logging
logging.basicConfig(level=logging.DEBUG)

v2(配置yaml):

logging:
  level: DEBUG
  console: true
  file: /tmp/google-mcp-debug.log

测试连接

手动测试您的设置:

from google.ads.googleads.client import GoogleAdsClient

credentials = {
    "developer_token": "YOUR_TOKEN",
    "client_id": "YOUR_CLIENT_ID",
    "client_secret": "YOUR_SECRET",
    "refresh_token": "YOUR_REFRESH_TOKEN",
    "use_proto_plus": True
}

client = GoogleAdsClient.load_from_dict(credentials)
customer_service = client.get_service("CustomerService")
accessible_customers = customer_service.list_accessible_customers()
print(f"Accessible customers: {accessible_customers.resource_names}")

获取帮助

如果你仍然被困住了:

  1. 检查现有问题: GitHub问题
  2. 审查文件: 谷歌广告API文档
  3. 创建问题:提供错误消息、日志和重现步骤
  4. 联系支持:参见 支持和资源

高级主题

多账户(MCC)管理

什么是MCC?

MCC(我的客户中心)是一个Google广告管理器帐户,允许您从单个界面管理多个客户帐户。

设置:

  1. 在以下网址创建MCC帐户 ads.google.com/mcc
  2. 将客户帐户链接到您的MCC
  3. 使用MCC客户ID作为 login_customer_id 初始化期间

用法:

Initialize with:
- Login Customer ID: 1234567890 (your MCC ID)
- ...other credentials...

Then access client accounts:
"Analyze campaigns for client account 2345678901"
"List all accounts under my MCC"

好处:

  • 多个帐户的单一身份验证
  • 跨客户端的集中报告
  • 高效的批量操作

性能优化

缓存策略:

  1. 内存缓存:快速,但仅限于单一流程
  2. Redis缓存:分布式、持久化、推荐用于生产
  3. 选择性缓存:缓存昂贵的查询,更新突变

最佳实践:

  • 使用日期范围过滤器减少数据量
  • 应用 limit 控制结果大小的参数
  • 为频繁访问的数据启用缓存
  • 使用批处理操作进行批量更改

自定义GAQL查询

GAQL(谷歌广告查询语言)支持高级自定义查询。

查询结构:

SELECT
  resource.field1,
  resource.field2,
  metrics.metric1
FROM resource_name
WHERE conditions
ORDER BY field
LIMIT n

示例-查找表现最佳的关键字:

SELECT
  ad_group_criterion.keyword.text,
  metrics.clicks,
  metrics.conversions,
  metrics.cost_micros
FROM keyword_view
WHERE
  metrics.impressions > 100
  AND campaign.status = 'ENABLED'
ORDER BY metrics.conversions DESC
LIMIT 20

资源:

批量操作

使用批处理操作高效地进行批量更改(v2功能):

好处:

  • 减少API调用(1次批量调用,100次单独调用)
  • 执行速度更快
  • 较低的配额使用率

用例:

  • 批量关键字上传
  • 群众运动创建
  • 批量预算更新
  • 批量状态更改

API 参考

谷歌广告API

GAQL资源

MCP协议

贡献

我们欢迎捐款!请参阅 贡献.md 作为指导方针。

贡献方式:

  • 通过以下方式报告错误或请求功能 GitHub问题
  • 提交bug修复或新功能的pull请求
  • 改进文档
  • 分享使用示例和技巧

开发工作流程:

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 彻底测试
  5. 提交拉取请求

看 贡献.md 详细说明。

安全

安全是首要任务。请参阅 安全.md 用于:

  • 安全策略和支持的版本
  • 如何报告漏洞
  • 安全最佳实践
  • 凭证管理指南

快速安全提示:

  • 从不将凭据提交到版本控制
  • 使用环境变量作为机密
  • 定期轮换OAuth令牌
  • 在Google Ads帐户上启用2FA
  • 监视API访问日志

许可证

该项目根据MIT许可证获得许可。看 许可证 了解详情。

MIT License

Copyright (c) 2025 John O'Connor

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction...

引用

如果您在研究或项目中使用此软件,请引用它:

APA格式:

O'Connor, J. (2025). Google Ads MCP Server (Version 1.0.0) [Computer software].
https://github.com/johnoconnor0/google-ads-mcp

BibTeX:

@software{oconnor_google_mcp_2025,
  author = {O'Connor, John},
  title = {Google Ads MCP Server},
  year = {2025},
  version = {1.0.0},
  url = {https://github.com/johnoconnor0/google-ads-mcp}
}

看 引文.cff 用于机器可读的引文元数据。

支持和资源

文档

谷歌广告资源

MCP资源

社区与支持

相关项目


版本: 1.0.0 最后更新:2025年12月17日 作者:约翰·奥康纳 许可证:MIT

标记此存储库 如果你觉得它有用的话!