Skip to main content
Glama

AdOps MCP

CSV-first analytics & optimization for Google Ads + Meta Ads — inside Claude, Cursor, and any MCP client.

License: MIT TypeScript MCP

Export a CSV from Google Ads or Meta Ads Manager → import into AdOps → ask your AI assistant anything about your campaigns.

No OAuth. No developer tokens. No API approval queues. Your data stays on your machine.


Why CSV-first?

Google Ads API and Meta Marketing API are powerful but gated: developer token approval takes days, Meta app review takes weeks, OAuth flows are fragile. For most advertisers those barriers never clear.

AdOps takes a different path. Every ad platform's dashboard already has a Download / Export button that produces a CSV of exactly what you care about: campaign performance, day-segmented metrics, spend, conversions, ROAS. AdOps reads that CSV and runs the same analysis you'd get from a $200/mo optimization suite — anomaly detection, budget allocation, A/B significance, forecasting, industry benchmarks — directly inside your AI assistant.

You stay in control of your data. You don't hand credentials to a third party. You don't wait 3 weeks for a review.


Related MCP server: google-ads-mcp

Features

  • 17 MCP tools covering the full ad analytics lifecycle

  • 4 MCP resources for at-a-glance dashboards

  • CSV import from Google Ads Editor, Google Ads web UI, and Meta Ads Manager — with automatic format detection (US vs European number formatting, CRLF vs LF, BOM handling)

  • Unified cross-platform schema — Google and Meta campaigns normalized into a single UnifiedCampaign / UnifiedMetrics model

  • AI-powered recommendations — budget reallocation, scaling high-ROAS campaigns, pausing zero-conversion ones

  • Bulk-edit CSV export — turn recommendations into Google Ads Editor / Meta Ads Manager CSVs you can paste straight into the dashboard for one-click bulk updates

  • Statistical anomaly detection — CPC spikes, CTR drops, spend surges, sensitivity-configurable

  • A/B test analysis with confidence scoring

  • 9-vertical industry benchmarks built-in (eCommerce, SaaS, B2B, etc.)

  • Spend & conversion forecasting (7/14/30 days)

  • Demo mode — seed a realistic portfolio to try the tools before importing your own data

  • 91 automated tests — TypeScript strict mode, Zod validation throughout


Quick Start

npm i adops-mcp-server

Add to your MCP client (Claude Desktop claude_desktop_config.json, Cursor, VS Code, Windsurf):

{
  "mcpServers": {
    "adops": {
      "command": "node",
      "args": ["path/to/node_modules/adops-mcp-server/dist/index.js"]
    }
  }
}

Restart your client. Then, inside Claude:

> Seed demo data so I can explore AdOps

(calls ad_demo_seed)

Or import your real data:

> Import ~/Downloads/google-ads-report.csv as a Google Ads CSV

(calls ad_csv_import with platform=google, csv_path=...)


Exporting CSV from Your Ad Dashboard

Google Ads

  1. Open ads.google.comCampaigns view

  2. (Optional) Click Segment → Day in the toolbar for daily metrics

  3. Click Download (⬇) icon → choose .csv format

  4. Save to disk, give the absolute path to ad_csv_import

Meta Ads Manager

  1. Open business.facebook.comAds Manager

  2. Switch to Campaigns tab (not Ad Sets or Ads — campaign-level rollups)

  3. (Optional) Breakdown → Time → Day for daily metrics

  4. Click Reports → Export → Campaign performance (.csv)

  5. Save to disk, give the absolute path to ad_csv_import

Both exports work out-of-the-box with or without day segmentation. Without a Day column, you get one aggregated metric row per campaign. With Day segmentation, you get daily time-series data — which powers forecasting and anomaly detection properly.


Tools

Tool

Description

ad_demo_seed

Seed a realistic cross-platform demo portfolio (8 campaigns, 30 days of metrics) to try AdOps before importing real data

ad_csv_import

Import a Google Ads or Meta Ads CSV export — every other tool operates on this data

ads_export_recommendations

Export budget_analyze recommendations as Google Ads Editor CSV, Meta Ads Manager CSV, JSON, or Markdown — one bulk-paste and your ad dashboard reflects the AI's plan

platform_connect

Register a data source connection manually (alternative to CSV import, for scripted workflows)

campaign_list

List and filter campaigns across all imported platforms

campaign_create

Add a campaign manually (useful for what-if planning)

campaign_update

Update campaign settings in local storage (budget, status, bidding, schedule)

campaign_pause_resume

Batch pause or resume up to 50 campaigns

ads_report

Generate unified cross-platform performance report

budget_analyze

Analyze budget allocation, produce scaling/pausing recommendations

budget_reallocate

Transfer budget between campaigns across platforms

audience_insights

Demographic / geographic / device breakdowns

creative_specs

Platform-specific image, video, and text requirements reference

anomaly_detect

Detect performance anomalies with configurable sensitivity

ab_test_analyze

Compare two campaigns with statistical significance testing

competitor_benchmark

Compare your metrics against industry averages (9 verticals)

forecast_spend

Forecast spend, conversions, ROAS for the next 7/14/30 days


Resources

Resource

Description

ads://overview

Cross-platform dashboard summary

ads://campaigns

All active campaigns with key metrics

ads://budget

Budget allocation across platforms

ads://alerts

Recent performance anomalies and warnings


Unified Metrics Schema

AdOps normalizes metrics across platforms:

Metric

Formula

Notes

CTR

clicks / impressions × 100

Click-through rate (%)

CPC

spend / clicks

Cost per click

CPM

spend / impressions × 1000

Cost per 1000 impressions

ROAS

conversion_value / spend

Return on ad spend

CPA

spend / conversions

Cost per acquisition

Conversion Rate

conversions / clicks × 100

%

CSV column mapping:

AdOps Field

Google Ads CSV

Meta Ads CSV

spend

Cost (USD equivalent auto-converted if micros)

Amount spent (USD/EUR/...)

impressions

Impressions

Impressions

clicks

Clicks

Link clicks

conversions

Conversions

Results (Purchases/Leads/etc.)

conversion_value

Conv. value

Purchases conversion value

reach

Reach (Meta-only)

quality_score

Quality Score (if present)

— (Google-only)

European locale numbers (125,50 = 125.50) and semicolon-delimited CSVs are auto-detected.


Configuration

AdOps is stateless from the network's point of view — no API keys, no OAuth. The only configuration is where it persists imported data:

Variable

Description

Default

ADOPS_DATA_DIR

Directory for JSON persistence

./data

All other behavior is controlled via tool arguments.


Pricing

Tier

Price

Features

Free

$0

1 imported CSV per day, demo mode, all 17 tools read-only

Pro

€24 lifetime

Unlimited imports, full CRUD, all analytics tools

Agency

$59/mo

Multi-account, white-label reports, priority support

Available via GitHub (self-hosted, free) or the MCPize marketplace (managed).


Development

git clone https://github.com/enzoemir1/adops-mcp.git
cd adops-mcp
npm ci
npm run build
npm test           # 91 tests across 10 suites
npm run inspect    # Open MCP Inspector

Tests

91 tests covering:

  • CSV parser (11 tests): RFC 4180 quoting, BOM, European/US number formats, delimiter detection

  • Google Ads CSV import (7 tests): campaigns report, day segmentation, objective mapping, European locale

  • Meta Ads CSV import (5 tests): Meta-specific columns, currency detection from header, objective mapping, reach/frequency capture

  • Export recommendations (8 tests): Google Ads Editor CSV format, Meta Ads Manager CSV format, JSON wrapper, Markdown rendering, min_delta_pct filter, limit, by_type summary

  • Storage: Connection CRUD, campaign search, metrics aggregation, batch inserts

  • Analytics: Metric calculations, performance reports, forecasting, benchmarks

  • Optimizer: Budget analysis, reallocation, scaling/pausing recommendations

  • Anomaly: CPC spike detection, conversion drops, sensitivity, severity sorting

  • E2E Workflow: 14 real user scenarios


Roadmap

  • v1.3 — Add Google Ads Editor .csv.gz and Excel .xlsx support

  • v1.4 — Live Google Ads / Meta Ads API integration as an optional enterprise feature (BYOK — bring your own developer token + app review)

  • v2.0 — Multi-user server mode with JWT auth for team deployments


Pro License

AdOps ships in Free modead_demo_seed, ad_csv_import, platform_connect, campaign_list, campaign_create, campaign_update, campaign_pause_resume, ads_report, budget_reallocate, audience_insights, and creative_specs are open. The following tools require a Pro license:

  • ads_export_recommendations — bulk-edit CSV export for Google Ads Editor / Meta Ads Manager

  • budget_analyze — AI budget allocation analysis with action recommendations

  • anomaly_detect — statistical anomaly detection

  • ab_test_analyze — A/B test z-test with significance + uplift

  • forecast_spend — 7/14/30-day spend & ROAS forecast

  • competitor_benchmark — industry benchmark comparison

Buy a Pro License (€24, lifetime, 3 machines): https://automatiabcn.lemonsqueezy.com/buy/1525c929-832c-4472-a88a-58edbfa4e87b

Or get the Indie MCP Stack Bundle (€69, all 4 servers).

export LEMONSQUEEZY_LICENSE_KEY=YOUR-KEY-HERE

Or in your MCP client config:

{
  "mcpServers": {
    "adops-mcp": {
      "command": "npx",
      "args": ["-y", "adops-mcp-server"],
      "env": { "LEMONSQUEEZY_LICENSE_KEY": "YOUR-KEY-HERE" }
    }
  }
}

Validation is cached locally for 24 h — fully offline-capable after first run.


License

MIT License. See LICENSE for details.

Built by Automatia BCN.

Available Tools

17 tools
ab_test_analyzeA/B Test AnalysisA
Read-onlyIdempotent

Compare two campaigns as A/B test variants and determine statistical significance. Input: campaign_id_a, campaign_id_b, primary_metric ("ctr"|"conversion_rate"|"roas"|"cpc"|"cpa"). Runs a two-proportion z-test (or means comparison for continuous metrics), computes p-value and 95% confidence interval, identifies the winner, and returns {winner, confidence_level, p_value, lift_percent, sample_size_a, sample_size_b, significant (bool), recommendation}. Use with lift ≥5% and p<0.05 as a decision rule.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaign_id_aYesVariant A campaign
campaign_id_bYesVariant B campaign
primary_metricNoctr

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond annotations by detailing the statistical method (two-proportion z-test or means comparison), outputs (p-value, CI, winner, etc.), and decision criteria. No contradiction with annotations (readOnlyHint=true, idempotentHint=true are consistent with analysis).

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?

Concise and well-structured: purpose first, then inputs, method, output, and guidelines. 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?

Fully describes inputs, method, and output fields despite lacking output schema. However, lacks prerequisites (e.g., minimum sample size, campaign validity) that could help an agent avoid errors.

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?

Adds meaning beyond schema: lists five possible primary_metric values (including 'cpc' not in schema), explains input format, and describes output fields. This compensates for schema parameters with limited description.

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?

Description clearly specifies the tool compares two campaigns via A/B test analysis, determining statistical significance. It distinguishes from sibling tools like campaign_create or campaign_list, which are unrelated.

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?

Provides a decision rule ('lift ≥5% and p<0.05') but does not explicitly contrast with alternative tools or state when not to use. The context is clear enough for an agent to infer appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ad_csv_importImport Ad Campaign Data from CSVA

Import real campaign + performance data from a Google Ads or Meta Ads CSV export. After import, every AdOps tool (ads_report, budget_analyze, anomaly_detect, ab_test_analyze, competitor_benchmark, forecast_spend) operates on your real data. No API keys or OAuth required — just export from your ad dashboard and import here.

HOW TO EXPORT: • Google Ads: Reports → Campaign performance → Download → Comma-separated (.csv). Include "Day" segment for daily metrics. • Meta Ads Manager: Campaigns view → Export → Campaign performance (.csv). Check "Include breakdowns: By day" for daily metrics.

INPUT: Provide either csv_path (absolute path to file on disk) OR csv_content (raw CSV string). Optional connection_name groups imports; re-importing with the same name appends new data. Returns a summary with campaigns_imported, metrics_imported, warnings, and the connection id to reference in other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformYesWhich platform the CSV is from: "google" (Google Ads Editor or web UI export) or "meta" (Meta Ads Manager → Export → Campaigns)
csv_pathNoAbsolute path to a CSV file on disk. Preferred for large exports. Example: "/Users/you/Downloads/google_ads_report.csv"
csv_contentNoRaw CSV content as a string. Use for small exports pasted directly into the tool.
connection_nameNoFriendly name for this data source (e.g., "ACME Google Account"). Defaults to "<Platform> Ads (CSV Import)".
account_idNoYour platform account ID (e.g., Google customer ID "123-456-7890" or Meta "act_1234567890"). Used to identify the connection.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses key behaviors: re-importing with the same connection_name appends data, and returns a summary with campaigns_imported, metrics_imported, warnings, and connection id. Annotations provide no hints, so the description carries the full burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections for purpose, export instructions, and input details. The HOW TO EXPORT section is detailed but practical; overall length is justified given the complexity of supported platforms and input options.

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?

Covers all aspects: purpose, required inputs, behavior on re-import, return values, and platform-specific export steps. No output schema exists, so the description adequately explains the return summary.

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?

Schema coverage is 100% with descriptions for all 5 parameters. The description adds significant value by explaining the preference for csv_path for large exports, the default for connection_name, and the purpose of account_id, going beyond schema details.

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 imports real campaign data from Google Ads or Meta Ads CSV exports. It distinguishes from siblings like ad_demo_seed (demo data) and platform_connect (API) by emphasizing no API keys needed.

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?

Provides context on when to use (CSV exports, no API) and includes step-by-step export instructions for both platforms. However, it does not explicitly compare with alternative import methods like platform_connect or ad_demo_seed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ad_demo_seedSeed Demo Ad PortfolioA

Create a realistic cross-platform ad portfolio for trying AdOps without real data. Seeds 2 connections (Google + Meta), 8 campaigns across performance tiers, 30 days of daily metrics (240 rows), and pre-computed anomaly alerts. Use this to explore what AdOps can do, then switch to ad_csv_import with your real Google/Meta exports for production use. Safe to call multiple times — appends a new portfolio each call.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description discloses that the tool creates data (consistent with readOnlyHint=false) and appends new portfolios each call (consistent with idempotentHint=false). It adds context beyond annotations by explaining the demo nature and safety of multiple calls.

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?

Extremely concise at two sentences. First sentence provides purpose and content; second sentence adds usage guidance and safety. No wasted words, information is front-loaded.

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?

Given zero parameters, no output schema, and the tool's role as a demo data generator, the description fully covers what the tool does, what data it creates, and when to use it. AI agents have sufficient information to decide invocation.

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?

Tool has zero parameters, so description adds no parameter semantics beyond what's already known from the input schema. Baseline of 4 is appropriate since there is no need for parameter description.

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 creates a realistic cross-platform ad portfolio for trying AdOps without real data. It specifies exactly what is seeded (2 connections, 8 campaigns, 30 days metrics, anomaly alerts) and distinguishes it from sibling tool ad_csv_import for real data.

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?

Provides explicit when-to-use guidance: 'Use this to explore what AdOps can do, then switch to ad_csv_import with your real Google/Meta exports for production use.' Also notes it's safe to call multiple times (appends), giving clear usage boundaries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ads_export_recommendationsExport Budget Recommendations (Bulk-Edit Ready)A
Read-onlyIdempotent

Export budget_analyze recommendations as a Google Ads Editor CSV, Meta Ads Manager CSV, JSON, or Markdown — so you can take action in one bulk paste instead of editing campaigns one by one. AdOps does not call Google/Meta write APIs (that would require OAuth + developer token approval for every user); instead, this tool hands you the exact CSV rows those dashboards expect, and you paste them in. Perfect for the "pause anything with CPA over 50 and reallocate budget" workflow. Use platform=google with format=google_ads_csv (import into Google Ads Editor). Use platform=meta with format=meta_ads_csv (bulk edit in Meta Ads Manager Power Editor). Use json to pipe into n8n or your own automation. Use markdown for human review before acting. min_delta_pct filters out noise (e.g. 0.15 = only show changes >=15%).

ParametersJSON Schema
NameRequiredDescriptionDefault
formatYesOutput format. google_ads_csv and meta_ads_csv produce platform-specific bulk-edit CSVs ready to paste into Google Ads Editor or Meta Ads Manager. json is for piping into automations (n8n, Zapier). markdown is for standup docs or tickets.
output_pathNoAbsolute file path to write the output to. If omitted, returns the content inline in the tool response.
optimization_goalNoGoal fed to budget_analyze.maximize_roas
platformNoRestrict to a single platform. Required for google_ads_csv or meta_ads_csv to avoid mixed output.
min_delta_pctNoOnly include recommendations whose budget change is at least this fraction (e.g. 0.1 = 10%). Filters out minor adjustments.
limitNoMax recommendations to export. Default 50.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and idempotentHint=true. The description reinforces that the tool does not call Google/Meta write APIs and explains that output can be inline or to a file. No contradictions.

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 paragraph of 6-7 sentences, front-loaded with the core purpose, followed by specific details. Every sentence adds value without redundancy.

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?

Despite no output schema, the description fully explains output formats and usage. It references sibling tools (budget_analyze) and covers all parameters. An agent gets complete guidance for correct invocation.

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%, providing baseline 3. The description adds extra meaning by explaining the workflow for each format (e.g., 'import into Google Ads Editor') and providing an example for min_delta_pct, exceeding 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?

The description clearly states the tool exports budget_analyze recommendations in multiple formats (Google Ads CSV, Meta Ads CSV, JSON, Markdown) for bulk editing. It distinguishes from sibling tools like budget_analyze and budget_reallocate.

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 when-to-use guidance (bulk editing, 'pause anything with CPA over 50' workflow) and when-not-to-use (no direct API calls). It specifies which format works with which platform and explains alternatives for automation or human review.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ads_reportCross-Platform Performance ReportA
Read-onlyIdempotent

Aggregate performance metrics across Google Ads and Meta Ads into a single unified view. Input: date_range ({start, end} as YYYY-MM-DD, defaults to the last 7 days), optional platform filter, optional campaign_ids filter, optional sort_by ("spend"|"roas"|"conversions"|"ctr"|"cpc"), and limit. Returns {period, totals (spend, impressions, clicks, conversions, revenue, ROAS, CPC, CTR), by_platform, campaigns[] (sorted per sort_by), top_performers, underperformers}. This is the entry point for most analysis workflows.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformNoFilter by platform
date_rangeNoDefaults to last 7 days
campaign_idsNoFilter specific campaigns
sort_byNospend
limitNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnly, non-destructive, idempotent behavior. The description adds value by detailing the return structure (period, totals, campaigns, top_performers, etc.) without contradicting annotations.

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 paragraph with purpose first, then input, then output. No wasted words.

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 5-param tool with no output schema, the description covers inputs, outputs, and usage context. However, 'top_performers' and 'underperformers' are not explained, leaving minor ambiguity.

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?

The description explains the date_range format with defaults, lists sort_by options, and mentions limit. This adds context beyond the schema's 60% coverage, especially for the return shape that connects to parameters.

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 purpose: 'Aggregate performance metrics across Google Ads and Meta Ads into a single unified view.' This is a specific verb-resource combination, and the tool stands out from siblings like campaign_list or budget_analyze.

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 notes 'This is the entry point for most analysis workflows,' which implies broad usage but does not explicitly list when not to use it or provide alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

anomaly_detectDetect Performance AnomaliesA
Read-onlyIdempotent

Scan campaigns for statistical anomalies vs. a rolling baseline. Flags CPC spikes, CTR drops, sudden spend surges, and conversion cliffs. Input: sensitivity ("low"|"medium"|"high" — controls the z-score threshold), lookback_days (baseline window, default 14), optional platform filter. Returns {anomalies_found, severity_breakdown (critical|high|medium|low counts), alerts[] (each with campaign_id, metric, baseline, current, deviation, severity, reason)}. Run daily to catch issues before they burn budget.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformNoFilter by platform
sensitivityNoDetection sensitivitymedium
lookback_daysNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, so safe. Description adds valuable behavioral context: rolling baseline, flags specific metrics, and returns structured alerts. No contradictions.

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?

Four sentences, front-loaded with purpose, then lists anomaly types, parameter details, output structure, and usage recommendation. Every sentence adds value; no fluff.

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?

Given no output schema and three params, description fully covers tool behavior, inputs, and output structure. It even suggests daily use. Sibling tools are distinct, and context is sufficient for agent decision.

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?

Description adds meaning for two parameters: sensitivity (z-score threshold) and platform (filter). However, it states lookback_days default as 14, contradicting schema default of 7. Schema coverage is 67% so description partially compensates, but the mismatch reduces reliability.

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 it scans campaigns for statistical anomalies against a rolling baseline, listing specific anomaly types (CPC spikes, CTR drops, etc.). This differentiates it from sibling tools like ab_test_analyze or audience_insights.

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?

Explicitly recommends daily execution ('Run daily to catch issues before they burn budget'), providing a clear when-to-use hint. However, lacks explicit when-not-to-use or comparison with alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

audience_insightsAudience InsightsA
Read-onlyIdempotent

Demographic and behavioural breakdown of the audiences served by your ads. Input: platform (optional — omit for all platforms) and optional campaign_id to scope to a single campaign. Returns {age_distribution, gender_distribution, top_geos, top_interests, device_breakdown, total_impressions, engagement_rate}. Use when refining targeting or reporting audience coverage.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformYesPlatform to analyze
campaign_idNoSpecific campaign (optional)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, destructiveHint, idempotentHint. Description adds the return structure and input optionality, which complements annotations without contradiction.

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?

Three sentences covering purpose, inputs, outputs, and usage. No wasted words, front-loaded with core function.

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?

With no output schema, description lists all return fields. Inputs are fully described. Lacks potential details like time range or data freshness, but adequate for the tool's simplicity.

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 coverage is 100%. Description clarifies that omitting platform returns all platforms, and campaign_id scopes to a single campaign, adding meaning beyond the schema's enum and format constraints.

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?

Description states 'Demographic and behavioural breakdown of the audiences served by your ads' with specific verb and resource. It lists inputs and returns, clearly distinguishing from sibling tools like ads_report or campaign_create.

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?

Description explicitly says 'Use when refining targeting or reporting audience coverage', providing clear context. However, it does not mention when not to use it or suggest alternatives like campaign_list for campaign-level data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

budget_analyzeBudget Analysis & OptimizationA
Read-onlyIdempotent

Analyze how the current ad budget is distributed and produce actionable reallocation recommendations. Input: optimization_goal ("maximize_roas"|"maximize_conversions"|"minimize_cpa") and optional platform filter. Returns {goal, current_allocation (by platform + campaign), recommendations[] (each with campaign_id, current_budget, suggested_budget, rationale, expected_impact), projected_lift}. Pair with budget_reallocate to execute the recommendations.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformNoFilter by platform
optimization_goalNomaximize_roas

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds detail on the output structure (goal, allocation, recommendations, projected_lift), but does not mention any potential side effects or constraints beyond what annotations cover.

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?

Three sentences: purpose, input, output. All information is front-loaded and each sentence contributes directly to understanding the tool. No redundancy.

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 2 parameters and no output schema, the description fully explains input options, output structure, and the recommended follow-up tool. Annotations cover behavioral aspects. No gaps remain.

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?

Only one of two parameters has a description in the schema (platform), but the description provides the enum values for optimization_goal and explains its default. This compensates for the 50% schema coverage and adds meaning 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?

Description clearly states the tool analyzes ad budget distribution and produces reallocations recommendations. This is specific and distinguishes from sibling 'budget_reallocate' which executes recommendations.

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?

Description specifies required input (optimization_goal) and optional platform filter, and explicitly recommends pairing with budget_reallocate for execution. It lacks explicit 'when not to use' but context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

budget_reallocateReallocate BudgetA

Transfer a dollar amount from one campaign's daily budget to another. Works across platforms (e.g. shift $50/day from a Google Ads search campaign to a Meta Ads retargeting campaign). Input: from_campaign_id, to_campaign_id (UUIDs, must differ), amount (positive number in campaign currency). Rejects the call if from_campaign_id === to_campaign_id or if the source campaign would go below zero. Returns the updated budgets for both campaigns.

ParametersJSON Schema
NameRequiredDescriptionDefault
from_campaign_idYesSource campaign
to_campaign_idYesDestination campaign
amountYesAmount to transfer

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since annotations carry minimal behavioral info (readOnlyHint, destructiveHint false), the description fully describes the tool's action (mutation), rejection rules (same ID, negative balance), and return value (updated budgets). This adds critical context beyond the annotations.

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 three sentences: purpose, example, then input/behavior details. Every sentence is informative with no redundancy. It is front-loaded with the core action.

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?

With 3 required parameters, no output schema, and minimal annotations, the description covers all necessary aspects: what it does, constraints, acceptance criteria, and return value. No additional information is needed.

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 coverage is 100%, so baseline is 3. The description goes beyond by explaining that IDs must differ, amount is in campaign currency, and rejection rules. This adds meaningful context beyond the schema's simple descriptions.

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 states a specific verb ('Transfer') and resource ('campaign's daily budget'). It clearly distinguishes from sibling tools like budget_analyze by focusing on reallocation across campaigns and platforms.

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 (shifting budget between campaigns) with a concrete cross-platform example. It mentions rejection conditions but does not explicitly state when not to use or suggest alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaign_createCreate CampaignA
Idempotent

Create a new ad campaign in the AdOps workspace. Accepts unified parameters (platform, name, objective, bidding_strategy, daily_budget, currency, start_date, end_date, targeting) and stores a canonical UnifiedCampaign record with status="draft". Returns the created campaign summary plus next_steps guidance. Requires an active platform connection (see platform_connect) — will auto-associate the first active connection for the chosen platform.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformYesTarget platform
nameYesCampaign name
objectiveYesCampaign objective
daily_budgetYesDaily budget
currencyNoISO 4217 currencyUSD
start_dateNoISO date (defaults to today)
end_dateNoISO date (optional)
bidding_strategyNoBidding strategy
targetingNo

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (idempotentHint=true, destructiveHint=false), the description adds that the campaign is stored as 'draft', returns a summary and next_steps, and auto-associates the first active connection. No contradictions with annotations.

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?

Description is four sentences, front-loaded with the main action, and no superfluous information. Every sentence adds value.

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 complexity (9 parameters, nested targeting, no output schema), the description covers purpose, parameters, behavior (draft, return, connection requirement). Could benefit from mentioning return format explicitly.

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 89%, so the schema already provides most parameter descriptions. The description lists parameters but adds minimal new meaning beyond grouping them as 'unified'.

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 'Create a new ad campaign in the AdOps workspace', specifying the verb (create), resource (ad campaign), and context (AdOps). It lists the unified parameters and distinguishes from sibling tools like campaign_update and campaign_list.

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 mentions the prerequisite of an active platform connection and references platform_connect, but does not explicitly state when to use this tool vs. alternatives like campaign_update or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaign_listList CampaignsA
Read-onlyIdempotent

Unified listing of campaigns across Google Ads and Meta Ads in a single view. Optional filters: platform ("google_ads"|"meta_ads"), status ("draft"|"active"|"paused"|"ended"|"archived"), query (free-text over campaign name). Pagination via limit (default 20, max 100) and offset. Returns {total, showing, offset, campaigns[]} where each campaign summary includes id, name, platform, status, objective, daily_budget, currency, and start_date. Use the returned id with campaign_update, campaign_pause_resume, or ab_test_analyze.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformNoFilter by platform
statusNoFilter by status
queryNoSearch campaign names
limitNo
offsetNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, non-destructive, idempotent behavior. The description adds value by detailing the return structure and pagination mechanics. There is no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded, covering purpose, filters, pagination, return format, and usage with siblings. It is concise but could be slightly trimmed without losing information.

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?

With no output schema, the description adequately explains the return object. Parameters are partially detailed, but the enum mismatches create gaps. Given the complexity (5 params, cross-platform), more precision is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema coverage is 60%, but the description provides additional enum values for platform and status that contradict the schema: description says 'google_ads'|'meta_ads' while schema uses 'google'|'meta'; status lists different set. This mismatch reduces reliability and usefulness.

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 lists campaigns across Google Ads and Meta Ads in a unified view. It uses a specific verb (list) and resource (campaigns), and distinguishes from siblings by emphasizing the cross-platform aggregation.

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 explains when to use (unified listing across platforms) and provides context on optional filters. It also suggests follow-up tools using the returned id. However, it does not explicitly exclude scenarios or compare with other listing/reporting siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaign_pause_resumePause or Resume CampaignsA
Idempotent

Batch-change the status of up to 50 campaigns in one call. action="pause" sets status to "paused"; action="resume" sets status to "active". Missing campaign_ids are reported in the errors array but do not fail the whole batch. Returns {action, updated, failed, campaigns[], errors?}. Use this for emergency pause during an incident or weekend shutoff.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaign_idsYesCampaign IDs to toggle
actionYesAction to perform

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explains batch behavior (missing IDs reported in errors without failing the batch), return structure, and the fact that action values map to specific statuses. This goes beyond annotations which only indicate idempotence and non-destructiveness.

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 three sentences, front-loaded with the main purpose. Every sentence adds value without redundancy. Highly concise.

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?

Given no output schema, the description includes the return structure and explains edge cases (missing IDs). The use case is specified. It is fully complete for the tool's complexity.

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?

While the schema already describes both parameters, the description adds meaning: it explains what each action value does (maps to status) and how missing IDs are handled, which is not in 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 'Batch-change the status of up to 50 campaigns' and explains each action ('pause' sets status to 'paused', 'resume' sets to 'active'). This distinguishes it from sibling tools like campaign_create or campaign_update.

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 a clear use case: 'Use this for emergency pause during an incident or weekend shutoff.' It could be improved by explicitly stating when not to use or mentioning alternatives, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaign_updateUpdate CampaignA
Idempotent

Patch-update an existing campaign. Pass campaign_id (UUID from campaign_list or campaign_create) plus any subset of: name, status, daily_budget, bidding_strategy, end_date. Fields you omit are left unchanged. Returns {message, updated_fields[], campaign} or an error if campaign_id is not found. Prefer campaign_pause_resume for batch status changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaign_idYesAdOps campaign ID
nameNo
daily_budgetNo
total_budgetNo
statusNo
bidding_strategyNo
end_dateNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses return format ({message, updated_fields[], campaign}) and error if campaign_id not found. IdempotentHint in annotations is consistent; description adds partial update behavior and return details.

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?

Two concise sentences plus a one-phrase tip. No wasted words; front-loaded with purpose.

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?

Covers patch semantics, error handling, return format, and alternative tool usage. Lacks mention of total_budget parameter, but otherwise sufficient for agent decision-making.

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?

Description enumerates key updatable fields (name, status, daily_budget, bidding_strategy, end_date) beyond the schema's 14% coverage. However, the parameter total_budget is omitted from the description, slightly reducing completeness.

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?

Description clearly states 'Patch-update an existing campaign' with specific verb and resource. Distinguishes from sibling tool campaign_pause_resume by advising its use for batch status changes.

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?

Provides explicit guidance: include campaign_id from campaign_list or campaign_create, pass any subset of fields, omitted fields unchanged. Explicitly prefers campaign_pause_resume for batch status changes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

competitor_benchmarkIndustry Benchmark ComparisonA
Read-onlyIdempotent

Compare your ad performance against industry averages for a chosen vertical. Input: industry (e.g. "ecommerce", "saas", "finance", "healthcare", "education", "travel", "real_estate", "legal"), optional platform filter. Returns {industry, your_metrics, benchmarks (CTR, CPC, CPM, conversion_rate, CPA, ROAS industry averages), comparison (percent above/below benchmark per metric), recommendations[]}. Benchmarks are curated static tables — not live market data.

ParametersJSON Schema
NameRequiredDescriptionDefault
industryYesIndustry for benchmarking (e.g., "ecommerce", "saas", "finance")
platformNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses a key behavioral trait: benchmarks are 'curated static tables — not live market data'. This goes beyond the annotations, which already indicate readOnlyHint=true and idempotentHint=true. No contradiction with annotations.

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 concise (2-3 sentences) and front-loaded: it starts with the purpose, then inputs, then outputs, with no extraneous information. Every sentence earns its place.

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?

Given the absence of an output schema, the description fully documents the return structure (industry, your_metrics, benchmarks, comparison, recommendations). It also clarifies the static nature of benchmarks. Annotations cover safety, and parameters are well-explained. The description is complete for the tool's complexity.

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 coverage is 50% (industry has description, platform does not). The description adds meaning by listing example industries and stating the platform filter is optional, which supplements the schema. It also describes the return structure, providing context for how parameters affect output.

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?

Description clearly states that the tool compares ad performance against industry averages. It provides a specific verb ('Compare') and resource ('ad performance against industry averages'), and it distinguishes from sibling tools like 'audience_insights' or 'budget_analyze' which focus on different aspects.

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 explains when to use the tool (to compare performance against industry averages) and what inputs are needed. However, it does not explicitly state when not to use it or mention alternative tools for similar tasks. This is a minor gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

creative_specsCreative SpecificationsA
Read-onlyIdempotent

Platform-specific creative requirements for ad formats. Returns the exact image dimensions, aspect ratios, video duration and codec, headline/primary-text character limits, supported CTA buttons, and file size ceilings for each ad format. Input: platform ("google_ads"|"meta_ads") and optional format filter (e.g. "responsive_display", "video", "carousel", "single_image"). Use this before building creatives to avoid rejection at upload time.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformYesPlatform to get specs for
formatNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, which cover the safety profile. The description adds that the tool returns exact specifications, which aligns with the read-only nature. No additional behavioral traits (e.g., rate limits) are disclosed, but the description does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with three focusing sentences: first on output, second on input, third on usage. There is no redundancy. It is well-structured and front-loaded with the most critical information.

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 lack of an output schema, the description provides a detailed list of return fields (image dimensions, aspect ratios, etc.). It also explains input parameters and gives a usage tip. The only gap is the inconsistency between description examples and schema enums, but overall the description covers essential context for a tool of this 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 50% (format parameter lacks description). The description does add meaning by providing example values for format (e.g., 'responsive_display', 'single_image') and clarifying platform as 'google_ads'|'meta_ads', but these examples differ from the schema's enum values (platform: 'google'/'meta'; format: 'image'/'video'/'carousel'/'stories'). This inconsistency reduces reliability. Overall, the description partially compensates for the schema gap but introduces confusion.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns platform-specific creative requirements and lists specific output fields. It is distinct from sibling tools. However, there is a minor inconsistency: the description mentions platform values 'google_ads' and 'meta_ads' while the schema uses 'google' and 'meta', which could cause confusion.

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 advises using this tool 'before building creatives to avoid rejection at upload time', setting clear context. No direct alternatives are mentioned, but sibling tools do not overlap significantly, making the guidance effective.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

forecast_spendSpend & Performance ForecastA
Read-onlyIdempotent

Project future ad spend and performance based on recent historical trends. Input: period_days ("7"|"14"|"30") and optional platform filter. Uses moving-average extrapolation of spend, impressions, clicks, conversions, and revenue across the last 14 days. Returns {period_days, platform, projected (spend, impressions, clicks, conversions, revenue, ROAS, CPC, CTR), confidence_level, warnings[]}. Confidence drops when recent data is volatile or campaigns were paused.

ParametersJSON Schema
NameRequiredDescriptionDefault
period_daysNoForecast period14
platformNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral context beyond the annotations (readOnlyHint, idempotentHint). It discloses the methodology (moving-average extrapolation), output fields (projected metrics, confidence_level, warnings), and limitations (confidence drops with volatile data or paused campaigns). No contradiction with annotations.

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 concise (three sentences) and well-structured. It front-loads the purpose and input, then explains the methodology and output structure. 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.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description provides a comprehensive summary of the return value structure (period_days, platform, projected metrics, confidence_level, warnings). It also covers confidence degradation conditions, making it complete for an agent to understand the tool's behavior.

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?

The description elaborates on the parameters by restating the period_days options and noting platform is optional. While the schema covers 50% of parameter descriptions, the description adds clarity by explicitly listing the platform filter. It does not fully compensate for undocumented parameters but adds meaningful context.

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 purpose: projecting future ad spend and performance based on historical trends. It uses a specific verb ('Project') and resource ('ad spend and performance'), and distinguishes itself from siblings like budget_analyze by focusing on forecasting.

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, including input parameters (period_days and platform). It implies usage for forecasting but does not explicitly state when not to use it or mention alternatives, though the context is adequate given sibling tools serve different purposes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

platform_connectConnect Ad PlatformA
Idempotent

Register a Google Ads or Meta Ads account in the AdOps workspace so subsequent tools (campaign_list, campaign_create, ads_report) can target it. Input: platform ("google_ads"|"meta_ads"), name (display label), account_id (the external ad account id). Returns the stored connection object with a generated UUID and status="active". Safe to call with the same platform+account_id — returns the existing connection instead of erroring (idempotent).

ParametersJSON Schema
NameRequiredDescriptionDefault
platformYesAd platform to connect
nameYesFriendly connection name
account_idYesPlatform-specific ad account ID (Google: 10 digits, Meta: act_XXXXXXXXX)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses idempotency (returns existing connection) and the return format (connection object with UUID and status active). Annotations already provide idempotentHint=true; the description adds specific return details. No contradictions with annotations.

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?

Three sentences, front-loaded with purpose. Each sentence adds value: purpose, inputs, return, idempotency. No fluff.

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?

Covers purpose, inputs, return, idempotency, and prerequisite relationship for subsequent tools. Lacks error handling or permission requirements, but mild gap for a simple tool.

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%, so descriptions repeat some info. However, the description says platform accepts 'google_ads'|'meta_ads', while schema enum is 'google'|'meta', causing inconsistency. This reduces clarity despite other parameter details.

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 registers a Google Ads or Meta Ads account in the AdOps workspace to enable subsequent tools like campaign_list, campaign_create, and ads_report. It distinguishes the tool's role as a prerequisite from its siblings.

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 explains that the tool should be used to set up an ad account before using other campaign and reporting tools. It also notes idempotency, indicating it is safe to call multiple times. However, it does not explicitly mention when not to use it or alternatives.

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. 17 tool updatesv1.3.0
    • First observedab_test_analyze
    • First observedad_csv_import
    • First observedad_demo_seed
    • First observedads_export_recommendations
    • First observedads_report
    • First observedanomaly_detect
    • First observedaudience_insights
    • First observedbudget_analyze
    • First observedbudget_reallocate
    • First observedcampaign_create
    • First observedcampaign_list
    • First observedcampaign_pause_resume
    • First observedcampaign_update
    • First observedcompetitor_benchmark
    • First observedcreative_specs
    • First observedforecast_spend
    • First observedplatform_connect

TDQS

A4/5.0

Scored across 17 tools

Disambiguation4/5

Most tools map to clearly distinct workflows—reporting, budget analysis/execution, A/B testing, forecasting, anomaly detection—and the descriptions reinforce those boundaries. The main residual ambiguity is between campaign_update and campaign_pause_resume, both of which can change status, though their batch vs. single-campaign roles are reasonably clear.

Naming Consistency3/5

Names are readable and often follow an object-first style like campaign_create, budget_analyze, and anomaly_detect. However, the pattern is inconsistent: campaign_list and ads_report are noun phrases, forecast_spend reverses the order, and ad_csv_import / ad_demo_seed mix objects, formats, and verbs in unpredictable ways.

Tool Count4/5

Seventeen tools is slightly above the ideal 3–15 range, but the broad ad-ops scope justifies the count: ingestion, setup, campaign management, reporting, analysis, forecasting, and exportable recommendations all earn their place. It feels comprehensive rather than bloated.

Completeness4/5

The tool surface covers data import, account registration, campaign lifecycle management, reporting, budget analysis and execution, forecasting, anomaly detection, A/B testing, benchmarking, and exportable recommendations—so core workflows have no dead ends. Missing pieces like single-campaign detail retrieval, account disconnection, and ad-group-level management are minor relative to the stated campaign-level purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    MCP server for managing Google Ads, Meta Ads, LinkedIn Ads, and TikTok Ads via AI. 210+ tools including account audits, wasted spend detection, and PMax insights.
    2
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for Google Ads API — 22 tools for campaigns, keywords, RSAs, assets, audiences, geo/device performance, impression share, auction insights, and budget pacing. Community edition with B2B/agency-focused tooling beyond the official Google MCP.
    22
    30 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for managing ad campaigns across Google Ads, Meta, and more. Enables deploying campaigns, checking performance, and managing budgets from terminal or AI assistants.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive MCP server for managing and analyzing Meta Ads (Facebook/Instagram) with over 80 natural-language tools for AI agents like Claude Desktop.
    -