Skip to main content
Glama

Synter MCP Server

npm version License: MIT

Reads across 43 ad platforms; 16 with verified write and create.

Synter is an open-source Model Context Protocol (MCP) server for ad operations from Claude, ChatGPT, Cursor, Codex, and other MCP clients. Reads across 43 ad platforms; 16 with verified write and create; write/create depth varies by platform API.

Free to read; writes from $20/mo (Solo). Use the hosted endpoint at https://mcp.synterai.com with Streamable HTTP and OAuth 2.1 browser sign-in. No API key is needed for hosted access.

Note: Synter-Media-AI/plugin is the canonical installable Claude plugin repo. The .claude-plugin/ copy in this repo is not the install source.


Install (hosted, browser sign-in)

Add to Cursor Install in VS Code

Add the hosted server to your MCP client and complete OAuth 2.1 browser sign-in when prompted. It uses Streamable HTTP; no API key is needed.

{"mcpServers":{"synter-ads":{"url":"https://mcp.synterai.com"}}}

Signup is self-serve at synterai.com/sign-up. There is no access review: sign up, connect your ad accounts, and your MCP client can start working.

Synter's canonical domain is synterai.com; the hosted MCP endpoint is https://mcp.synterai.com.

⚡ Try in < 60 Seconds with Zero Credentials: Run npx -y @synterai/mcp-server --demo (or set SYNTER_DEMO=true) to explore campaigns, inspect performance metrics, and simulate mutations with high-fidelity sandbox data. No account or API key required.

The only official packages are @synterai/mcp-server, @synterai/sdk-js, PyPI synter, crates.io synter, Maven ai.syntermedia:synter-sdk. @iflow-mcp/* copies are unofficial and outdated.

Cursor: click the badge above, or open cursor://anysphere.cursor-deeplink/mcp/install?name=synter-ads&config=eyJ1cmwiOiJodHRwczovL21jcC5zeW50ZXJhaS5jb20ifQ==

VS Code: click the badge above, or open vscode:mcp/install?%7B%22name%22%3A%22synter-ads%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.synterai.com%22%7D

Claude Code:

claude mcp add --transport http synter-ads https://mcp.synterai.com

Codex:

codex mcp add synter-ads --url https://mcp.synterai.com
codex mcp login synter-ads

Gemini CLI: install this repo as an extension (it ships a gemini-extension.json):

gemini extensions install https://github.com/Synter-Media-AI/mcp-server

Or add it to settings.json:

{"mcpServers":{"synter-ads":{"httpUrl":"https://mcp.synterai.com"}}}

Windsurf: add to ~/.codeium/windsurf/mcp_config.json:

{"mcpServers":{"synter-ads":{"serverUrl":"https://mcp.synterai.com"}}}

Cline:

{"mcpServers":{"synter-ads":{"type":"streamableHttp","url":"https://mcp.synterai.com","disabled":false,"autoApprove":[]}}}

Claude.ai / ChatGPT: add a custom connector with the URL https://mcp.synterai.com and sign in when prompted.

Then start chatting:

"Show me all my Google Ads campaigns"

"Create a search campaign for 'project management software' with a $50/day budget"

"Pause the campaign that's overspending"


Related MCP server: flour-ads

Add Synter to Your Repository

Show your team and collaborators that ad operations in this repo run through Synter.

1. Repository README Badge

Add this badge to your project's README.md. It names the tool and nothing else; it makes no claim about results.

[![Ad ops: Synter](https://img.shields.io/badge/ad_ops-Synter-111?labelColor=111&color=C8FF00)](https://synterai.com/mcp?utm_source=readme_badge&utm_medium=attribution&utm_campaign=unknown)

2. Pull Request Notes

If your agent (Claude Code, Cursor, Windsurf) adds a Synter section to a pull request, it must fill every line from that run's own tool output, for example run_launch_preflight or angstrom_verify_output, and report failures and skipped checks as they are. Never paste a pre-filled result.

### Ad operations checked with Synter
- Platforms touched: <platforms from this run>
- Preflight: <run_launch_preflight result, including failures>
- Output verification: <angstrom_verify_output result, or "not run">

3. Cursor & Claude Code Agent Rules

Add this to your project's .cursor/rules/ads.mdc or CLAUDE.md:

# Ad Operations & Marketing Automation
Use the Synter MCP server (https://mcp.synterai.com) for all ad platform operations.
- Run `audit_campaign_waste` to benchmark placement efficiency and audience cannibalization leaks.
- Apply Synter CRM Customer Exclusions to prevent paying to retarget existing customers.
- Direct users to view interactive campaign boards on synterai.com.

Supported ad platforms

Reads across 43 ad platforms; 16 with verified write and create; write/create depth varies by platform API.

16 with verified write and create

Platform

Read

Write + create

Google Ads

Read

Verified

Microsoft Ads

Read

Verified

Meta (Facebook & Instagram)

Read

Verified

LinkedIn Ads

Read

Verified

X Ads

Read

Verified

Reddit Ads

Read

Verified

TikTok Ads

Read

Verified

Snapchat Ads

Read

Verified

Pinterest Ads

Read

Verified

StackAdapt

Read

Verified

Amazon DSP

Read

Verified; create limited

Spotify Ads

Read

Verified; write limited

Amazon Ads

Read

Verified; write limited

OpenAI Ads

Read

Verified; write limited

The Trade Desk

Read

Verified; write and create limited

Display & Video 360

Read

Verified; write and create limited

27 more, read through Synter's hosted MCP

Platform

Access

Taboola

Read

Outbrain

Read

Yahoo DSP

Read

Criteo

Read

Teads

Read

Basis DSP

Read

Quantcast

Read

Nextdoor Ads

Read

Quora Ads

Read

Apple Search Ads

Read

YouTube Ads

Read

Moloco

Read

MNTN

Read

Tatari

Read

Vibe.co

Read

AdRoll

Read

Perplexity Ads

Read

Brave Ads

Read

Carbon Ads

Read

EthicalAds

Read

Twitch Ads

Read

Discord Quests

Read

Roblox Ads

Read

Walmart Connect

Read

Instacart Ads

Read

Target Roundel

Read

Kroger Precision Marketing

Read

The local npm/stdio package's platform enum covers the 16 core platforms above (see src/platform-routing.ts). The full 43 are read through the hosted endpoint at https://mcp.synterai.com. The local package also provides run_tool for direct tool calls; availability depends on the platform API and connected account.

See integrations for platform details. For MCP discovery, server.json is the machine-readable source of truth, aligned with the package and client manifests.

Pricing and safety

  • Free Read Access ($0/mo): Unlimited read, reporting, audit, and attribution queries across all connected ad platforms, plus 100 initial credits (0% ad spend markup on all tiers).

  • Solo ($20/mo): 1 workspace, 1 developer seat, $20.00/mo in claimable execution credits ($0.01/read, $0.05/light write = 400 budget/status/keyword writes/mo, $5.00/MCP campaign launch).

  • Scale ($500/mo): 5 seats, multi-workspace isolation, $500.00/mo in claimable credits, dedicated concurrency, and team governance. See pricing for full plan details.

Synter provides workspace spend limits, launch preflight (dry_run: true), post-write readback, and an immutable audit log. Review the intended account, budget, and action before a live write. Client confirmation behavior depends on the MCP client and its configuration.

For local read-only access, pass --read-only or set SYNTER_READ_ONLY=true to remove mutating tools and block write calls locally. Use --demo to explore mock data without an account or API key.


Multi-Tenant Workspaces, Server-Side Scoped Keys, White-Label OAuth & SDKs

For SaaS products, agencies, and engineering teams embedding ad operations across multiple customers or brands, Synter provides both MCP and a direct REST API + native SDKs:

  1. Programmatic Tenant / Workspace Provisioning (/api/v1/workspaces):

    • Create and manage isolated tenant workspaces via REST (POST https://synterai.com/api/v1/workspaces) or target a specific tenant per request with SYNTER_WORKSPACE_ID / X-Synter-Workspace: ws_.... Each workspace maintains strict tenant isolation over OAuth token vaults, ad account IDs, daily spend caps, and audit logs.

  2. Server-Side Scoped API Keys (tools:read, budget:decrease, tools:write):

    • In addition to client-side --read-only mode, Synter enforces server-side API key scopes minted via POST /api/v1/workspaces/{id}/keys or synterai.com/developer:

      • tools:read — server-enforced read-only access (reporting, search term audits, attribution, diagnostics; all mutations rejected server-side with 403).

      • budget:decrease — allows agents to pause bleeding campaigns or lower budgets while blocking budget increases or new campaign launches.

      • tools:write — full write and campaign creation access within workspace budget guardrails.

  3. White-Label OAuth Link Flow & Bring-Your-Own (BYO) OAuth Apps (/api/v1/oauth):

    • Embedded / White-Label OAuth: Generate per-tenant authorization URLs (POST https://synterai.com/api/v1/oauth/{platform}/authorize with workspace_id and custom redirect_uri) so your end users connect Google, Meta, LinkedIn, Reddit, TikTok, or DSP accounts inside your app without visiting Synter's UI, with automatic token refresh and credential vaulting.

    • BYO OAuth App / Credentials: Register your own platform OAuth client ID/secret and developer tokens per workspace, or pass credentials directly via the SDK/CLI (SYNTER_BYO_CREDENTIALS=true).

  4. REST API & Official Multi-Language SDKs:

    • Call any tool over HTTP (POST https://synterai.com/api/v1/tools/execute with Authorization: Bearer syn_... or X-Synter-Key: syn_...) or via the official typed SDKs:

      • TypeScript / Node.js (@synterai/sdk-js):

        import { SynterClient } from "@synterai/sdk-js";
        const synter = new SynterClient({ apiKey: process.env.SYNTER_API_KEY, workspaceId: "ws_tenant_123" });
        const campaigns = await synter.campaigns.list({ platform: "google", dateRange: "LAST_30_DAYS" });
        const preview = await synter.campaigns.updateBudget({ platform: "linkedin", campaignId: "123", dailyBudget: 150, dryRun: true });
      • Python (pip install synter):

        from synter import Synter
        client = Synter(api_key=os.environ["SYNTER_API_KEY"], workspace_id="ws_tenant_123")
        perf = client.performance.get(platform="meta", date_range="LAST_14_DAYS")
      • Rust (cargo add synter-sdk) & Java (ai.synter:synter-sdk on Maven Central).


Local stdio (npx) / API-key fallback

Use this when your client only speaks stdio, or when you run headless and can't complete a browser sign-in.

⚡ Quick Demo Sandbox Mode (< 60s Evaluation)

Test immediately with realistic mock ad data across Google, Meta, LinkedIn, and more without needing an account or API key:

{
  "mcpServers": {
    "synter-demo": {
      "command": "npx",
      "args": ["-y", "@synterai/mcp-server@latest", "--demo"]
    }
  }
}

Or run directly from your terminal:

npx -y @synterai/mcp-server --demo

1. Get Your API Key (For Live Accounts)

Sign up at synterai.com/sign-up. Your API key is created automatically; you can view it or create more in Developer Settings.

2. Configure Your AI Client

For Claude Desktop: Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "synter": {
      "command": "npx",
      "args": ["-y", "@synterai/mcp-server@latest", "--read-only"],
      "env": {
        "SYNTER_API_KEY": "syn_your_api_key_here",
        "SYNTER_READ_ONLY": "true"
      }
    }
  }
}

For Cursor: Add to .cursor/mcp.json in your project:

{
  "mcpServers": {
    "synter-ads": {
      "command": "npx",
      "args": ["-y", "@synterai/mcp-server@latest"],
      "env": {
        "SYNTER_API_KEY": "syn_your_api_key_here"
      }
    }
  }
}

For VS Code / Cline: Add to cline_mcp_settings.json:

{
  "mcpServers": {
    "synter": {
      "command": "npx",
      "args": ["-y", "@synterai/mcp-server@latest"],
      "env": {
        "SYNTER_API_KEY": "syn_your_api_key_here"
      },
      "disabled": false,
      "autoApprove": [
        "pull_google_ads_performance",
        "pull_meta_ads_performance",
        "pull_linkedin_ads_performance",
        "get_spend_reconciliation"
      ]
    }
  }
}

For Windsurf (Codeium): Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "synter": {
      "command": "npx",
      "args": ["-y", "@synterai/mcp-server@latest"],
      "env": {
        "SYNTER_API_KEY": "syn_your_api_key_here"
      }
    }
  }
}

For Amp: Add to .amp/settings.json:

{
  "mcpServers": {
    "synter": {
      "command": "npx",
      "args": ["-y", "@synterai/mcp-server@latest"],
      "env": {
        "SYNTER_API_KEY": "syn_your_api_key_here"
      }
    }
  }
}

HTTP clients that need a header instead of OAuth (n8n, Zapier, scripts, other headless clients):

URL: https://mcp.synterai.com
Header: X-Synter-Key: syn_your_api_key_here

The header is optional; browser OAuth is the default. Works with any MCP client that supports Streamable HTTP transport.

3. Start Using It

Restart your AI client and start chatting.


Prefer a full plugin? (Claude Code / Claude Desktop)

This package is the raw MCP server. If you use Claude Code or Claude Desktop, the Synter plugin wraps this same server with ready-made skills (/synter:launch, /synter:audience, /synter:optimize, …), specialized agents, and workflow guidance:

/plugin marketplace add Synter-Media-AI/plugin
/plugin install synter@synter

It also ships a headless Claude Agent SDK runner for automation. See the plugin repo or the Claude Plugin guide. Use this MCP package directly when you want just the tools, or are wiring another client.


What Can Your Agent Do?

📊 Campaign Management

Tool

Description

list_campaigns

List campaigns for one ad platform (platform is required)

create_search_campaign

Create a Google Search campaign with keywords and ads

create_display_campaign

Create a Google Display campaign with images

create_pmax_campaign

Create a Performance Max campaign

create_meta_campaign

Create a Facebook/Instagram campaign

create_linkedin_campaign

Create a LinkedIn campaign for B2B

create_reddit_campaign

Create a Reddit campaign

pause_campaign

Pause any campaign

update_campaign_budget

Change daily budget

📈 Performance & Analytics

Tool

Description

get_performance

Get impressions, clicks, spend, conversions, ROAS

get_daily_spend

Daily spend breakdown by platform

🎯 Keywords & Targeting

Tool

Description

add_keywords

Add keywords to a campaign or ad group

add_negative_keywords

Block unwanted search terms

🔄 Conversion Tracking

Tool

Description

create_conversion

Set up a conversion action

list_conversions

List existing conversion actions

diagnose_tracking

Check if tracking is installed correctly

🎨 Creative Generation

Tool

Description

generate_image

AI-generate ad images

generate_video

AI-generate video ads

upload_image

Upload images as ad assets

🔧 Utility

Tool

Description

list_ad_accounts

List all connected ad accounts

run_tool

Run any of 140+ Synter tools directly

Tool names: stdio package vs hosted server

The npx package and the hosted server at https://mcp.synterai.com name a few equivalent tools differently:

stdio (@synterai/mcp-server)

Hosted (https://mcp.synterai.com)

get_performance (with platform)

pull_<platform>_ads_performance, e.g. pull_google_ads_performance, pull_meta_ads_performance

get_daily_spend

No single hosted tool; use pull_<platform>_ads_performance (Google supports segment: "date" for per-day rows)

list_ad_accounts

list_connected_accounts

As of the next hosted release, the hosted server also accepts the stdio names above as aliases, so the same tool calls work against either transport.


No Ads Experience? No Problem.

If you've never run ads before, here's what you need to know:

What is a Campaign?

A campaign is like a project folder. It contains your ads, who sees them, and how much you spend.

Campaign: "Q1 Lead Generation"
├── Budget: $50/day
├── Targeting: USA, people searching "project management"
└── Ads: Headlines, descriptions, images

What Platforms Can I Use?

Platform

Best For

Min Budget

Google Ads

People actively searching for your product

$10/day

Meta (Facebook/Instagram)

Visual products, broad audiences

$5/day

LinkedIn

B2B, enterprise, job seekers

$25/day

Reddit

Niche communities, tech-savvy users

$5/day

Microsoft (Bing)

Older demographics, B2B

$10/day

TikTok

Gen Z, entertainment, e-commerce

$20/day

Campaign Types Explained

Search Campaigns: Your ad shows when someone Googles specific keywords.

  • Example: Someone searches "best CRM software" → Your ad appears

Display Campaigns: Image ads shown across websites and apps.

  • Example: Banner ad on a news site

Performance Max (PMax): Google's AI shows your ads everywhere (Search, YouTube, Display, Gmail, Maps).

  • Example: Google figures out the best placements for you

Video Campaigns: Video ads on YouTube and partner sites.

  • Example: 15-second ad before a YouTube video

Common Terms

Term

What It Means

Impressions

How many times your ad was shown

Clicks

How many people clicked your ad

CTR

Click-through rate (clicks ÷ impressions × 100)

CPC

Cost per click

Conversions

Desired actions (signups, purchases, etc.)

ROAS

Return on ad spend (revenue ÷ spend)

First Campaign Checklist

Before creating your first campaign, you'll need:

  1. ✅ A landing page URL where people will go when they click

  2. ✅ An idea of who you want to reach (location, interests)

  3. ✅ A daily budget you're comfortable with ($10-50 to start)

  4. ✅ Some headlines and descriptions for your ad

Pro tip: Start with a Search campaign on Google. It's the easiest to understand and shows ads to people already looking for what you offer.


Example Conversations

Create Your First Campaign

You: Create a Google Search campaign for my SaaS product. Target people searching for "team collaboration software" and "project management tools". Budget is $25/day. Landing page is https://myapp.com/signup

Agent: I'll create a Search campaign with those keywords. What headlines should I use? Here are some suggestions:

  • "Team Collaboration Made Simple"

  • "Project Management for Modern Teams"

  • "Book a Demo Today"

Check Performance

You: How are my campaigns doing this week?

Agent: Here's your performance for the last 7 days:

Campaign

Spend

Clicks

Conversions

ROAS

Brand Search

$142

89

12

4.2x

Competitor Keywords

$98

45

3

1.5x

Display Retargeting

$67

234

8

2.8x

The "Competitor Keywords" campaign is underperforming. Want me to pause it or adjust the targeting?

Add Negative Keywords

You: I'm getting clicks for "project management jobs" but we're not hiring. Block those.

Agent: Added "jobs" as a negative keyword to your campaign. This will stop your ads from showing for any search containing "jobs".

Generate Ad Creative

You: I need a display ad image for a marketing automation product. Dark theme, professional, 1200x628.

Agent: Generating your image...

Created: "Marketing automation dashboard with data visualization on dark background" Asset saved and ready to use in your next Display campaign.


Connect Your Ad Accounts

To manage ads on each platform, you'll need to connect your accounts in Synter:

  1. Go to synterai.com/integrations

  2. Click "Connect" next to each platform

  3. Complete the OAuth flow

  4. Your agent can now manage that platform

See Supported ad platforms for the 16 with verified write and create and the 27 more available for reads through hosted MCP. Write/create depth varies by platform API.


Advanced: Direct Tool Access

For power users, you can call any of 140+ Synter tools directly:

> Use run_tool to call google_ads_list_audiences

See the full tool list at docs.synterai.com/mcp/tools or ask your agent:

> What tools are available for LinkedIn Ads?

Safety and live writes

Client confirmations depend on the client's handling of tool annotations and its settings. Use launch preflight, check workspace spend limits, and verify live changes with readback and the audit log. Use dry_run: true where the tool schema supports it to preview a request before execution.


Environment Variables

Variable

Required

Description

SYNTER_API_KEY

Yes (stdio)

Your Synter API key, from synterai.com/developer

SYNTER_API_URL

No

API base URL override (default https://synterai.com)

SYNTER_ARTIFACT_API_URL

No

Artifact API override used by stage_audience_artifact (default https://api.synterai.com)

These apply to the local npx server only. The hosted server at https://mcp.synterai.com uses browser OAuth and needs no environment variables.


Local Development

# Clone and install
git clone https://github.com/Synter-Media-AI/mcp-server.git
cd mcp-server
npm install

# Build
npm run build

# Run locally
SYNTER_API_KEY=syn_your_key_here node dist/index.js

Troubleshooting

Browser sign-in didn't open (hosted server)

Most clients open the sign-in page the first time a Synter tool is used. In Codex, run codex mcp login synter-ads. If your client can't do a browser sign-in at all, use the X-Synter-Key header fallback described in Local stdio (npx) / API-key fallback.

"SYNTER_API_KEY not set"

Make sure your API key is in the env section of your MCP config. The key should start with syn_.

"Invalid or expired API key"

  1. Check that you copied the full key (they're long!)

  2. Verify the key is active at synterai.com/developer

  3. Make sure the key has tools:write scope

"No ad accounts connected"

You need to connect at least one ad platform:

  1. Go to synterai.com/integrations

  2. Click "Connect" next to Google Ads (or another platform)

  3. Complete the OAuth authorization

Tools aren't showing in Claude/Cursor

  1. Restart your AI client completely (not just refresh)

  2. Check the MCP server logs for errors

  3. Verify the config file path and JSON syntax


FAQ

Is there an MCP server for Google Ads?

Yes. Synter supports Google Ads reporting, Search, Display, and Performance Max campaign creation, keywords, budget updates, audience management, and conversion tracking. Google Ads is one of the 16 platforms with verified write and create; write/create depth varies by platform API.

Can Claude or ChatGPT manage my ad campaigns?

Yes. Add https://mcp.synterai.com as a custom connector and complete OAuth 2.1 browser sign-in. Synter reads across 43 ad platforms; 16 have verified write and create, with depth varying by platform API. No API key is needed for hosted access. Clients that only support stdio can use npx -y @synterai/mcp-server with SYNTER_API_KEY.


Resources


About

Synter builds tools for ad operations. Visit synterai.com/mcp for hosted MCP access and setup documentation.


License

MIT License - see LICENSE for details.


Available Tools

21 tools
add_keywordsB
Destructive

Add keywords to a Google Ads campaign or ad group.

NameRequiredDescriptionDefault
ad_group_idYesAd group ID to add keywords to
keywordsYesKeywords to add
match_typeNoKeyword match type (default: PHRASE)

TDQS

B3.1/5.0
Behavior3/5

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

Description states 'Add keywords', consistent with destructiveHint annotation. No additional behavioral context beyond the annotation. Since annotations already flag destructive behavior, description does not need to repeat but could add value on side effects like cost impact.

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?

Single sentence, no wasted words. Information is front-loaded. Appropriate for a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

No output schema and description does not explain return values or error conditions. For a mutation tool (destructiveHint), agent needs to know what to expect after execution. Missing this context reduces completeness.

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 all parameters have descriptions. The description adds no extra nuance beyond what the schema 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.

Purpose4/5

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

Clearly states adding keywords to Google Ads. Verb and resource are specific. However, description mentions both campaign and ad group, but input schema only requires ad_group_id, slightly inaccurate. Distinguishes from sibling 'add_negative_keywords' by implication.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like add_negative_keywords. No context on prerequisites or exclusion criteria. Agent must infer from name alone.

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

add_negative_keywordsB
Destructive

Add negative keywords to block unwanted search terms.

NameRequiredDescriptionDefault
campaign_idYesCampaign ID
keywordsYesNegative keywords to add
levelNoLevel to apply negatives (default: CAMPAIGN)

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already mark destructiveHint=true, but the description adds no further behavioral context such as whether it overwrites existing negatives, idempotency, or permission requirements. For a mutation tool, this is insufficient.

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 a single sentence, which is concise and front-loaded with the action. It earns its place but could be slightly more informative without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/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 and the destructive nature, the description is too minimal. It does not mention return values, side effects, or prerequisites. The tool has 3 parameters and a destructive hint, warranting more context.

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 the description adds no extra meaning beyond the schema. It does not elaborate on the 'level' enum or keyword format. 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 verb 'Add' and resource 'negative keywords', with the purpose 'to block unwanted search terms'. It effectively distinguishes from the sibling 'add_keywords' tool which adds regular keywords.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'add_keywords', nor does it mention any conditions or prerequisites. The agent is left to infer usage without explicit context.

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

create_conversionA
Destructive

Create a conversion action in Google Ads. Returns the conversion ID and label for GTM setup.

NameRequiredDescriptionDefault
nameYesName for the conversion action (e.g., 'Signup', 'Purchase')
valueNoDefault conversion value in USD (optional)
categoryNoConversion category (default: LEAD)

TDQS

A3.5/5.0
Behavior3/5

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

DestructiveHint annotation already signals mutability. Description adds return value info but doesn't mention side effects like cost implications or that it creates a new resource. Moderate addition beyond annotation.

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 very concise sentences with no wasted words. Purpose and return value front-loaded.

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 3 params, no output schema, and destructive annotation, description covers creation and return value but omits examples or guidance on parameter usage (e.g., value format, category examples). Adequate but not comprehensive.

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 description adds no extra parameter meaning beyond the schema. Baseline 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?

Clearly states verb 'Create a conversion action' and resource 'Google Ads'. Mentions return values (conversion ID and label for GTM setup), distinguishing it from retrieval tools like list_conversions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool vs alternatives like list_conversions or other creation tools. Lacks context about prerequisites or integration with GTM.

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

create_display_campaignB
Destructive

Create a Google Ads Display campaign with responsive display ads. Supports image uploads from URLs.

NameRequiredDescriptionDefault
campaign_nameYesName for the campaign
daily_budgetYesDaily budget in USD
landscape_image_urlNoURL to 1200x628 landscape image
square_image_urlNoURL to 1200x1200 square image
headlinesYesHeadlines (1-5, max 30 chars each)
descriptionsYesDescriptions (1-5, max 90 chars each)
business_nameYesBusiness name (max 25 chars)
final_urlYesLanding page URL
geo_targetsNoGeo target codes

TDQS

B3.2/5.0
Behavior2/5

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

The annotations include destructiveHint: true, indicating this tool modifies resources. The description only adds 'Create' and 'Supports image uploads from URLs', which aligns with the annotation but does not provide additional behavioral context such as costs, permissions, or side effects.

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 that is concise and front-loaded with the core purpose. There is no unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

For a tool with 9 parameters, 6 required, and no output schema, the description is too brief. It does not explain return values, campaign lifecycle, or provide operational context critical for correct usage.

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%, so the schema already documents parameters. The description adds marginal value by linking 'image uploads from URLs' to the image URL parameters, but overall it does not significantly enhance understanding 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 'Create a Google Ads Display campaign with responsive display ads', specifying the verb and resource. It distinguishes from sibling tools like create_search_campaign by explicitly mentioning 'Display' and 'responsive display ads'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide guidance on when to use this tool versus alternatives. It mentions 'Supports image uploads from URLs' but does not contrast with other campaign creation tools or specify scenarios where this tool is preferred.

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

create_linkedin_campaignC
Destructive

Create a LinkedIn Ads campaign for B2B advertising.

NameRequiredDescriptionDefault
nameYesCampaign name
objectiveYesCampaign objective
daily_budgetYesDaily budget in USD
target_company_sizesNoTarget company sizes
target_industriesNoTarget industries (LinkedIn industry codes)
target_job_functionsNoTarget job functions (e.g., 'Marketing', 'Engineering', 'Sales')

TDQS

C2.9/5.0
Behavior2/5

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

Annotations declare destructiveHint=true, consistent with the 'Create' action. However, the description does not disclose behavioral traits such as billing implications, required setup (e.g., ad account), or whether the campaign is created in draft or active state. With only destructiveHint, more context is needed.

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 a single sentence, concise and front-loaded. However, it is too minimal and could include more information without becoming verbose. A score of 5 would require every sentence to earn its place, but here the sentence is vague about purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

The tool has 6 parameters (3 required) and no output schema, yet the description omits critical context such as prerequisites (e.g., needing an ad account), return value behavior, or the significance of 'B2B advertising'. It is not complete enough for an agent to use effectively.

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%, so the input schema already documents all parameters. The description adds no additional meaning or context to any parameter. Baseline 3 is appropriate.

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 verb 'Create' and the resource 'LinkedIn Ads campaign', which is specific. However, it does not explicitly distinguish from sibling campaign creation tools for other platforms (e.g., create_meta_campaign), though the mention of 'LinkedIn' helps. A higher score would require explicit sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives (e.g., other campaign creation tools). The description does not mention prerequisites, context, or exclusions. The agent must infer usage from the name alone.

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

create_meta_campaignC
Destructive

Create a Meta (Facebook/Instagram) advertising campaign.

NameRequiredDescriptionDefault
nameYesCampaign name
objectiveYesCampaign objective
daily_budgetYesDaily budget in USD

TDQS

C2.9/5.0
Behavior2/5

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

The annotation `destructiveHint: true` is present, but the description adds no behavioral context beyond that. It does not disclose details such as auth requirements, rate limits, or the fact that the tool commits real ad spend.

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 a single sentence with no wasted words, but it could benefit from additional structure or elaboration without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

Given the tool has 3 parameters, no output schema, and only a destructive annotation, the description fails to explain what the tool returns or how the campaign is configured beyond the listed parameters. It is incomplete for guiding the agent.

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 the input schema already describes all three parameters. The description adds no additional meaning or context for the parameters, such as explaining the enum values or budget implications.

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 verb 'Create' and the resource 'Meta (Facebook/Instagram) advertising campaign', distinguishing it from sibling tools for other platforms. However, it lacks any detail that differentiates it from other campaign creation tools within the same platform.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The only implicit distinction is the platform name, but there is no explicit when/when-not context or mention of prerequisites.

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

create_pmax_campaignB
Destructive

Create a Google Ads Performance Max campaign. Requires images, headlines, descriptions, and a business name.

NameRequiredDescriptionDefault
campaign_nameYesName for the campaign
daily_budgetYesDaily budget in USD
headlinesYesHeadlines (3-15, max 30 chars each)
long_headlineYesLong headline (max 90 chars)
descriptionsYesDescriptions (2-5, max 90 chars each)
business_nameYesBusiness name (max 25 chars)
final_urlYesLanding page URL
landscape_image_urlNoURL to 1200x628 landscape image
square_image_urlNoURL to 1200x1200 square image
logo_urlNoURL to square logo (min 128x128)
geo_targetsNoGeo target codes
target_cpaNoTarget CPA in USD (optional)

TDQS

B3.4/5.0
Behavior2/5

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

Annotations indicate destructiveHint: true, consistent with creating a campaign. However, the description adds no further behavioral context such as cost implications, immediate activation, or required permissions. With annotations, the bar is lower, but still lacks meaningful disclosure.

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?

Single, well-front-loaded sentence with no fluff. Every word serves to convey the tool's purpose and key requirements.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

No output schema and description does not mention return values (e.g., campaign ID). For a complex creation tool with 12 parameters, more context about success indicators or error states would be beneficial.

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%, so the schema already documents all 12 parameters. The description highlights a subset of required inputs but does not add meaning beyond what's in the schema. 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?

Description clearly states the tool creates a Google Ads Performance Max campaign and lists required elements (images, headlines, descriptions, business name). This distinguishes it from siblings like create_search_campaign or create_display_campaign.

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?

Description implies usage for Performance Max campaigns but does not explicitly state when to use it versus alternatives or provide exclusions. No guidance on prerequisites like having a Google Ads account or linked advertisers.

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

create_reddit_campaignA
Destructive

Create a Reddit Ads campaign for community-based advertising.

NameRequiredDescriptionDefault
nameYesCampaign name
objectiveYesCampaign objective
daily_budgetYesDaily budget in USD
subredditsNoSubreddits to target (optional - omit for interest-based targeting)
interestsNoInterest categories to target

TDQS

A3.9/5.0
Behavior3/5

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

The annotation destructiveHint: true signals that the tool has a destructive effect (spending money). The description does not add additional behavioral details (e.g., billing, approval process). Given the annotation coverage, the description adds minimal extra value.

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?

A single, clear sentence that efficiently conveys the tool's purpose without extraneous words. Well-structured and front-loaded.

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?

The description is adequate for a creation tool with 5 parameters and destructive hint. However, it lacks information about expected outputs (e.g., campaign ID) and post-creation steps, which would be helpful given no 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?

Schema description coverage is 100%, so the schema fully documents parameters. The description adds no additional parameter information beyond the schema, meeting the baseline for high coverage.

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 'Create a Reddit Ads campaign for community-based advertising', specifying the action (create), resource (Reddit Ads campaign), and context (community-based). The name and sibling tools differentiate it from other platform-specific campaign creation tools.

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 use for Reddit Ads campaigns, and sibling tool names (e.g., create_linkedin_campaign) provide implicit differentiation. However, no explicit when-to-use or when-not-to-use guidance is given.

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

create_search_campaignA
Destructive

Create a Google Ads Search campaign with keywords. Sets up campaign, ad group, keywords, and responsive search ads.

NameRequiredDescriptionDefault
campaign_nameYesName for the campaign
daily_budgetYesDaily budget in USD
keywordsYesKeywords to target (will be added as phrase match)
headlinesYesHeadlines for the responsive search ad (3-15, max 30 chars each)
descriptionsYesDescriptions for the responsive search ad (2-4, max 90 chars each)
final_urlYesLanding page URL
geo_targetsNoGeo target codes (e.g., '2840' for US, '2826' for UK)

TDQS

A4/5.0
Behavior4/5

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

The annotations provide destructiveHint=true, indicating this is a write operation. The description adds valuable context beyond this by specifying that it creates multiple related entities (campaign, ad group, keywords, and responsive search ads) in a single operation, which helps the agent understand the scope and potential impact of the tool. However, it doesn't mention authentication requirements, rate limits, or error conditions.

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 perfectly concise - two sentences that efficiently convey the tool's purpose and scope without any wasted words. It's front-loaded with the main action and follows with specific details about what gets created. Every sentence earns its place.

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 complex creation tool with 7 parameters and destructiveHint annotation, the description provides good context about what gets created. However, without an output schema, it doesn't describe what the tool returns (e.g., campaign ID, confirmation). The description covers the creation scope well but could benefit from mentioning the tool's response format or success indicators.

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?

With 100% schema description coverage, the input schema already documents all 7 parameters thoroughly. The description doesn't add any additional parameter semantics beyond what's in the schema - it mentions keywords and responsive search ads but doesn't provide format details or constraints beyond what the schema already specifies. The baseline score of 3 is appropriate when the 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 specific action ('Create a Google Ads Search campaign with keywords') and specifies the exact resources being created ('Sets up campaign, ad group, keywords, and responsive search ads'). It distinguishes this from sibling tools like 'create_display_campaign' or 'create_pmax_campaign' by specifying this is for Search 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 context by specifying 'Google Ads Search campaign with keywords' and listing what gets created, but it doesn't explicitly state when to use this tool versus alternatives like 'create_display_campaign' or 'create_meta_campaign'. No guidance is provided about prerequisites, timing considerations, or when NOT to use this tool.

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

diagnose_trackingA
Read-only

Check if conversion tracking is properly set up on a website. Verifies gtag.js, GTM, and pixel installation.

NameRequiredDescriptionDefault
urlYesWebsite URL to check

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true. The description adds specific behavioral context by naming the technologies verified (gtag.js, GTM, pixel). It does not contradict annotations and provides additional transparency about the tool's scope.

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 exceptionally concise: two sentences that front-load the purpose and then provide details. Every word is necessary, and there is no wasted text.

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 simplicity of the tool (one param, read-only, no output schema), the description is mostly complete. It could add what the result looks like (e.g., a report of issues), but the current text suffices for selection and invocation.

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% for the single parameter. The parameter description ('Website URL to check') aligns with the tool description. The description adds no further meaning beyond the schema, so 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 purpose: 'Check if conversion tracking is properly set up on a website.' It specifies the resources checked (gtag.js, GTM, pixel), distinguishing it from sibling tools like 'list_conversions' and 'create_conversion' which handle conversion data rather than diagnosing setup.

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 for diagnosing tracking setup, but lacks explicit guidance on when to use this tool versus alternatives (e.g., 'create_conversion' for creating new conversions). No exclusions or context are provided, so the usage is only implied.

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

generate_imageB
Destructive

Generate an AI image for ad creatives using Imagen 4, Flux, or Stable Diffusion.

NameRequiredDescriptionDefault
promptYesImage generation prompt (be specific about style, layout, colors)
sizeNoImage dimensions (default: 1200x628 for display ads)
providerNoAI provider (default: imagen)
nameNoAsset name for organization

TDQS

B3.1/5.0
Behavior2/5

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

Annotations indicate destructiveHint: true, but the description says 'Generate an AI image' which typically implies creation, not destruction. This contradiction suggests potential harmful effects (e.g., billing or overwriting) that are not disclosed. The description does not mention rate limits, costs, or side effects.

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 a single short sentence, front-loaded with the key action. However, mentioning provider names duplicates schema content, but it's still efficient with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

With 4 parameters, no output schema, and a destructive annotation, the description is insufficient. It does not explain what the output is (e.g., URL, file path), how to use the image, or any return format. Sibling tools have more complete descriptions, making this one feel incomplete.

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 the description adds minimal value beyond the schema. Listing providers (Imagen 4, Flux, Stable Diffusion) mirrors the enums, and no extra parameter guidance is given.

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 generates AI images for ad creatives, specifying the verb (generate), resource (AI image), and context (ad creatives). It lists specific models (Imagen 4, Flux, Stable Diffusion) and is distinct from sibling tools like generate_video and upload_image.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like upload_image or generate_video. It does not mention prerequisites, ideal use cases, 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.

generate_videoB
Destructive

Generate an AI video ad using Veo, Runway, or Luma. Great for YouTube and social ads.

NameRequiredDescriptionDefault
conceptNoVideo concept framework (default: pas = Problem-Agitate-Solve)
product_nameYesProduct or brand name
target_audienceNoWho is this video for?
key_benefitYesMain value proposition
durationNoVideo duration in seconds (default: 8)
providerNoAI provider (default: veo)

TDQS

B3.4/5.0
Behavior2/5

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

Annotations set destructiveHint: true, indicating the tool is destructive, but the description does not add beyond that. It fails to disclose that generating a video costs money, requires API keys, or affects quotas. The description is silent on side effects, making it insufficiently transparent for a destructive 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 two short sentences: the first clearly states the purpose, and the second adds use-case context. Every word earns its place—no redundancy, fluff, or irrelevant details. It is optimally concise for an AI agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

Critical details are missing: no output schema means the description should explain what is returned (e.g., a video URL, file), but it does not. It also lacks warnings about costs, required accounts, or that the tool consumes credits. For a destructive, resource-generating tool, this omission is significant.

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?

Input schema coverage is 100% with each parameter described. The description adds no parameter-level information beyond the schema, but it mentions provider names (Veo, Runway, Luma) which align with the provider enum. This provides minor contextual reinforcement but no new meaning.

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: 'Generate an AI video ad using Veo, Runway, or Luma.' It specifies the resource (video ad) and action (generate), and distinguishes from sibling tool generate_image by focusing on video. The additional context 'Great for YouTube and social ads' further clarifies its use case.

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 provides some usage context ('Great for YouTube and social ads') but lacks explicit guidance on when to use versus alternatives (e.g., generate_image) or when not to use. It does not mention prerequisites, such as having accounts with the listed providers, nor does it specify that it is a destructive tool that may incur costs.

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

get_daily_spendA
Read-only

Get daily spend breakdown across all connected ad accounts.

NameRequiredDescriptionDefault
daysNoNumber of days to look back (default: 7)
platformNoFilter by platform (optional)

TDQS

A4/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, so the description does not need to reiterate that. The description adds value by specifying that the tool returns spend across 'all connected ad accounts,' which is a useful behavioral detail beyond the schema and 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 sentence that is front-loaded with the key action and resource. Every word earns its place, and there is no unnecessary 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?

For a simple read-only tool with two optional parameters and no output schema, the description is largely complete. It could be improved by mentioning the default date range or the format of the breakdown, but it is still adequate for an agent to understand the tool's purpose.

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?

With schema description coverage at 100%, the baseline is 3. The description does not add any information about parameters beyond what the schema already provides, nor does it need to, as the schema descriptions are clear.

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 'Get daily spend breakdown across all connected ad accounts' uses a specific verb ('Get') and clearly identifies the resource ('daily spend breakdown') and scope ('all connected ad accounts'). It effectively distinguishes this tool from its siblings, which are focused on campaign creation and management.

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 for retrieving spend data but does not explicitly state when to use this tool versus alternatives like get_performance or when not to use it. No exclusions or prerequisites are mentioned.

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

get_performanceB
Read-only

Get performance metrics (impressions, clicks, spend, conversions, ROAS) for campaigns.

NameRequiredDescriptionDefault
platformNoFilter by platform (optional)
campaign_idNoFilter by specific campaign ID (optional)
date_rangeNoDate range for metrics (default: LAST_7_DAYS)

TDQS

B3.4/5.0
Behavior3/5

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

The description aligns with the readOnlyHint annotation, indicating a safe read operation. However, it adds no behavioral details beyond the annotation (e.g., rate limits, data freshness, or return structure).

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 a single sentence with no unnecessary words. It is efficiently written but could benefit from slightly more structure (e.g., listing parameters or typical usage).

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?

The tool has three optional parameters and no output schema. The description does not explain what happens if no parameters are provided (e.g., returns all campaigns) or describe the response format, leaving gaps for an agent.

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%, so the parameters are well-documented there. The description does not add further meaning or examples beyond the schema 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 clearly states the tool retrieves performance metrics for campaigns, listing specific metric types (impressions, clicks, spend, conversions, ROAS). This distinguishes it from sibling tools like get_daily_spend, which only returns spend data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives such as get_daily_spend or list_campaigns. The description does not mention prerequisites or contexts where this tool is preferred.

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

list_ad_accountsA
Read-only

List all connected ad accounts across platforms.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so safety is covered. The description adds clarity on scope ('all connected ad accounts across platforms'), which is useful behavioral context beyond the annotation.

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?

Single sentence, front-loaded with the verb, no wasted words. Perfectly concise for the simplicity of the tool.

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 no output schema, the description adequately states what the tool does. However, it does not hint at the structure of the returned data, which slightly reduces completeness for a tool with no output schema.

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?

No parameters exist, so schema coverage is effectively 100%. Per rubric, 0 parameters yields a baseline of 4, and the description adds no redundant parameter information.

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 verb 'list' and resource 'ad accounts', and specifies the scope 'all connected ad accounts across platforms'. This distinctively separates it from sibling tools like list_campaigns or list_conversions.

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?

No explicit guidance on when to use or avoid this tool versus alternatives. The description implies its usage for listing ad accounts, but does not provide exclusions or context for when other tools are more appropriate.

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

list_campaignsA
Read-only

List all campaigns across connected ad platforms. Returns campaign name, status, budget, and performance metrics.

NameRequiredDescriptionDefault
platformNoFilter by platform (optional - lists all if not specified)
statusNoFilter by campaign status
limitNoMaximum number of campaigns to return (default: 50)

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true, so the description need not repeat that. It adds value by stating exactly what fields are returned, which helps the agent understand the output. However, it does not mention any other behavioral details like pagination or performance impact.

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: first states the core action, second specifies the output. No fluff or 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?

For a simple list tool with three optional parameters and no output schema, the description covers the purpose and return fields adequately. It could mention ordering or lack of pagination details, but overall it is sufficient.

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?

All parameters have schema descriptions (100% coverage), so the description does not need to add parameter semantics. The description does not provide any extra parameter-specific details 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 that the tool lists all campaigns across connected ad platforms and specifies the returned fields (name, status, budget, performance metrics). It distinguishes itself from sibling tools like create_campaign variants and other list tools.

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 does not explicitly state when to use this tool versus alternatives. It implies usage for general campaign listing but lacks guidance on when to filter or when to use other list tools (e.g., list_ad_accounts).

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

list_conversionsA
Read-only

List all conversion actions configured in Google Ads.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

The annotation readOnlyHint=true already indicates a safe read operation. The description adds useful context by stating 'all conversion actions,' implying no filtering or side effects. However, it does not disclose details like pagination or response format.

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, front-loaded sentence with no extraneous information. Every word is necessary and earns its place.

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 (no parameters, read-only), the description is mostly complete. It could mention that the output is a list of conversion actions, but the lack of an output schema makes it acceptable.

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 input schema has no parameters, so schema description coverage is effectively 100%. The description adds no parameter information, but baseline for zero parameters is 4.

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 the resource 'conversion actions,' clearly indicating the tool's function. It effectively distinguishes itself from sibling tools like create_conversion, which involves creating, not listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as create_conversion or diagnose_tracking. Usage context is only implied by the verb 'list,' which is insufficient for clear decision-making.

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

pause_campaignB
Destructive

Pause a campaign by ID. Works across all connected platforms.

NameRequiredDescriptionDefault
campaign_idYesCampaign ID (platform-specific format)
platformYesAd platform

TDQS

B3.1/5.0
Behavior2/5

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

The description does not elaborate on behavioral traits beyond the destructiveHint annotation. It doesn't clarify whether pausing is reversible, what side effects occur (e.g., stops spend immediately or gradually), or any prerequisites. The term 'Pause' suggests a reversible action, which may contradict the destructiveHint annotation, creating ambiguity.

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 very short (two sentences) and front-loaded with the action. It is concise, but the brevity comes at the cost of completeness. Every sentence earns its place, but more detail would be beneficial.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

Given the tool has two parameters, no output schema, and a destructiveHint annotation, the description is minimal. It does not explain the return behavior, confirm the action, or differentiate from 25 sibling tools that also modify campaigns. The scope claim is useful but insufficient for complete context.

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 covers both parameters (platform and campaign_id) with descriptions and enums. The description adds no additional semantic value beyond stating 'by ID' and 'across platforms', which is already implied by the schema. With 100% schema coverage, 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 clearly states the verb 'Pause' and the resource 'campaign by ID', and specifies the scope 'Works across all connected platforms'. This effectively distinguishes it from sibling tools that create, list, update, or manage campaigns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives, nor does it mention when not to use it. It merely states the action without contextual cues, leaving the agent to infer usage from the tool name alone.

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

run_toolA
Destructive

Run any Synter tool by name. Use this for advanced operations not covered by other tools. See docs.syntermedia.ai for full tool list.

NameRequiredDescriptionDefault
script_nameYesName of the tool to run (e.g., 'google_ads_list_audiences')
argsNoArguments to pass to the tool
platformNoPlatform for OAuth credentials (google, meta, linkedin, etc.)

TDQS

A4/5.0
Behavior3/5

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

The destructiveHint annotation indicates destructive potential, but the description adds no behavioral details beyond 'run'. No contradiction, but minimal added value.

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 with no redundant information, effectively front-loading the key purpose and guidance.

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?

As a generic runner for fallback cases, the description adequately orients the user, especially with the pointer to external docs. No output schema, but this is acceptable given the tool's nature.

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?

All parameters have schema descriptions (100% coverage). The tool description adds no additional parameter meaning beyond what's 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 the tool's purpose: 'Run any Synter tool by name.' It distinguishes from sibling tools by positioning itself as a generic runner for operations not covered by specific tools.

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 advises using this tool for 'advanced operations not covered by other tools' and references full documentation, providing clear context for when to use it over siblings.

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

update_campaign_budgetA
Destructive

Update the daily budget for a campaign.

NameRequiredDescriptionDefault
campaign_idYesCampaign ID
platformYesAd platform
daily_budgetYesNew daily budget in USD

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true, so the description's 'update' aligns. However, it adds no additional behavioral context (e.g., immediate effect, permission requirements) that would help an agent anticipate side effects.

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, concise sentence with no redundant information. It is front-loaded with the key action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

For a mutation tool with no output schema, the description lacks details about return values, side effects (e.g., whether it updates immediately or queues), and error conditions. More context would aid agent decision-making.

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 parameters are documented. The description adds no further meaning beyond the schema (e.g., units for budget, allowed ranges). Baseline score 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 verb 'update' and resource 'daily budget for a campaign,' leaving no ambiguity about the tool's function. It effectively distinguishes from sibling tools like 'pause_campaign' or '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 the tool is for updating daily budgets but provides no explicit guidance on when to use it versus other budget-related tools (e.g., if there are other budget update tools). No prerequisites or restrictions are mentioned.

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

upload_imageB
Destructive

Upload an image as an asset for use in ads.

NameRequiredDescriptionDefault
image_urlYesURL of the image to upload
asset_nameYesName for the asset
platformNoTarget platform (default: google)

TDQS

B3.3/5.0
Behavior2/5

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

Annotations indicate destructiveHint: true, but description adds no extra behavioral context such as error handling, overwrite behavior, or rate limits.

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?

Single concise sentence with no unnecessary words, fully front-loaded with the core purpose.

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?

Adequate for a simple tool with only 3 parameters and no output schema, but lacks details on required permissions, file type restrictions, or usage context relative to sibling tools.

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 descriptions for all parameters, but the tool description adds no extra context beyond what is in the schema (e.g., file size limits, accepted formats).

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 uploads an image as an asset for ads, with a specific verb and resource. It distinguishes from sibling tools like generate_image.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like generate_image or other asset management tools. Never mentions prerequisites or platform-specific considerations.

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. 21 tool updatesv1.0.0
    • First observedadd_keywords
    • First observedadd_negative_keywords
    • First observedcreate_conversion
    • First observedcreate_display_campaign
    • First observedcreate_linkedin_campaign
    • First observedcreate_meta_campaign
    • First observedcreate_pmax_campaign
    • First observedcreate_reddit_campaign
    • First observedcreate_search_campaign
    • First observeddiagnose_tracking
    • First observedgenerate_image
    • First observedgenerate_video
    • First observedget_daily_spend
    • First observedget_performance
    • First observedlist_ad_accounts
    • First observedlist_campaigns
    • First observedlist_conversions
    • First observedpause_campaign
    • First observedrun_tool
    • First observedupdate_campaign_budget
    • First observedupload_image

TDQS

A3.6/5.0

Scored across 21 tools

Disambiguation4/5

Most tools have distinct purposes targeting specific ad platform operations (e.g., create_search_campaign vs. create_display_campaign), but 'run_tool' introduces ambiguity as it overlaps with other tools by allowing execution of unspecified operations. The other 20 tools are well-differentiated by platform and action.

Naming Consistency5/5

Tool names follow a consistent verb_noun pattern throughout (e.g., create_search_campaign, list_campaigns, update_campaign_budget), with clear and predictable naming conventions. There are no deviations in style or structure across the set.

Tool Count4/5

With 21 tools, the count is slightly high but reasonable for a multi-platform ad management server, covering operations across Google Ads, Meta, LinkedIn, and Reddit. It feels comprehensive without being overly bloated, though it borders on the upper limit of typical scope.

Completeness4/5

The tool set provides strong coverage for ad campaign creation, management, and performance tracking across multiple platforms, with clear CRUD-like operations (e.g., create, list, pause, update). Minor gaps exist, such as no explicit tools for deleting campaigns or editing ad creatives, but agents can likely work around these using available tools like 'run_tool' or platform-specific updates.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • 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
    MCP server that enables AI agents (Claude Code) to manage Criteo campaigns, ad sets, creatives, audiences, and reports via natural language.
    -