VibeAds MCP server: manage Google Ads from your AI assistant
The VibeAds MCP server connects ChatGPT, Claude, Meta AI, Claude Code, Cursor, or any Model Context Protocol client to your Google Ads through VibeAds. Your assistant can read performance, find wasted spend, draft a campaign, bring in the campaigns you already run, apply the optimizer's recommendations, pause a campaign, and publish one, with you confirming anything that spends money. No Google credentials ever reach the assistant.
Last updated: October 7, 2026 · npm package @vibeads/mcp 0.2.16 or later
Ask Claude about your Google Ads. 35 seconds, with sound.
Watch the video with its transcript
What is the VibeAds MCP server
Model Context Protocol (MCP) is the open standard AI assistants use to call outside tools. VibeAds runs an MCP server at https://getvibeads.com/api/mcp with 26 typed Google Ads tools. The same tools come as a small open-source npm package (@vibeads/mcp) for clients that run tools on your computer. Both forward every call to the VibeAds gateway, where plan checks, credits, rate limits and every safety gate run, so the two behave the same.
Two ways to connect
| Sign in (OAuth) | API key | |
|---|---|---|
| For | ChatGPT, Claude (claude.ai and Claude Desktop), Meta AI | Claude Code, Cursor, Cline, Windsurf and other MCP clients |
| How | Add https://getvibeads.com/api/mcp in the assistant; it opens VibeAds, where you sign in and press Allow access | Create a key in Settings, MCP Server Keys, and use the npm package or the hosted server with the key in a header |
| Publishing | Search campaigns within the daily limit you allow assistants, after you confirm the budget in the chat; anything else gets an approval link | Always an approval link you approve in VibeAds |
| Stopping it | Settings, Connected apps, Disconnect | Settings, MCP Server Keys, Revoke |
| Rate limit | 60 calls an hour, shared by the apps you signed in to | 60 calls an hour per key |
Prerequisites
- A VibeAds account (free to create). Reading works on every plan; drafting, importing, recommendations, pausing and publishing need Pro or Max.
- Google Ads connected to VibeAds, for publishing, importing and live numbers. You can connect it in Settings, or from the link an assistant gives you when it needs it.
- For the npm package only: Node.js 18 or later on the computer running your MCP client (
npxinstalls the rest).
Setup
ChatGPT, Claude and Meta AI: sign in
Add the server address in the assistant and sign in to VibeAds when it asks. Step-by-step instructions for each one are on Connect ChatGPT, Claude or Meta AI. Once connected, the assistant appears in Settings, Connected apps, where you can disconnect it and set the daily budget it may publish up to.
https://getvibeads.com/api/mcpClaude Code, Cursor, Cline and other clients: API key
Step 1. Create a key at getvibeads.com/app/settings/mcp. It starts with vba_mcp_ and is shown once. Create one key per client, so you can revoke one without touching the others.
Step 2, local via npm. Claude Desktop, Cursor and Cline read an mcpServers block in their config file:
{
"mcpServers": {
"vibeads": {
"command": "npx",
"args": ["-y", "@vibeads/mcp"],
"env": { "VIBEADS_API_KEY": "vba_mcp_YOUR_KEY_HERE" }
}
}
}Claude Code takes one terminal command:
claude mcp add vibeads -e VIBEADS_API_KEY=vba_mcp_YOUR_KEY_HERE -- npx -y @vibeads/mcpOr step 2, the hosted server with a key. Nothing to install; the key travels in a header:
claude mcp add --transport http vibeads https://getvibeads.com/api/mcp --header "x-vibeads-api-key: vba_mcp_YOUR_KEY_HERE"A client that cannot send headers can put the key in the address instead (https://getvibeads.com/api/mcp?key=vba_mcp_YOUR_KEY_HERE). That address then works like a password, so prefer signing in or a header where you can.
Step 3. Restart the client and ask: "Show me my Google Ads campaigns in VibeAds." For guided npm setup, npx -y @vibeads/mcp --init prints ready-to-paste configs for each client.
All 31 tools
Plan says which VibeAds plans can use a tool; Changes says what it can change.
| Tool | Plan | Changes | What it does |
|---|---|---|---|
list_campaigns | Any | Nothing | Your campaigns in VibeAds, published, imported and drafts, with status and daily budget |
get_campaign_details | Any | Nothing | One campaign's last 7 days, ad groups, landing pages and issues |
get_account_health_score | Any | Nothing | A 0 to 100 score and A to F grade across 6 dimensions |
get_search_term_analysis | Any | Nothing | Search terms that cost money without a conversion, and the ones that convert |
get_diagnostics | Any | Nothing | The optimizer's issues, highest severity first, with the fix for each |
find_campaigns_to_import | Any | Nothing | The campaigns in a connected Google Ads account, and which are already in VibeAds |
get_performance_report | Any | Nothing | One campaign's or a whole account's figures for any period up to 90 days, read live from Google Ads, split by day, device, hour, ad group, keyword or location |
audit_google_ads_account | Any | Nothing | An audit of a connected Google Ads account, read live from Google Ads: up to 25 Search campaigns over 30 days, imported or not, with a health score, the issues and what fixes each, and the search terms spending without conversions |
list_keywords | Any | Nothing | One campaign's ad groups, keywords and negative keywords, read live from Google Ads, with match type, status, max CPC and 30 days of clicks, cost and conversions |
research_keywords | Pro, Max | Nothing | Keyword ideas from Google's Keyword Planner for your keywords or a web page, with monthly searches, competition and top-of-page bids (2 credits) |
list_google_ads_accounts | Any | Nothing | Every connected Google Ads account, switched on or not, and the manager account each client sits under |
list_google_recommendations | Any | Nothing | Google's own recommendations for an account, with Google's estimate and whether each can be applied from the chat |
generate_strategy | Pro, Max | Nothing yet | Drafts keywords, ad copy and ad groups for a trade and service area (13 credits) |
get_strategy_status | Pro, Max | Nothing | Progress of a draft, usually ready in a few minutes |
apply_strategy | Pro, Max | Draft in VibeAds | Turns a finished draft into a draft campaign (6 credits plus 3 per ad group) |
list_recommendations | Pro, Max | Nothing | The optimizer's recommendations waiting for you, and how each is approved |
approve_recommendation | Pro, Max | Live campaigns | Applies one recommendation you approve; a budget increase over 20% gets an approval link instead |
preview_ad_group | Pro, Max | Preview in VibeAds | Shows a new ad group's keywords, ads and landing page before anything is added |
add_ad_group | Pro, Max | Live campaigns | Adds the previewed ad group; on a published campaign it starts serving within the campaign's budget |
request_publish | Pro, Max | Live campaigns | Publishes a draft to Google Ads, as described below |
check_approval | Pro, Max | Nothing | Whether a publish or an approval link went through, and if the campaign is live |
import_campaigns | Pro, Max | Copies into VibeAds | Brings up to 3 campaigns from Google Ads into VibeAds (1 credit each); nothing changes in Google Ads |
pause_campaign | Pro, Max | Live campaigns | Pauses a live campaign |
resume_campaign | Pro, Max | Live campaigns | Starts a paused campaign again, under the same rules as publishing |
add_negative_keywords | Pro, Max | Live campaigns | Adds up to 20 negative keywords to a campaign or one ad group |
add_keywords | Pro, Max | Live campaigns | Adds up to 20 keywords to one ad group |
set_keyword_status | Pro, Max | Live campaigns | Pauses keywords, or turns paused ones back on |
set_max_cpc | Pro, Max | Live campaigns | Sets an ad group's or a keyword's max CPC on a Manual CPC campaign; a big raise gets an approval link |
set_daily_budget | Pro, Max | Live campaigns | Sets a campaign's daily budget; a raise over 20% gets an approval link |
apply_google_recommendation | Pro, Max | Live campaigns | Applies one of Google's recommendations within VibeAds' rules (see below); up to 20 a day |
dismiss_google_recommendation | Pro, Max | Google's list | Removes one of Google's recommendations; no campaign changes |
Every tool carries MCP annotations (readOnlyHint, destructiveHint, openWorldHint), which assistants such as ChatGPT and Claude use to ask you before running one that changes something.
Google's own recommendations
list_google_recommendations reads the same suggestions Google shows on your account's Recommendations page. Applying one from a chat follows VibeAds' rules, checked against Google's own copy of the recommendation right before it is applied:
- A budget decrease, or an increase of up to 20%, measured from the lowest daily budget in the last 24 hours, from an assistant you connected by signing in (not an API key). Anything larger stays in Google Ads or on the campaign's page in VibeAds.
- Keywords in exact or phrase match. Broad match waits until a campaign has 30 conversions.
- Google's suggested ad text (callouts, sitelinks, headlines, new ads) only when every line passes the same check VibeAds runs on its own ads: nothing the business hasn't told VibeAds, such as "Licensed & Insured".
- Ad rotation and images from your landing pages.
Bidding strategy changes, search partners and the Display Network, audiences, and campaign types VibeAds doesn't run are not applied from a chat. Dismissing a recommendation only removes it from Google's list.
How publishing works
A new campaign goes through four tools: generate_strategy drafts it, get_strategy_status follows the draft, apply_strategy builds the draft campaign, and request_publish publishes it. Every step before publishing only creates rows in VibeAds and spends nothing.
generate_strategy takes the business's category as a key such as plumber, hvac or commercial_cleaning. The 32 categories with a knowledge base get their own ad groups, keywords, CPC benchmarks and page templates; see Supported categories. Any other trade is drafted with generic defaults.
Assistants you signed in to
- If you have more than one Google Ads account, the assistant asks which one the campaign goes to. It is published to that account and no other.
- If the campaign is a Search campaign and its daily budget is within the limit you allow assistants ($100 a day unless you change it), the assistant tells you the daily budget and asks you to confirm it.
- Once you confirm, it publishes. VibeAds emails you when the campaign is live, paused (and why) or not published, with a link to its page.
A campaign over your limit, a Display or Meta campaign, or a third assistant publish within 24 hours gets an approval link instead (below). Change the limit, or turn publishing from assistants off, in Settings, Connected apps.
Approval links (every API key, and anything over your limit)
- VibeAds freezes a summary of the campaign: name, daily budget, ad groups and Google Ads account, and returns a single-use link that expires in 24 hours.
- You open it, sign in to VibeAds, review the budget, and press Approve & publish (or Reject).
check_approvalthen reports the publish, and whether the campaign is live.
Published campaigns go live right away and can spend up to their daily budget, billed by Google to your own Google Ads account. If Google Ads has no payment method on file, nothing shows and nothing is spent until you add one, and the assistant says so. Pause any time with pause_campaign or from the campaign's page.
Editing a live campaign
An assistant can make the everyday changes you ask for in the chat: negative keywords, keywords, pausing a keyword or turning it back on, a keyword's or ad group's max CPC, a campaign's daily budget, and starting a paused campaign again. VibeAds decides what runs straight away, not the assistant:
| Change | Runs in the chat | Needs an approval link |
|---|---|---|
| Negative keywords, keywords, pausing or turning on keywords | Always, up to 20 a request | Never |
| Max CPC (Manual CPC campaigns) | Lowering it, or raising it up to double and at most $50 a click | Raising it past double or past $50 (never above $100) |
| Daily budget | Lowering it, or raising it up to 20% | Raising it more than 20%, or any raise through an API key |
| Starting a paused campaign | A Search campaign within your publishing limit, after you confirm its daily budget, twice a campaign a day | Anything else, and always through an API key |
- The 20% is measured from the lowest budget the campaign had in the last 24 hours, so small raises in a row can't add up past it.
- A negative keyword that would block one of the campaign's own keywords is left out, and a keyword a negative blocks isn't added; the assistant says which and why.
- Every change is listed on the campaign's Optimize tab, marked AI assistant, with an Undo button. VibeAds never rolls these back by itself: you asked for them.
- An assistant can make 20 changes to a campaign a day, add up to 100 keywords and negative keywords, and change its budget 3 times. Anything more can be done in VibeAds.
- When you start a campaign from the chat, VibeAds emails you that it started, with a link to its page.
Connecting Google Ads from an assistant
When your VibeAds account has no Google Ads connected yet, the assistant gives you a link. It opens in your browser, checks you are signed in to the right VibeAds account, and takes you to Google's sign-in, where you allow VibeAds to manage your Google Ads. Then tell the assistant it is connected. The link signs nobody in, so it does nothing for anyone else who opens it. Details: Connecting Google Ads.
Importing, pausing and starting again
VibeAds' optimizer and its recommendations cover the campaigns in VibeAds: the ones it published and the ones you import. Reading does not need an import: audit_google_ads_account audits the Search campaigns in a connected account that ran in the last 30 days (up to 25), and get_performance_report reads any campaign's figures. find_campaigns_to_import lists the campaigns in a connected Google Ads account and marks which are already in VibeAds, and import_campaigns brings in up to 3 at a time. Importing copies a campaign's ad groups, keywords, ads, targeting and extensions and changes nothing in Google Ads.
pause_campaign stops a live campaign's ads, and resume_campaign starts a paused one again. Starting a campaign spends money, so it follows the publishing rules above: within your limit after you confirm the daily budget, otherwise through an approval link. Start ads on the campaign's page in VibeAds works too.
Example prompts
- "Show me my Google Ads campaigns in VibeAds."
- "Which search terms are wasting my ad budget?"
- "What should I fix first in my Google Ads account?"
- "Draft a Google Ads campaign for a plumber in Austin, TX with a $1,500 monthly budget."
- "Draft a campaign for my janitorial company in Columbus, OH: office and medical office cleaning, $2,000 a month."
- "Add an ad group for water heater repair to my Pflugerville campaign."
- "Publish the Dallas HVAC campaign."
- "Bring in the campaigns I already have in Google Ads."
- "Pause the Dallas HVAC campaign."
- "Add 'free' and 'diy' as negative keywords on my Austin campaign."
- "Pause the keyword 'cheap plumber'."
- "Set the Drain Cleaning ad group's bid to $4.50."
- "Lower my Austin budget to $40 a day."
- "Turn the Dallas HVAC campaign back on."
Security model
- No Google credentials leave VibeAds. Google Ads connects to VibeAds through Google's own sign-in. An assistant holds a VibeAds sign-in or a
vba_mcp_key, never Google tokens or database keys. Keys are stored hashed. - Everything runs server-side. Every call goes through the VibeAds gateway, which checks the sign-in or key, enforces the Pro and Max gate, rate-limits (60 calls an hour) and logs each call.
- Money needs you. Publishing within your limit takes your confirmation in the chat; anything else takes a link only your own signed-in session can approve. Budget raises over 20% and big bid raises work the same way. An API key can never publish, start a campaign, raise a budget or approve spend.
- A signed-in app's access stops at these tools. Outside them its token cannot change anything in VibeAds, and it never reaches your Google Ads sign-in. Only ChatGPT, Claude and Meta AI can register themselves to sign in, and VibeAds names the platform on the sign-in page.
- Recommendations run the dashboard's path. Approving one decides its session, and smaller changes are measured and rolled back automatically if results get worse.
- Edits you ask for are yours. They run through the same path, are listed on the campaign's Optimize tab with Undo, and are never rolled back automatically.
- Stopping it is instant. Disconnect an app in Settings, Connected apps or revoke a key in Settings, MCP Server Keys. VibeAds also emails you whenever an assistant is connected.
- Open source: read the npm package at github.com/vibeads/mcp.
Technical details
- Endpoint:
https://getvibeads.com/api/mcp, Streamable HTTP. MCP versions 2024-11-05, 2025-03-26, 2025-06-18, 2025-11-25 and 2026-07-28. - Sign-in: OAuth 2.1 authorization code with PKCE. A request without credentials gets HTTP 401 with
WWW-Authenticatepointing to the protected resource metadata athttps://getvibeads.com/.well-known/oauth-protected-resource/api/mcp. Dynamic client registration accepts return addresses on chatgpt.com, claude.ai, claude.com and agent.meta.ai. - API key: the
x-vibeads-api-keyheader,Authorization: Bearer vba_mcp_..., or?key=in the address. - Limits: 60 tool calls an hour, per key or per signed-in user.
FAQ
Can an AI agent publish a Google Ads campaign through this?
Yes, with you deciding. An assistant you signed in to can publish a Search campaign within your daily limit once you confirm its budget in the chat. Anything else, and every publish requested with an API key, gets an approval link that only your own signed-in session can approve.
Which AI clients are supported?
ChatGPT, Claude and Meta AI by signing in, at https://getvibeads.com/api/mcp. Claude Code, Cursor, Cline, Windsurf and other MCP clients with an API key, through npx -y @vibeads/mcp or the hosted server.
Do the write tools cost extra?
They need Pro ($20/mo) or Max ($149/mo) and use the same credits as the dashboard. No separate API fee. Reading works on every plan.
Does it need my Google Ads credentials?
No. Google Ads connects to VibeAds once through Google's sign-in; those tokens stay on VibeAds' servers and never reach the assistant.
What if a key leaks or an assistant misbehaves?
Revoke the key or disconnect the app in Settings and it stops within seconds. Until then it is limited to 60 calls an hour, every call is logged, and a key can never approve spend.