Camberstack: a Google Ads MCP server that acts

MCP serverSearch

Lets 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

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.

Camberstack: a Google Ads MCP server that actsStart free
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/mcp

    Add 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=eyJ1cmwiOiJodHRwczovL2NhbWJlcnN0YWNrLmlvL21jcCJ9

    Open the link and Cursor adds the server at that address.

  • ChatGPT

    https://camberstack.io/mcp

    In 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

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
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_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)
APPLY_REQUIRES_PRO / PRO_EMAILSbilling 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.

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