Skip to main content
Glama

Synter MCP Server

npm version License: MIT

An open-source MCP server for running ads with AI agents.

Run ads across 16 ad platforms from any MCP client: Google Ads, Microsoft Ads, Meta, LinkedIn, X, Reddit, TikTok, Snapchat, Pinterest, Spotify, Amazon Ads, Amazon DSP, The Trade Desk, OpenAI Ads, Display & Video 360, and StackAdapt. Destructive tools are flagged so your MCP client asks before running them.

Create campaigns. Adjust budgets. Pause underperformers. Generate creatives. Pull performance data. All through natural conversation.

An open-source Model Context Protocol (MCP) server that lets AI agents read and run your ad accounts, with write tools flagged so your MCP client asks before running them.

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

The hosted server lives at https://mcp.synterai.com. Add it to your client and sign in through your browser the first time you use it (OAuth with dynamic client registration and PKCE, per the MCP authorization spec). No API key to copy, nothing to install locally.

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 @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.

Official packages: 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

How Synter Compares

The official Google Ads MCP server is read-only by design: per Google's documentation, it is "strictly read-only" and "cannot modify bids, pause campaigns, or create new assets." Most third-party ad MCP servers cover a single platform or provide raw schema protocols without an execution engine. We built Synter to do both halves of the job, across every major buying channel, with free read-only diagnostics and grounded verification.

Synter MCP

Official Google Ads MCP

AdCP (Ad Context Protocol)

Pipeboard

Free Read Access

✅ 100% Free ($0.00 / 0 credits)

✅ Free (Google only)

Schema spec only

❌ Paywalled after trial

Write Mutations

✅ Managed paywall (SOLO, SCALE, CUSTOM)

❌ Read-only

❌ Spec only

⚠️ Single-channel proxy

Platform Coverage

16 ad platforms (list below)

Google Ads only

Spec standard only

6 platforms

Grounded Verification

✅ Synter Ångström live readback

❌

❌

❌

Pre-Approved OAuth

✅ 1-click self-serve

Custom cloud setup

None

Basic API keys

AI Creative Generation

✅ Images, video, copy

❌

❌

❌

Audience Sync

✅ Cross-channel custom audiences

❌

❌

❌

Safety

Write tools annotated as destructive

n/a (read-only)

n/a

Varies

Open Source

✅ MIT

✅ Apache 2.0

✅ Apache 2.0

❌ Closed source core

16 ad platforms: Google Ads, Microsoft Ads (Bing), Meta (Facebook and Instagram), LinkedIn Ads, X (Twitter) Ads, Reddit Ads, TikTok Ads, Snapchat Ads, Pinterest Ads, Spotify Ads, Amazon Ads (Sponsored Products, Brands, and Display), Amazon DSP, The Trade Desk, OpenAI Ads (ChatGPT), Display & Video 360, and StackAdapt.

Full campaign creation is available on most of them. Display & Video 360 and StackAdapt support write actions (pause, budget and line-item updates, audience upload) without campaign creation. A few retail media networks are also connected for reporting only.

🔬 Synter Ångström Grounded Output Verification

Never trust an unverified API response. Every mutation and observation in Synter is passed through Synter Ångström, which probes live provider APIs to verify that the effective state, servability (RUNNABLE), delivery status, and constraints match the exact requested intent before reporting back to your agent.

💳 Transparent Pricing: Free Reads & Predictable Writes

  • Free Diagnostic Read Tier ($0.00 / 0 credits): Connect your ad accounts and inspect campaigns, pull metrics, and audit tracking completely free. No credit card required.

  • Paid Campaign Execution: When you ask your agent to pause campaigns, adjust budgets, create ads, or scale winning angles, execution is billed transparently through Synter subscription tiers:

    • SOLO: $20 / month ($200 / year), includes $20.00 in claimable monthly credits.

    • SCALE: $500 / month ($5,000 / year), includes $500.00 in claimable monthly credits.

    • CUSTOM: Sales-led enterprise contracts with dedicated capacity.

The hosted server at https://mcp.synterai.com exposes the full hosted tool set, including performance pulls for every platform above. The npx package ships typed tools for the most common operations plus run_tool access to the full catalog of 140+ Synter tools.

For registry-style MCP discovery, server.json is the machine-readable source of truth. Keep it aligned with package.json, manifest.json, gemini-extension.json, and the setup examples in this README.


🔒 Architecture, Security & Privacy

flowchart TD
    Client["AI Agent / MCP Client<br/>(Claude Desktop, Cursor, VS Code, Windsurf)"]
    
    subgraph LocalTransport["Local or Hosted Transport"]
        Stdio["stdio Transport<br/>npx @synterai/mcp-server<br/>(Optional: SYNTER_READ_ONLY=true)"]
        Streamable["Streamable HTTP<br/>https://mcp.synterai.com<br/>(OAuth 2.1 with PKCE)"]
    end
    
    subgraph SynterGateway["Synter Centralized Gateway (api.synterai.com)"]
        Audit["Append-Only Audit Log<br/>(Tool, caller, latency, cost)"]
        WriteGate{"Write Gate & Blast Radius<br/>(SOLO / SCALE / CUSTOM)"}
        Nango["Credential Custody<br/>(OAuth Tokens AES-256 Encrypted via KMS)"]
    end
    
    subgraph AdNetworks["External Ad Platforms (16+ Networks)"]
        Google["Google Ads"]
        Meta["Meta (FB & IG)"]
        LinkedIn["LinkedIn Ads"]
        MSFT["Microsoft Ads"]
        Other["Reddit, TikTok, X, Amazon, etc."]
    end

    Client --> Stdio & Streamable
    Stdio & Streamable --> SynterGateway
    SynterGateway --> Audit
    SynterGateway --> WriteGate
    WriteGate --> Nango
    Nango --> Google & Meta & LinkedIn & MSFT & Other
    
    classDef client fill:#1e293b,stroke:#3b82f6,stroke-width:2px,color:#fff;
    classDef gate fill:#0f172a,stroke:#10b981,stroke-width:2px,color:#fff;
    classDef platform fill:#334155,stroke:#94a3b8,stroke-width:1px,color:#fff;
    class Client,Stdio,Streamable client;
    class Audit,WriteGate,Nango gate;
    class Google,Meta,LinkedIn,MSFT,Other platform;

Blast-Radius Protection (Bounding the Downside)

Unlike database or analytics MCPs where accidents drop temporary tables, unconstrained ad mutations can incur irreversible ad spend. Synter bounds your blast radius through three layers of defense:

  1. Client-Side Read-Only Flag (--read-only / SYNTER_READ_ONLY=true): Pass --read-only or set SYNTER_READ_ONLY=true in your MCP config. Mutating tools (create_, update_, pause_, enable_, sync_audience) are completely unregistered from the tool manifest and blocked locally.

  2. Advisory Tool Annotations (readOnlyHint & destructiveHint): Every tool explicitly declares whether it is read-only or destructive per the Model Context Protocol specification, prompting your client before modifying spend or pausing campaigns.

  3. Server-Side Write Gates: Even if an agent attempts an unauthorized mutation, Synter's central gateway rejects mutating calls for unverified/cardless callers with 402 PAYMENT_METHOD_REQUIRED.

Data Privacy & Zero Model-Training Guarantee

  • Zero Model Training: Customer ad credentials, performance metrics, conversion payloads, and search terms are never used to train or fine-tune models by Synter or its subprocessors.

  • Credential Custody: Ad platform OAuth tokens are encrypted at rest using AES-256 with KMS. Tokens are never passed into LLM prompt contexts.

  • Immutable Audit Logging: 100% of tool executions are logged with caller identity, IP, tool name, latency, and cost ($0.00 on free diagnosis calls).

  • Prompt Injection Resilience: Structured schemas strictly validate all parameters before dispatch, preventing indirect prompt injection from search queries or social comments from altering execution parameters.


⚠️ Fair Warning

Your AI agent will be able to:

  • Create and launch campaigns that spend real budget once they're live

  • Adjust bids that affect how much you pay per click

  • Pause campaigns (sometimes that's a good thing)

  • Add keywords that change who sees your ads

  • Generate creatives and upload them to your accounts

Write tools are annotated as destructive, so MCP clients prompt before running them. But still, maybe don't give this to an agent you just met.


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 @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 an approval-before-spend safety hook:

/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/settings/credentials

  2. Click "Connect" next to each platform

  3. Complete the OAuth flow

  4. Your agent can now manage that platform

Supported ad platforms (16; ✅ = reporting + full campaign creation, ✏️ = reporting + write actions without campaign creation):

  • Google Ads ✅

  • Microsoft Ads (Bing) ✅

  • Meta (Facebook/Instagram) ✅

  • LinkedIn Ads ✅

  • X (Twitter) Ads ✅

  • Reddit Ads ✅

  • TikTok Ads ✅

  • Snapchat Ads ✅

  • Pinterest Ads ✅

  • Spotify Ads ✅

  • Amazon Ads ✅

  • Amazon DSP ✅

  • The Trade Desk ✅

  • OpenAI Ads (ChatGPT) ✅

  • Display & Video 360 ✏️

  • StackAdapt ✏️

A few retail media networks are also connected for reporting only.


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: Confirmations Happen in Your Client

Every write tool, including the universal execute tool, is annotated as destructive, so MCP clients that honor annotations (Claude, Cursor, ChatGPT) ask you before running it. execute runs immediately by default; pass dry_run: true to validate a request without running it. Server-side, Synter checks plan entitlement, account holds, and a payment method on file before campaign writes. It does not add a second approval step, so for anything that spends money, approve only what the account owner wants.


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/settings/credentials

  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, two kinds. Google ships an official Google Ads MCP server, which is read-only in its current release: it can query reports, metrics, and metadata, but per Google's documentation it "cannot modify bids, pause campaigns, or create new assets." Our MCP server covers Google Ads with both read and write: create Search, Display, and Performance Max campaigns, add keywords and negative keywords, adjust budgets, pause campaigns, manage Customer Match audiences, set up conversion tracking, and pull performance data. Google Ads is one of 16 ad platforms the same server covers, with full campaign creation on most of them.

Can Claude or ChatGPT manage my ad campaigns?

Yes. With the Synter MCP server connected, Claude (Claude Desktop, Claude Code), ChatGPT, Cursor, and any other MCP-compatible client can create campaigns, adjust budgets, pause underperformers, generate creatives, and sync audiences, and pull performance data across 16 ad platforms. Add the hosted server at https://mcp.synterai.com and sign in through your browser (OAuth); in Claude.ai and ChatGPT it's a custom connector with that URL. Signup is self-serve at synterai.com/sign-up. Clients that only speak stdio can run npx @synterai/mcp-server with a SYNTER_API_KEY, and headless HTTP clients can send an optional X-Synter-Key header instead of signing in. Destructive tools are flagged so your client asks for confirmation before running them.

What is the difference between the official Google Ads MCP and Synter?

Two things: write access and platform coverage. The official Google Ads MCP is read-only in its current release and covers Google Ads only. Synter covers 16 ad platforms, with full campaign creation on most of them, including Google Ads, Meta, LinkedIn, Microsoft, TikTok, Amazon Ads, Amazon DSP, OpenAI Ads, and The Trade Desk. If you only need Google Ads reporting, the official server is a solid choice. If you want an agent that can act on what it finds, on Google and everywhere else you advertise, that is what we built Synter for.


Resources


About

Synter (synterai.com, formerly syntermedia.ai), the AI ad-operations company, is not affiliated with synter.ai, Synter Resource Group (synter.com), Synterra Media, or Synternet.


License

MIT License - see LICENSE for details.


Available Tools

21 tools
add_keywordsB
Destructive

Add keywords to a Google Ads campaign or ad group.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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.
    -