Camberstack: a Google Ads MCP server that acts
MCP serverSearchLets your agent build Google Ads search campaigns, applying only the changes you approve, with undo.
Use Camberstack: a Google Ads MCP server that acts in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add Camberstack: a Google Ads MCP server that acts and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use Camberstack: a Google Ads MCP server that acts
Needs your own Camberstack: a Google Ads MCP server that acts account. You sign in to it and approve access when you connect.
Details
Available today. Use it from your connected AI after setup.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
About this server
Hosted Google Ads MCP: build Search campaigns and make only the changes you approve, with undo.
Install Camberstack: a Google Ads MCP server that acts
The server’s own address, for the clients that take one directly. Or connect ahel once and every client you use reads it from one address, with the account kept on ahel rather than in each client’s config.
Claude Code
claude mcp add --transport http --scope user camberstack-a-google-ads-mcp-ser 'https://camberstack.io/mcp'Run it once in your project, then open /mcp to approve any sign-in the server asks for.
Claude Desktop
https://camberstack.io/mcpAdd a custom connector in Settings, paste this address, and approve the sign-in.
Cursor
cursor://anysphere.cursor-deeplink/mcp/install?name=camberstack-a-google-ads-mcp-ser&config=eyJ1cmwiOiJodHRwczovL2NhbWJlcnN0YWNrLmlvL21jcCJ9Open the link and Cursor adds the server at that address.
ChatGPT
https://camberstack.io/mcpIn Settings, enable Developer mode, create an MCP app, and paste this address. Your plan and workspace must allow custom apps.
Codex
codex mcp add camberstack-a-google-ads-mcp-ser --url 'https://camberstack.io/mcp'Run it once, then sign in with codex mcp login camberstack-a-google-ads-mcp-ser if the server asks for an account.
From the project's README
As published by awilliams-2020/camberstack-mcp in README.md.
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 during beta). Setup: https://camberstack.io/#setup
Tools
| tool | writes? | what it does |
|---|---|---|
list_accounts | no | every account the login reaches, including client accounts under a manager (MCC) |
account_overview | no | spend, conversions, cost per conversion per campaign |
find_wasted_spend | no | tracking 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_gaql | no | any read-only GAQL SELECT |
propose_changes | no | resolves changes against the live account, dry-runs them with Google (validateOnly), stores a proposal with a plain-English summary |
apply_changes | yes | applies a stored proposal (the user's own, un-applied, under 24h old); records each change's inverse |
undo_changes | no | builds the reversing proposal for an applied one |
discard_proposal, change_history, disconnect |
Writes are limited to: add negative keywords, pause/enable a keyword or ad group, set a campaign's daily budget (never a shared budget). 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
npm ci && npm test
ENCRYPTION_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_KEY | 32 bytes, hex or base64. Losing it only forces users to reconnect; leaking it exposes stored Google tokens |
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET | OAuth 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_TOKEN | sent when set |
BASE_URL | public origin, the OAuth issuer (default https://camberstack.io) |
DATA_DIR | SQLite location (default ./data) |
APPLY_REQUIRES_PRO / PRO_EMAILS | billing gate for apply_changes (off during beta) |
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
Signals
- Last commit
- Oct 2026
ahel review
S4info
community integration, published by awilliams-2020, not google
Automated review, not a security audit. Ruleset v1.
ahel recommends instead
Advanced
- Delivery
- google-ads MCP server → your ahel connector (mcp.ahel.ai) → your AI.
- Item type
- mcp-server
- Key
io-camberstack-google-ads- Source
- github.com/awilliams-2020/camberstack-mcp
- Hosted endpoint
https://camberstack.io/mcp
github.com/awilliams-2020/camberstack-mcp