Camberstack: Google Ads

io.camberstackv0.1.0更新于 Oct 1, 2026

Google Ads MCP that acts: finds wasted spend, applies only the changes you approve, undoes them.

已验证Streamable HTTP可网页运行Data & AnalyticsBusiness & Commerce

概览

AI 生成的概览

让助手审计 Google Ads 账户、提出浪费支出的修复建议,并且只应用你批准的、可撤销的更改。

功能
将 MCP 客户端连接到 Google Ads,使助手可以列出可访问的账户(包括 MCC 下的客户账户)、按广告系列汇总花费和转化,并执行只读 GAQL 查询。它通过检查转化跟踪、无转化广告系列、高成本搜索词和低意图模式来发现浪费支出,并返回可直接提议的否定关键词。更改会先对照实时账户解析并用 Google 进行试运行,然后存为带通俗摘要的提案;应用已存提案时会记录每项更改的反向操作,以便撤销。
适用场景
适合管理 Google Ads 支出、希望助手诊断浪费预算并准备具体更改供审核的场景。适合希望在修改前有人工批准步骤、并且能够撤销已应用更改的用户。
运行要求
通过 streamable HTTP 连接 camberstack.io 的远程端点,无需本地运行时。登录通过 Google OAuth,使用 adwords 和 openid email 范围。免费方案提供无限诊断和三次已应用更改;Pro 为每月 49 美元。自托管需要 Node.js 以及 ENCRYPTION_KEY、GOOGLE_CLIENT_ID、GOOGLE_CLIENT_SECRET、GOOGLE_ADS_DEVELOPER_TOKEN、BASE_URL 等环境变量。
安装前请注意
应用提案会写入实时 Google Ads 账户:可添加否定关键词、暂停或启用广告系列、广告组或关键词,以及设置广告系列每日预算。启用广告系列和预算增加超过一倍会在提案摘要中标注。提案必须是用户自己的、未应用且不超过 24 小时。自托管时 Google 刷新令牌以 ENCRYPTION_KEY 加密存储;该密钥泄露会暴露已存储的 Google 令牌。Pro 升级链接涉及 Stripe 计费。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Camberstack: Google Ads,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "google-ads": {
      "type": "http",
      "url": "https://camberstack.io/mcp"
    }
  }
}

README

Camberstack: a Google Ads MCP server that acts

Connect Google Ads to Claude, ChatGPT, Cursor or any MCP client. Your AI checks conversion tracking, finds where the budget goes with nothing to show for it, and proposes fixes. Nothing changes in the account until you approve a specific proposal, and every applied change can be undone.

Hosted: https://camberstack.io/mcp (free plan: unlimited diagnosis + 3 applied changes; Pro $49/mo unlimited). Setup: https://camberstack.io/#setup

Tools

toolwrites?what it does
list_accountsnoevery account the login reaches, including client accounts under a manager (MCC)
account_overviewnospend, conversions, cost per conversion per campaign
find_wasted_spendnotracking check → campaigns with no conversions → search terms over their campaign's cost per conversion → low-intent patterns (free, jobs, how-to, login) that never converted in that campaign → keywords to review. Returns ready-to-propose negatives
run_gaqlnoany read-only GAQL SELECT
propose_changesnoresolves changes against the live account, dry-runs them with Google (validateOnly), stores a proposal with a plain-English summary
apply_changesyesapplies a stored proposal (the user's own, un-applied, under 24h old); records each change's inverse
undo_changesnobuilds the reversing proposal for an applied one
billingnoplan, free applies left, and a personal upgrade or manage-billing link
discard_proposal, change_history, disconnect

Writes are limited to: add negative keywords, pause/enable a campaign, ad group or keyword, set a campaign's daily budget (never a shared budget). Enabling a campaign and more-than-doubling a budget carry a ⚠ line in the proposal summary. No campaign creation, bid strategy changes or deletions of anything the user built.

How auth works

Camberstack is an OAuth 2.1 authorization server for MCP clients (dynamic client registration, PKCE). Its /authorize sends the user to Google for adwords + openid email. The Google refresh token is stored AES-256-GCM encrypted and never leaves the server. The MCP client gets Camberstack's own tokens, which are stored only as SHA-256 hashes.

Run it

bash
npm ci && npm testENCRYPTION_KEY=$(openssl rand -hex 32) \GOOGLE_CLIENT_ID=… GOOGLE_CLIENT_SECRET=… GOOGLE_ADS_DEVELOPER_TOKEN=… \BASE_URL=https://your.host npm run dev
env
ENCRYPTION_KEY32 bytes, hex or base64. Losing it only forces users to reconnect; leaking it exposes stored Google tokens
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRETOAuth client from a dedicated Google Cloud project with Google Ads API access. Redirect URI: <BASE_URL>/oauth/google/callback. Unset = pages only, sign-in reports "not open yet"
GOOGLE_ADS_DEVELOPER_TOKENsent when set
BASE_URLpublic origin, the OAuth issuer (default https://camberstack.io)
DATA_DIRSQLite location (default ./data)
FREE_APPLIES / PRO_EMAILSapplied proposals on the free plan (default 3; undo never counts) / emails treated as Pro
STRIPE_SECRET_KEY / STRIPE_PRO_PRICE_IDPro subscription via Stripe Checkout; unset = no upgrade links

scripts/try-account.ts runs the read tools against a real account from an existing refresh token, skipping OAuth. Use it for dogfooding.

License

MIT

来源:README.md,提交 1e73d28

工具

0
工具元数据尚未被收录。

版本历史

1
  1. v0.1.0最新Oct 1, 2026