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