Can Claude actually manage a Google Ads account?
Yes. With the VibeAds MCP server, Claude (or Cursor, Cline, or any MCP-compatible agent) can read your campaign performance, find wasted spend, draft a complete campaign — keywords, ad copy, 3+ ad groups — apply safe optimizations, and request a publish. The one thing it can never do is spend your money without you: publishing always requires a human clicking Approve in a browser.
That last sentence is the whole design. Every "AI agent runs my ads" story ends one of two ways: the agent is read-only and useless, or it has full write access and one bad prompt burns a week of budget. The VibeAds MCP server takes a third path — agents draft and optimize freely, humans approve anything that moves money.
What is the VibeAds MCP server?
Model Context Protocol (MCP) is Anthropic's open standard for connecting AI models to tools — the same protocol Claude Desktop and Claude Code use for every integration. The VibeAds MCP server is a small open-source Node.js process (npx -y @vibeads/mcp) that exposes 11 Google Ads management tools to your AI client and forwards every call to VibeAds' cloud gateway, authenticated by a single API key.
Three things it deliberately does NOT do:
- It never touches Google credentials. You connect Google Ads to VibeAds once via OAuth in the dashboard. Tokens stay server-side; the agent and your laptop never see them.
- It holds no database keys. The only secret on your machine is a revocable
vba_mcp_API key, SHA-256 hashed at rest on our side. - It cannot approve spend. The approval endpoint doesn't accept API keys at all — more on that below.
How do I set it up? (2 minutes)
Prerequisites: a VibeAds account (free to create — write tools need Pro at $20/mo or Max), a connected Google Ads account, and Node.js 18+ where your MCP client runs.
Step 1 — Get an API key. Go to getvibeads.com/app/settings/mcp, click Generate key, copy it (shown once, prefix vba_mcp_).
Step 2 — Add the server to your client.
Claude Desktop, Cursor, or Cline — add this to the mcpServers block of the client's config:
{
"mcpServers": {
"vibeads": {
"command": "npx",
"args": ["-y", "@vibeads/mcp"],
"env": { "VIBEADS_API_KEY": "vba_mcp_YOUR_KEY_HERE" }
}
}
}
Claude Code — one terminal command:
claude mcp add vibeads -e VIBEADS_API_KEY=vba_mcp_YOUR_KEY_HERE -- npx -y @vibeads/mcp
Step 3 — Restart the client and ask: "List my VibeAds campaigns." If you prefer guided setup, npx -p @vibeads/mcp vibeads-mcp-init writes the config for you.
What tools does the agent get?
Eleven tools — five read (any plan), six write/workflow (Pro/Max):
| Tool | Type | What it does |
|---|---|---|
list_campaigns | Read | All campaigns with status + budget |
get_campaign_details | Read | 7-day metrics, ad groups, landing pages, diagnostics |
get_account_health_score | Read | 0–100 score, A–F grade, 6 dimensions, 35+ rules |
get_search_term_analysis | Read | Wasted spend vs winning search terms |
get_diagnostics | Read | Active issues by severity with recommended fixes |
generate_strategy | Write | Drafts keywords, ad copy, 3+ ad groups (13 credits; publishes nothing) |
get_strategy_status | Write | Polls the draft until ready |
list_recommendations | Write | Pending optimization recommendations |
approve_recommendation | Write | Executes ONE recommendation inside guardrails |
request_publish | Write | Returns a human approval link |
check_approval | Write | Polls the approval + publish progress |
How does the human-approval publish flow work?
This is the part worth copying if you're building agent tools of your own:
- The agent calls
request_publishwith a campaign ID. - VibeAds freezes a summary — campaign name, daily budget in dollars, ad group list, target Google Ads account — and mints a single-use approval link that expires in 30 minutes.
- The agent shows you the link and waits.
- You open it, log in, see exactly what will go live and what it costs per day, and click Approve & publish (or Reject).
- The agent's
check_approvalpoll unblocks, and the campaign publishes to your own Google Ads account.
Why can't the agent just click the link itself? Because the link only identifies the pending action — approving requires the owning user's logged-in browser session on top of it. An API key is useless at that endpoint. The agent that requested the publish can display the link, but it physically cannot approve it. Guardrails on everything else: writes are rate-limited to 60 calls/hour per key, every call is audit-logged, and approve_recommendation executes inside the same safety system as the VibeAds dashboard — blast-radius caps, per-campaign daily limits, and 48-hour auto-rollback if metrics worsen.
What does a real session look like?
A condensed transcript from Claude Code with the server installed:
You: Draft a plumber campaign for Austin at $1,500/month, then get it live.
Claude: calls
generate_strategy… Draft ready: 3 ad groups (Emergency Plumbing, Drain Cleaning, Water Heater Installation), 28 keywords, 15 headlines per ad group. callsrequest_publish… Publishing needs your approval — open this link to review the $50/day budget and approve:getvibeads.com/app/approve/…You: click, log in, tap Approve & publish
Claude: Approved — publish job running. Campaign is live on Google Ads account 951-452-2152 (paused until you enable it).
Total human effort: one sentence and one click.
How does this compare to other Google Ads MCP servers?
| VibeAds MCP | Google Ads official MCP | Generic analytics MCPs | |
|---|---|---|---|
| Reads performance | ✅ | ✅ (raw GAQL) | ✅ |
| Prebuilt diagnostics (35+ rules) | ✅ | ❌ write your own queries | ❌ |
| Drafts full campaigns (keywords + ad copy + ad groups) | ✅ | ❌ | ❌ |
| Executes optimizations with guardrails + auto-rollback | ✅ | ❌ raw mutations, no safety layer | ❌ |
| Publishes campaigns | ✅ human-approved | ⚠️ raw API mutations, no approval gate | ❌ |
| Credentials on your machine | 1 revocable API key | Google OAuth + developer token | varies |
| Setup | 2 min, no Google Cloud project | Google Cloud project + dev token application | varies |
The official server is a power tool for PPC engineers who write GAQL. The VibeAds server is for business owners and their agents: the safety logic, campaign knowledge (37 local-service categories), and approval flow are built in.
What does it cost?
The MCP server itself is free and open source. Read tools work on any VibeAds plan. Write tools require Pro ($20/mo) or Max ($149/mo); strategy generation costs the same 13 credits it costs in the dashboard — there's no separate API pricing. And the campaign itself publishes to your Google Ads account, so ad spend goes straight to Google, never through us.
FAQ
Is it safe to give an AI agent my API key? The key can read data, draft campaigns, and apply guardrailed optimizations — it cannot approve spend, see Google credentials, or exceed 60 calls/hour. If it leaks, revoke it in Settings and it's dead within seconds.
Which models/clients work? Anything that speaks MCP: Claude Desktop, Claude Code, Cursor, Cline, Windsurf, and more. The tools are model-agnostic — GPT- or Gemini-based agents work through any MCP-compatible client too.
Can I use it for multiple Google Ads accounts? Yes — the key is scoped to your VibeAds user, and Max supports up to 10 connected ad accounts. Create one key per client/machine so you can revoke selectively.
Does the agent need my Google login? Never. Google Ads connects to VibeAds once via OAuth in your dashboard; the agent only holds the VibeAds key.
Where do I start? Create a free VibeAds account, connect Google Ads, generate a key at Settings → MCP API Keys, and paste the config above. Full reference: docs/integrations/mcp-server.