@vibeads/mcp
This MCP server lets Claude (or any MCP client) talk to your VibeAds-managed Google Ads account in natural language โ read-only analytics, diagnostics, and guarded write actions with human approval.
List and inspect campaigns (status, budget, category, ad groups, locations, metrics, landing pages).
Get a 0-100 account health score with a letter grade across 6 dimensions, optionally per campaign.
Analyze search terms to identify wasted spend and winning keywords over a configurable lookback.
Retrieve prioritized diagnostics with severity, current vs benchmark values, and recommended fixes.
Generate draft campaign strategies (keywords, ad copy, 3+ ad groups) and poll their status.
List and approve optimization recommendations one at a time inside safety guardrails.
Request publishing of an existing campaign, returning a human-approval URL, then poll approval status until live.
Read tools are read-only and work on any plan; write tools require Pro/Max and publishing requires browser-based human approval.
Provides read-only access to Google Ads campaign data for local service businesses, offering account health scoring, search term waste analysis, and diagnostic insights without requiring GAQL knowledge.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@vibeads/mcpwhat's my account health score?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@vibeads/mcp
Talk to your Google Ads account from Claude Desktop, Cursor, or any MCP client.
Built for local service businesses โ 33 categories with tuned keywords, CPC benchmarks and funnel templates.
The official Model Context Protocol server for VibeAds. Ask Claude questions like "which search terms are wasting my budget?" or "what's my account health score?" and get answers pulled from your live campaign data.
Unlike generic Google Ads MCP servers, this one is pre-tuned for local service businesses and rolls up 35+ diagnostic rules into a single 0-100 account health score across 6 dimensions. On Pro/Max plans it can also draft campaign strategies, execute guarded optimizations, and kick off publish flows โ with a human always approving anything that spends money.
Features
๐ฏ Local-service-first โ 25 home-service verticals plus 8 professional/lead-gen ones, each with its own keyword seeds, CPC benchmarks, audience segments and funnel template
๐ Account Health Score 0-100 โ weighted across 6 dimensions (Tracking, Keywords, Budget, Creative, Targeting, Performance)
๐ Search term waste detection โ finds every dollar burning on zero-conversion terms
๐ก Diagnostic rollup โ 35+ rules from VibeAds' optimization engine, ranked by severity
โ๏ธ Write tools (Pro/Max) โ draft strategies, approve optimizations, and start publish flows through the VibeAds gateway
๐ Safe by design โ read tools can't modify anything; write tools run inside VibeAds' safety guardrails, and publishing always requires a human to approve in the browser
โก No GAQL required โ ask questions in natural language, get markdown answers
Related MCP server: Google Ads MCP Server
Supported categories
Local & home services (25): plumber ยท HVAC ยท electrician ยท roofer ยท cleaner ยท landscaper ยท pest control ยท painter ยท handyman ยท locksmith ยท garage door ยท appliance repair ยท tree service ยท fencing ยท windows & doors ยท carpet & flooring ยท waterproofing ยท pressure washing ยท pool services ยท junk removal ยท movers ยท auto repair ยท Christmas lighting ยท dentist ยท lawyer
Professional & lead-gen (8): real estate ยท insurance ยท financial services ยท education ยท healthcare ยท consulting ยท SaaS ยท B2B services
Any other category is accepted โ it just falls back to generic defaults instead of the tuned knowledge base.
Installation
Step 1 โ Get your API key
Sign in to your VibeAds account and generate an API key:
Keys start with vba_mcp_ and are scoped to your account only.
Step 2 โ Configure your MCP client
Claude Desktop
Open your config file:
OS | Path |
macOS |
|
Windows |
|
Linux |
|
Add this to the mcpServers block:
{
"mcpServers": {
"vibeads": {
"command": "npx",
"args": ["-y", "@vibeads/mcp"],
"env": {
"VIBEADS_API_KEY": "vba_mcp_YOUR_KEY_HERE"
}
}
}
}Restart Claude Desktop. You should see the VibeAds tools appear in the ๐จ tool menu.
Cursor
Open Settings โ MCP
Click Add Server
Configure:
Name:
vibeadsCommand:
npx -y @vibeads/mcpEnvironment variables:
VIBEADS_API_KEY=vba_mcp_YOUR_KEY_HERE
Cline / Claude Code / other MCP clients
Use the same config as Claude Desktop above. Most MCP clients follow the same schema.
Environment variables
Setup is one env var โ every tool (read and write) runs through the secure server-side VibeAds gateway with your API key.
Variable | Required? | Purpose |
| โ Required | Your |
| Optional | Override the VibeAds backend URL. Defaults to the production endpoint. |
Usage
Once configured, you can ask Claude questions like:
๐ Campaign discovery
"Show me all my VibeAds campaigns"
"Which campaigns are paused?"
"Give me the 5 most recently created campaigns"
๐ฌ Deep dives
"Tell me everything about my plumber campaign in Austin"
"How did my HVAC campaign perform last week?"
"What's the CPA for campaign abc12345?"
๐ Account health
"What's my VibeAds account health score?"
"Which dimension is pulling my score down?"
"Give me the health score just for campaign xyz"
๐ธ Search term analysis
"What search terms are wasting my budget?"
"Show me the top 10 winning keywords from the last 30 days"
"How much am I wasting on terms with zero conversions?"
๐ฉบ Diagnostics + recommendations
"What should I fix first?"
"Show me all critical diagnostics"
"What's wrong with my roofing campaign?"
Available tools
Read tools
Tool | Purpose |
| Enumerate all campaigns with status, budget, category |
| Deep dive on one campaign: metrics, ad groups, targeting, landing pages, diagnostics |
| 0-100 score + letter grade across 6 dimensions, optionally per-campaign |
| Wasted spend + winners from search terms report (configurable lookback + threshold) |
| Full list of active agent-optimize diagnostics with severity + recommended fix |
The read tools are read-only โ they cannot create, modify, pause, or delete anything in your Google Ads account. They run server-side through the VibeAds gateway and need only VIBEADS_API_KEY. Read tools work on any plan, free tier included.
Write tools (Pro/Max)
Write tools talk to the secure server-side VibeAds gateway and need only VIBEADS_API_KEY โ no Supabase keys. Every action runs inside VibeAds' safety guardrails (blast-radius caps, rate limits, auto-rollback if metrics worsen), and publishing always requires a human approving in the browser โ the API key alone can never spend money.
Tool | Purpose |
| Draft a full campaign strategy (keywords, ad copy, 3+ ad groups) server-side. Costs 13 credits. Draft only โ nothing is published, no money is spent |
| Poll a strategy job: status, phase, and drafted ad groups once complete |
| Turn a completed preview into a real draft campaign (ad groups, keywords, targeting, ad copy, extensions). Costs 6 credits + 3 per ad group for image generation. Draft only โ not live, no ad money spent |
| Pending optimization recommendations awaiting approval, with the session + recommendation IDs |
| Execute ONE diagnosed optimization inside the safety guardrails; sibling recommendations stay pending |
| Start the publish flow for a campaign that has ad groups โ returns a human-approval URL because publishing spends real money |
| Poll a publish approval: pending โ approved โ executing โ executed (or rejected / expired / failed) |
From idea to live campaign:
generate_strategydrafts the strategy server-side and returns ajobId. Nothing exists in Google Ads yet.get_strategy_statuspolls that job until it reportscompleted.apply_strategyturns the finished preview into a real draft campaign and returns acampaignId. Still not live, still spending nothing.request_publishtakes thatcampaignIdand returns an approval link.You open the link in your browser, review the campaign + budget, and click Approve (or Reject).
check_approvalpolls until the campaign is live.
Steps 1โ3 create rows only in VibeAds and spend VibeAds credits (13 for step 1; 6 + 3 per ad group for step 3). Step 5 is the only point where ad money is committed, and it can only happen in a browser โ the API key alone can never publish.
Security
Read tools are read-only. They cannot mutate your campaigns, your Google Ads account, or your VibeAds settings.
Write tools are guarded. Every write action runs server-side inside VibeAds' safety guardrails (blast-radius caps, rate limits, automatic rollback), and publishing always requires a human approving in the browser โ the API key can never approve ad spend by itself.
Keys are hashed with SHA-256 before storage. The full key is only shown once at creation.
Revocable any time from
https://getvibeads.com/app/settings/mcp.Usage is logged per-key: last-used timestamp and request count.
Row-level isolation โ each key is scoped to a single VibeAds user. Keys cannot see other users' data.
Optional expiry โ set expiration dates on keys for service accounts / temporary access.
For maximum security, rotate your API key whenever a device changes hands or an engagement ends.
Requirements
Node.js โฅ 20 (for
npxruntime)Active VibeAds account โ free tier is sufficient to generate a key
Pro or Max plan โ required for the write tools (read tools work on any plan)
At least one published campaign โ diagnostics require synced data from Google Ads
How it compares
VibeAds MCP | GoMarble MCP | Google Ads MCP (official) | |
Setup time | 2 min | 15 min | 30 min |
OAuth required | โ (API key only) | โ | โ |
GAQL knowledge required | โ | โ | โ |
Local service tuning | โ | โ | โ |
Account health score | โ 6 dimensions | โ | โ |
Pre-built diagnostics | โ 35+ rules | โ | โ |
Multi-account | โ | โ | โ |
Guarded write actions | โ human-approved publish | โ | โ |
When to use VibeAds MCP: You run a local service business (or manage ads for one) and want pre-tuned insights without learning GAQL.
When to use GoMarble / Google Ads MCP: You need to run custom GAQL queries or work with non-service-business campaigns (e-commerce, B2B SaaS, etc.).
The three can coexist โ install whichever ones fit your workflow.
Troubleshooting
"Authentication failed"
Make sure your key starts with
vba_mcp_Generate a new key at https://getvibeads.com/app/settings/mcp
Check that the key hasn't been revoked or expired
"No diagnostic data yet"
Diagnostics are generated every 6 hours by the VibeAds agent. If you just published a campaign, wait 6-12 hours for the first run.
"No search term data found"
Search term sync runs every 6 hours. For new campaigns, allow 24-48 hours for meaningful data to accumulate.
MCP client can't find the server
Make sure you have Node.js 20+ installed: node --version. Claude Desktop and Cursor both shell out to npx, so Node must be in your PATH.
Contributing
This is an open-source MIT package. Issues and PRs welcome at: https://github.com/vibeads/mcp/issues
License
MIT ยฉ VibeAds
Available Tools
11 toolsapprove_recommendationA
Approve and execute ONE already-diagnosed optimization recommendation inside VibeAds' safety guardrails (blast-radius caps, rate limits, auto-rollback if metrics worsen). Other pending recommendations on the session stay pending โ approving one never rejects or executes the rest.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | The optimization session containing the recommendation (from list_recommendations). | |
| recommendationId | Yes | The single recommendation to approve and execute (from list_recommendations). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses key behaviors: executing exactly one recommendation, safety guardrails (blast-radius caps, rate limits, auto-rollback), and non-interference with other pending recommendations. This is strong for a mutation tool, though it does not mention return values or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, directly stating the action and then the safety constraints. No filler or repetition; every clause adds meaningful information. It is well-structured for quick parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 required string params, no output schema, no nested objects), the description covers purpose, scope, safety features, and effect on other recommendations. It could mention the return value, but overall it is sufficiently complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters described as 'from list_recommendations', making the parameters self-explanatory. The description adds minimal semantic value beyond 'ONE' and 'already-diagnosed', which slightly reinforces the schema but does not compensate for any gaps. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'Approve and execute' and specifies the resource as 'ONE already-diagnosed optimization recommendation', clearly distinguishing it from sibling tools like list_recommendations or check_approval. It conveys the exact action and scope without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes clear usage context: it is for approving and executing an already-diagnosed recommendation, with safety guardrails. It also clarifies that other pending recommendations remain untouched, which hints at when this tool is appropriate. It does not explicitly name alternatives, but the context strongly implies its niche.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_approvalA
Check the status of a publish approval created with request_publish. Status is one of: pending, approved, rejected, expired, executing, executed, failed. While pending, remind the user to open the approval link in their browser โ approval cannot happen through the API. Once executed, the campaign is live in Google Ads and serving ads immediately (it is not paused) โ tell the user it is now spending, and that they can pause it from the dashboard.
| Name | Required | Description | Default |
|---|---|---|---|
| approvalId | Yes | The approvalId returned by request_publish. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It excels by explaining the action implications: approval cannot be completed via API, the campaign is live and spending immediately upon execution, and the user can pause from the dashboard. It also lists all statuses, giving a complete picture of possible outcomes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of two sentences that front-load the purpose in the first sentence and provide actionable guidance in the second. It avoids repetition, fluff, and overly technical jargon, earning its words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter, no output schema, and no annotations, the description is remarkably complete. It explains the tool's purpose, enumerates all possible statuses, and gives user-facing instructions for the two critical states (pending and executed). The only omission is the exact return format, but the description effectively conveys that the status is the key output, making it sufficient for an AI agent to invoke and interpret correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the single parameter approvalId as 'The approvalId returned by request_publish,' providing 100% schema coverage. The description reiterates this connection but adds no additional semantic detail beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Check the status of a publish approval created with request_publish.' It uses a specific verb ('check') and resource ('publish approval'), differentiates from siblings by referencing the companion tool request_publish, and enumerates the exact status values, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (after request_publish) and what to do with the result (remind user to open the approval link while pending, notify them the campaign is live and spending once executed). It also states a limitation ('approval cannot happen through the API'), giving a when-not perspective. However, it does not explicitly name alternative tools or explicitly say 'use this when X, not Y,' which prevents a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_strategyA
Preview a DRAFT campaign strategy server-side: keywords, ad copy, and 3+ ad groups tailored to a service category, budget, and locations. Costs 13 VibeAds credits. Returns a jobId โ poll get_strategy_status with that jobId. IMPORTANT: this is a preview only. It does NOT create a publishable campaign, so request_publish cannot act on it; the user applies the draft at https://getvibeads.com/app/new-campaign to turn it into a real campaign. Nothing is published and no ad money is spent.
| Name | Required | Description | Default |
|---|---|---|---|
| budget | No | Monthly ad budget in USD. Defaults to 1500. | |
| category | Yes | Service category, e.g. "plumber", "hvac", "electrician", "roofer". Custom categories are accepted. | |
| locations | No | Target locations for the campaign. Omit to let the server infer from the account's business profile. | |
| businessName | No | Business name to use in ad copy and branding. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden of behavioral disclosure. It mentions the 13-credit cost, the asynchronous nature (server-side, returns jobId), that nothing is published, no ad money is spent, and that the draft must be applied manually. This is thorough and transparent for a preview tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary purpose and returns, then covers cost, jobId polling, and the crucial limitation about publishability. Every sentence serves a distinct informative function, and the warning is important to prevent misuse. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description explains the return value ('Returns a jobId') and the necessary next step ('poll get_strategy_status'). It also covers cost, side effects (none), and how to eventually create a real campaign. Given the tool's async nature and credit cost, the description is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions already provide high coverage (100%) of all four parameters, so the baseline is 3. The tool description does not add much beyond what's in the schema; it reiterates category, budget, and locations but doesn't provide additional parameter semantics such as types, constraints, or relationships beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Preview a DRAFT campaign strategy server-side' with specifics (keywords, ad copy, 3+ ad groups) and explicitly distinguishes it from publish-related siblings by noting it does NOT create a publishable campaign. The verb 'Preview' plus resource 'campaign strategy' and output 'jobId' make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: it names the follow-up tool 'get_strategy_status' to poll with the returned jobId, and explicitly states that 'request_publish cannot act on it', telling the user to apply the draft via a URL instead. This clearly delineates when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_health_scoreA
Compute a 0-100 account health score across 6 dimensions (Tracking, Keywords, Budget, Creative, Targeting, Performance) by rolling up the latest diagnostics from all campaigns. Returns a letter grade A-F and per-dimension breakdown. Optionally scope to a single campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | No | Optional: scope the health score to a single campaign. If omitted, returns account-level score across all campaigns. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the computation method ('rolling up the latest diagnostics'), the output format (letter grade and breakdown), and the optional scoping. It doesn't mention permissions or side effects, but given the read-only nature of computing a health score, the disclosure is adequate and adds meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose, and avoids extraneous details. Each sentence adds value: the first explains what the score is and how it's computed, the second describes the return values and optional scoping.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description appropriately explains the return values (letter grade and per-dimension breakdown). It covers the essential behavior and edge cases (account-level vs campaign-level scope). It doesn't explain edge cases like no campaigns or grade thresholds, but these are not critical for using the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the campaign_id parameter fully documented in the schema itself. The description only repeats 'Optionally scope to a single campaign', adding no new semantic meaning beyond what the schema already provides. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Compute a 0-100 account health score across 6 dimensions' and details the output ('Returns a letter grade A-F and per-dimension breakdown'). This distinguishes it from sibling tools like get_diagnostics, which likely provides raw diagnostics rather than an aggregated health score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by explaining that it rolls up diagnostics from all campaigns and optionally scopes to a single campaign. It implies when to use this tool (when an overall health score is needed) versus pulling raw diagnostics, but does not explicitly mention alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_campaign_detailsA
Get a detailed view of a single VibeAds campaign: budget, bidding strategy, ad groups, targeted locations, landing pages, last 7 days of performance metrics (impressions, clicks, CTR, CPC, spend, conversions, CPA), and any active diagnostics.
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | The VibeAds campaign UUID. Can be the full UUID or the short 8-character prefix shown in list_campaigns (e.g. "a1b2c3d4"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explicitly states that performance metrics cover the last 7 days and that active diagnostics are included. This reveals the time window and scope of results. It does not mention response format or error handling, but for a read-only get operation, it is sufficiently transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, efficiently enumerating all included elements in a compact, readable format. It is front-loaded with the core purpose and avoids unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter and no output schema, the description provides a thorough list of what will be returned, including specific metrics and diagnostics. It is complete for its complexity, giving the agent a full picture of the tool's output without needing an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the single parameter (campaign_id), including details about full UUID vs. short prefix. The tool description itself adds no additional parameter information. Per the rubric, baseline 3 applies when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: retrieving a detailed view of a single VibeAds campaign. It lists the specific data returned (budget, bidding strategy, ad groups, locations, landing pages, performance metrics, diagnostics), making it unmistakably distinct from siblings like list_campaigns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: you'd use this when you need comprehensive details for one campaign. However, it does not explicitly mention alternatives or when not to use it, such as 'for a list of campaigns, use list_campaigns' or 'for diagnostics only, use get_diagnostics'. The guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_diagnosticsA
Return the full list of active diagnostics across all campaigns with severity (critical / high / medium / low), affected metric, current value vs benchmark, and recommended action. Can filter by severity and scope to a specific campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max number of diagnostics to return (default 20, max 50). | |
| severity | No | Filter by severity level. | all |
| campaign_id | No | Optional: scope to a specific campaign. Otherwise returns diagnostics across all campaigns. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return fields (severity, affected metric, current value vs benchmark, recommended action) and filtering options, but it claims a 'full list' while the schema indicates a default limit of 20, which is a minor inaccuracy that could mislead an agent. It also doesn't mention response shape or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the main purpose and includes relevant return details. Every word earns its place, though 'full' overstates the limit behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description provides useful return fields and filter options, but it lacks explicit response shape and pagination behavior. The 'full list' misstatement and absence of limit handling details leave gaps given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with descriptions, including defaults for limit and severity and the optional campaign_id. The description adds no substantive parameter semantics beyond the schema; it merely restates severity filtering and campaign scoping, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Return' and identifies the resource as 'diagnostics' with scope 'across all campaigns', clearly distinguishing it from siblings like get_account_health_score and get_campaign_details. It also lists the return fields, which solidifies the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states that the tool returns all active diagnostics and can be filtered by severity and campaign, giving a strong sense of when to use it. However, it does not explicitly mention when not to use it or name alternatives, so the agent must infer from the diagnostics focus that other sibling tools are for different purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_search_term_analysisA
Analyze search terms from the last N days to find wasted spend (high-cost terms with zero conversions) and winning terms (high conversion rate). Returns a ranked list of terms to negate plus positive terms worth doubling down on. Can be scoped to a single campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| min_cost | No | Minimum USD cost threshold for a term to be considered 'wasted'. Defaults to $10. | |
| campaign_id | No | Optional: scope to a specific campaign. Otherwise analyzes all campaigns. | |
| lookback_days | No | How many days of search term data to analyze (max 90). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing behavior. It clearly states that the tool returns a ranked list of terms to negate and positive terms, and that it can be scoped to a campaign. The 'Analyze' verb implies a read-only operation, and no side effects are mentioned. It does not detail permissions or rate limits, but for an analysis tool, the output and scoping are well described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action and purpose, then summarizing the output and scoping. No word is wasted, and it avoids repetition of schema details. It is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity tool with a complete schema and no output schema, the description sufficiently explains what the tool does and returns. It covers the key use cases (wasted spend and winning terms) and the optional campaign scoping. It does not elaborate on ranking algorithm or thresholds, but that is not necessary for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the three parameters, so the baseline is 3. The description adds value by connecting the parameters to their purpose: 'high-cost terms with zero conversions' clarifies min_cost, 'last N days' aligns with lookback_days, and 'scoped to a single campaign' directly explains campaign_id. This extra context enriches the schema-only definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Analyze') with a clear resource ('search terms') and explicitly states the twofold purpose: finding wasted spend (high-cost terms with zero conversions) and winning terms (high conversion rate). It distinguishes itself from sibling tools like list_campaigns and get_campaign_details by focusing on search term analysis rather than campaign listing or details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: to analyze search terms for optimization opportunities. It mentions optional scoping to a single campaign, which is a usage nuance. However, it does not explicitly name any alternative tools or state when not to use it, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_strategy_statusA
Poll the status of a strategy generation job started with generate_strategy. Returns status and phase while running, and the drafted ad groups (with keyword and headline counts) once complete. Poll every 10-15 seconds until status is completed or failed. The finished draft is a preview: show it to the user and point them to https://getvibeads.com/app/new-campaign to apply it as a real campaign โ request_publish cannot publish a preview.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | The jobId returned by generate_strategy. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses the two phases (running vs complete), what is returned in each phase, and the crucial fact that the draft is only a preview and not publishable via request_publish. This is rich behavioral context beyond a simple 'get status' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with purpose, then usage timing, then an important caveat. Every sentence earns its place with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter polling tool without an output schema, the description adequately covers what the tool does, when to use it, what it returns, and a critical limitation. No important context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes jobId as 'The jobId returned by generate_strategy' with 100% coverage. The description adds no new parameter-specific information; it only reinforces the same provenance. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool polls the status of a strategy generation job started with generate_strategy, and specifies what it returns (status and phase while running, drafted ad groups once complete). It distinguishes itself from siblings like generate_strategy (which starts the job) and request_publish (which cannot publish previews).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: poll every 10-15 seconds until status is completed or failed. It also tells the agent what to do with the result (show the preview and point to the app URL) and explicitly warns that request_publish cannot publish a preview, effectively naming an alternative to avoid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_campaignsA
List all Google Ads campaigns managed by VibeAds for the authenticated user. Returns name, status, category, budget, and high-level metadata. Use this first to discover which campaigns exist before drilling in.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of campaigns to return (max 100). | |
| status | No | Filter campaigns by status. Defaults to all. | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It discloses the scope (managed by VibeAds, for the authenticated user) and the return fields (name, status, category, budget, high-level metadata). However, it does not explicitly state that this is a read-only operation with no side effects, nor does it mention pagination or that the 'all' default is constrained by the limit parameter. This is adequate but leaves some behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences. The first sentence states the action and resource. The second provides return fields and usage guidance. Every word contributes value, and the critical information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two well-documented parameters and no output schema, the description covers the essentials: what it lists, for whom, and what data is returned. The only notable gap is the lack of explicit mention that the result may be paginated/limited, which could mislead an agent expecting truly 'all' campaigns. Otherwise, it is complete enough given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both limit and status have descriptive text and defaults. The description adds no extra parameter-level detail, such as how limit interacts with 'List all' or how status filtering works. Since the schema already documents the parameters, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and clearly identifies the resource ('Google Ads campaigns managed by VibeAds for the authenticated user'). It also differentiates from siblings by positioning itself as the discovery tool ('Use this first to discover which campaigns exist before drilling in'), which contrasts with get_campaign_details for deeper inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use it ('Use this first') and that it precedes drilling into details. It does not name alternatives or state when not to use it, but the sibling tool names make the sequencing clear. This is strong contextual guidance, though not a full when/when-not breakdown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recommendationsA
List pending optimization recommendations awaiting approval, grouped by optimization session. Each recommendation includes action, reason, risk level, blast radius, auto-eligibility, and estimated impact, plus the sessionId + recommendationId needed for approve_recommendation. Optionally scope to one campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| campaignId | No | Optional: scope to a single campaign. Otherwise returns pending recommendations across all campaigns. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the tool lists pending items, groups them by optimization session, includes detailed fields (action, reason, risk level, etc.), and supports optional campaign scoping. The term 'List' implies a read-only operation, which is the key behavioral trait. It doesn't mention pagination or empty-result behavior, but essential behavior is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states the main purpose and grouping; the second details return contents and optional scoping. It is front-loaded, concise, and every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one optional parameter and no output schema. The description compensates well by listing return fields, grouping behavior, optional scope, and the connection to approve_recommendation. Minor omissions like pagination and sorting are not critical for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single optional campaignId parameter, and its description already explains scope. The tool description repeats 'Optionally scope to one campaign' but adds no new semantic meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' and clearly defines the resource: pending optimization recommendations awaiting approval. It also distinguishes itself from sibling tools like approve_recommendation by noting it returns the sessionId and recommendationId needed for that action, making its role clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when you need pending recommendations awaiting approval, and it explicitly mentions the IDs needed for approve_recommendation, signaling a clear workflow. It also notes optional campaign scoping, though it doesn't explicitly list alternatives or exclude other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_publishA
Start the publish flow for an EXISTING campaign (one that already has ad groups โ find it with list_campaigns; a generate_strategy preview does not qualify). Publishing spends real money, so this returns a human-approval URL instead of publishing directly โ SHOW the approvalUrl to the user and ask them to open it in their browser, review the budget, and approve โ on approval the campaign goes LIVE immediately and can start spending its daily budget. The API key cannot approve a publish. After the user approves, poll check_approval with the returned approvalId.
| Name | Required | Description | Default |
|---|---|---|---|
| campaignId | Yes | The VibeAds campaign ID to publish to Google Ads (from list_campaigns or a completed strategy job). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but the description fully carries the burden: it discloses that publishing spends real money, that a human-approval URL is returned, that the API key cannot approve, and that the campaign goes live immediately after approval.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Though detailed, every sentence adds essential information about the approval flow. It is well-structured and front-loaded with the core action, then explains the human-approval process and follow-up polling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and no annotations, but the description explains the return values (approvalUrl, approvalId) and the full flow with check_approval. It is complete for a complex publish action with human approval.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters, and the description adds meaningful context beyond the schema: the campaignId must be an existing campaign with ad groups, and it references list_campaigns as the source. This is more than a baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'Start the publish flow' and the resource 'EXISTING campaign', and distinguishes from generate_strategy previews. It also explains the outcome (returns approval URL, campaign goes live on approval).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use: for existing campaigns found via list_campaigns, and explicitly excludes generate_strategy previews. It also directs the follow-up action to poll check_approval with the approvalId.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v0.2.5- First observed
approve_recommendation - First observed
check_approval - First observed
generate_strategy - First observed
get_account_health_score - First observed
get_campaign_details - First observed
get_diagnostics - First observed
get_search_term_analysis - First observed
get_strategy_status - First observed
list_campaigns - First observed
list_recommendations - First observed
request_publish
TDQS
Scored across 11 tools
Each tool targets a distinct action and resource: listing vs details, analysis types (health, search terms, diagnostics), strategy generation and polling, recommendations list/approve, publish and approval check. No two tools appear to overlap in purpose.
All tools follow a consistent verb_noun pattern in snake_case (list_, get_, generate_, approve_, request_, check_), with clear object nouns. Minor compound names don't break the pattern.
11 tools is well-scoped for a Google Ads management server, covering discovery, analysis, strategy, recommendations, and publishing without bloat. Each tool addresses a distinct stage in the workflow.
The set covers the full lifecycle of analyzing, optimizing, and publishing campaigns. Gaps like creating/pausing campaigns are intentionally delegated to the web UI, so agents can still navigate the core workflow, but direct CRUD beyond reading/publishing is missing.
Maintenance
Related MCP Connectors
- MCP AdsOAuthcom.mcp-ads
Run Google Ads, Meta Ads, GA4 and Search Console from chat: read, audit and launch campaigns.
Inspect an approved ad account and first-party signal health, then propose policy-gated actions.
Run Google Ads and Meta Ads from ChatGPT or Claude: audit wasted spend, create and manage campaigns.
Google Ads MCP server โ manage campaigns, keywords, and metrics.
Related MCP Servers
- AlicenseDqualityFmaintenanceEnables LLMs to interact with Google Ads accounts via tools like list_accounts and search_stream, using a standardized Model Context Protocol integration.211Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables LLMs to interact with the Google Ads API through the Model Context Protocol, allowing natural language queries for campaign management and metrics.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables querying and managing Google Ads campaigns, keywords, assets, and more via natural language, with support for multiple MCP clients.88 npm1MIT
- FlicenseNot gradedqualityCmaintenanceA Model Context Protocol (MCP) server that exposes the Google Ads API to LLM clients, enabling account inspection, GAQL queries, performance reporting, and campaign management.-