Skip to main content
Glama

@vibeads/mcp

npm version License: MIT 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:

โ†’ Generate 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

~/Library/Application Support/Claude/claude_desktop_config.json

Windows

%APPDATA%\Claude\claude_desktop_config.json

Linux

~/.config/Claude/claude_desktop_config.json

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

  1. Open Settings โ†’ MCP

  2. Click Add Server

  3. Configure:

    • Name: vibeads

    • Command: npx -y @vibeads/mcp

    • Environment 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

VIBEADS_API_KEY

โœ… Required

Your vba_mcp_... key. This is the only credential any tool needs.

VIBEADS_SUPABASE_URL

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

list_campaigns

Enumerate all campaigns with status, budget, category

get_campaign_details

Deep dive on one campaign: metrics, ad groups, targeting, landing pages, diagnostics

get_account_health_score

0-100 score + letter grade across 6 dimensions, optionally per-campaign

get_search_term_analysis

Wasted spend + winners from search terms report (configurable lookback + threshold)

get_diagnostics

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

generate_strategy

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

get_strategy_status

Poll a strategy job: status, phase, and drafted ad groups once complete

apply_strategy

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

list_recommendations

Pending optimization recommendations awaiting approval, with the session + recommendation IDs

approve_recommendation

Execute ONE diagnosed optimization inside the safety guardrails; sibling recommendations stay pending

request_publish

Start the publish flow for a campaign that has ad groups โ€” returns a human-approval URL because publishing spends real money

check_approval

Poll a publish approval: pending โ†’ approved โ†’ executing โ†’ executed (or rejected / expired / failed)

From idea to live campaign:

  1. generate_strategy drafts the strategy server-side and returns a jobId. Nothing exists in Google Ads yet.

  2. get_strategy_status polls that job until it reports completed.

  3. apply_strategy turns the finished preview into a real draft campaign and returns a campaignId. Still not live, still spending nothing.

  4. request_publish takes that campaignId and returns an approval link.

  5. You open the link in your browser, review the campaign + budget, and click Approve (or Reject).

  6. check_approval polls 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 npx runtime)

  • 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"

"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 tools
approve_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesThe optimization session containing the recommendation (from list_recommendations).
recommendationIdYesThe single recommendation to approve and execute (from list_recommendations).

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
approvalIdYesThe approvalId returned by request_publish.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
budgetNoMonthly ad budget in USD. Defaults to 1500.
categoryYesService category, e.g. "plumber", "hvac", "electrician", "roofer". Custom categories are accepted.
locationsNoTarget locations for the campaign. Omit to let the server infer from the account's business profile.
businessNameNoBusiness name to use in ad copy and branding.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaign_idNoOptional: scope the health score to a single campaign. If omitted, returns account-level score across all campaigns.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaign_idYesThe VibeAds campaign UUID. Can be the full UUID or the short 8-character prefix shown in list_campaigns (e.g. "a1b2c3d4").

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax number of diagnostics to return (default 20, max 50).
severityNoFilter by severity level.all
campaign_idNoOptional: scope to a specific campaign. Otherwise returns diagnostics across all campaigns.

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
min_costNoMinimum USD cost threshold for a term to be considered 'wasted'. Defaults to $10.
campaign_idNoOptional: scope to a specific campaign. Otherwise analyzes all campaigns.
lookback_daysNoHow many days of search term data to analyze (max 90).

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYesThe jobId returned by generate_strategy.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of campaigns to return (max 100).
statusNoFilter campaigns by status. Defaults to all.all

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdNoOptional: scope to a single campaign. Otherwise returns pending recommendations across all campaigns.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYesThe VibeAds campaign ID to publish to Google Ads (from list_campaigns or a completed strategy job).

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 11 tool updatesv0.2.5
    • First observedapprove_recommendation
    • First observedcheck_approval
    • First observedgenerate_strategy
    • First observedget_account_health_score
    • First observedget_campaign_details
    • First observedget_diagnostics
    • First observedget_search_term_analysis
    • First observedget_strategy_status
    • First observedlist_campaigns
    • First observedlist_recommendations
    • First observedrequest_publish

TDQS

A4.4/5.0

Scored across 11 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables querying and managing Google Ads campaigns, keywords, assets, and more via natural language, with support for multiple MCP clients.
    88 npm
    1
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    A Model Context Protocol (MCP) server that exposes the Google Ads API to LLM clients, enabling account inspection, GAQL queries, performance reporting, and campaign management.
    -