Skip to main content
Glama
kadam-official

@kadam-net/mcp-server

Official

@kadam-net/mcp-server

npm version npm downloads license node MCP Registry

MCP server for Kadam ad network — manage campaigns, creatives, audiences, sites, and analytics via AI agents.

Built on the Model Context Protocol (MCP), the open standard for connecting LLMs to external tools and data.

Install (one click)

Cursor

Or add manually to .cursor/mcp.json:

{
  "mcpServers": {
    "kadam": {
      "command": "npx",
      "args": ["-y", "@kadam-net/mcp-server"],
      "env": {
        "KADAM_ADV_API_KEY": "your-advertiser-api-key",
        "KADAM_PUB_API_KEY": "your-publisher-api-key"
      }
    }
  }
}

Claude Code

claude mcp add kadam -- npx -y @kadam-net/mcp-server

Then set the env var: export KADAM_ADV_API_KEY=your-key

Claude Desktop

Download → double-click → Install. Or add manually to claude_desktop_config.json (Settings → Developer → Edit Config):

{
  "mcpServers": {
    "kadam": {
      "command": "npx",
      "args": ["-y", "@kadam-net/mcp-server"],
      "env": {
        "KADAM_ADV_API_KEY": "your-advertiser-api-key",
        "KADAM_PUB_API_KEY": "your-publisher-api-key"
      }
    }
  }
}

Any MCP client (universal one-liner)

npx add-mcp @kadam-net/mcp-server

Docker

docker run -i --rm \
  -e KADAM_ADV_API_KEY=your-key \
  kadam/mcp-server:latest

npm global

npm install -g @kadam-net/mcp-server
KADAM_ADV_API_KEY=your-key kadam-mcp-server

Related MCP server: Meta Ads MCP Server

Configuration

Variable

Required

Description

KADAM_ADV_API_KEY

One of two

Advertiser API key from partners.kadam.net -> Profile -> API

KADAM_PUB_API_KEY

One of two

Publisher API key from pub.kadam.net -> Profile -> API

KADAM_ADV_API_BASE

No

Advertiser API URL (default: https://partners.kadam.net/api/v1)

KADAM_PUB_API_BASE

No

Publisher API URL (default: https://pub.kadam.net/api)

LOG_LEVEL

No

Log level: trace, debug, info, warn, error, fatal (default: info)

At least one API key must be provided in stdio mode. In HTTP mode, tokens are passed per-request via Bearer authentication.

Role-based catalog

The tool catalog matches the role of the bearer. Once per session (and once per process in stdio mode) the server calls GET /api/v1/access on the advertiser API, which answers { impersonation: bool }:

Bearer

impersonation

Catalog

Advertiser API key, or a cabinet JWT with sub only

false

75 tools; create_campaign / update_campaign have no manager-only fields

Cabinet JWT with act.sub (a Kadam manager acting for the client)

true

80 tools (adds the five marked "manager-only" below); campaign writes accept hasCorrectPostback, isDirectTrafficPriority, allowMultiAds

Publisher API key

n/a

17 publisher tools; the publisher API has no impersonation

This is a catalog hint, not a gate: the Kadam API enforces the same rule on every call (403 / 422 for a client token). If /access cannot be reached, the session gets the client catalog — the smaller one is always safe to show.

HTTP Transport (multi-tenant deployment)

For server-side deployment serving multiple users:

Variable

Required

Description

MCP_TRANSPORT

No

"stdio" (default) or "http"

MCP_HTTP_PORT

No

HTTP port (default: 8080)

MCP_HTTP_HOST

No

Bind address (default: 0.0.0.0)

KADAM_ADV_DOMAIN

No

Advertiser domain for PRM (default: https://partners.kadam.net)

KADAM_PUB_DOMAIN

No

Publisher domain for PRM (default: https://pub.kadam.net)

docker run -d --name kadam-mcp \
  -e MCP_TRANSPORT=http \
  -p 8080:8080 \
  kadam/mcp-server:latest

Connecting via HTTP (Cursor / Claude)

{
  "mcpServers": {
    "kadam-adv": {
      "url": "https://partners.kadam.net/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_ADV_API_KEY"
      }
    }
  }
}

Connecting via OAuth (ChatGPT)

Add https://partners.kadam.net/mcp (advertiser) or https://pub.kadam.net/mcp (publisher) as Server URL in ChatGPT settings. OAuth discovery, registration, and login happen automatically.

Tools (80)

Advertiser Tools (63)

Requires KADAM_ADV_API_KEY.

Dictionaries

Tool

Description

Annotations

kadam_adv_get_dictionary

Reference dictionary: campaign types, browsers, platforms, devices, connections, categories, isps, conversion templates, countries, regions, cities

readOnly

Campaigns

Tool

Description

Annotations

kadam_adv_list_campaigns

List campaigns with filters (folder, status, type, date, search) and pagination

readOnly

kadam_adv_get_campaign

Get full campaign configuration by ID: landing page URL, bids per country, budgets, targeting, frequency caps, schedule, conversion settings

readOnly

kadam_adv_create_campaign

Create campaign with full targeting (countries, devices, OS, browsers, age, gender, audiences); dryRun: true validates only

—

kadam_adv_update_campaign

Update any campaign fields by ID

—

kadam_adv_set_campaign_status

Bulk status change (active/paused/archived/restored) for comma-separated IDs; reports per-ID result

idempotent

kadam_adv_delete_campaigns

Bulk delete of archived campaigns by comma-separated IDs; requires confirm: true, reports per-ID result

destructive

kadam_adv_move_campaigns

Move campaigns to a campaign group by comma-separated campaign IDs and target group ID

idempotent

kadam_adv_copy_campaign

Copy a campaign into a campaign group: settings and bids are cloned, the copy starts paused and re-enters moderation. Optional pricing-model switch, push <-> in-page push cross-format copy, autorules and per-site bids

—

kadam_adv_bulk_replace_urls

Find and replace a landing-URL fragment across campaigns and their creatives. Manager-only (impersonation sessions); supports dryRun

destructive

kadam_adv_set_campaign_rss

Point a native campaign at an RSS feed to import creatives, or stop the import with an empty link

idempotent

kadam_adv_set_easy_start

Turn Easy Start (curated site set) on or off for a campaign. Manager-only (impersonation sessions)

idempotent

kadam_adv_get_blocked_traffic_sources

Traffic sources rejecting a campaign, split into category blocks and moderation-tag blocks. Manager-only (impersonation sessions)

readOnly

kadam_adv_get_traffic_forecast

Bid-to-traffic curve for a targeting set from yesterday's auction. An empty curve means the forecast could not be built, not that traffic is zero

readOnly

Bid Management

Tool

Description

Annotations

kadam_adv_update_campaign_bid

Update bid for a single campaign (lightweight, no full payload). Falls back to current countries if omitted

idempotent

kadam_adv_bulk_update_bids

Update bids for multiple campaigns at once (all must share the same pricing model)

idempotent

kadam_adv_block_sites

Stop or resume buying sites (zones) in campaigns

—

kadam_adv_update_site_bids

Set per-site (zone) bids: static (0.05), multiplier (x1.5), or remove (0)

idempotent

Campaign Folders

Tool

Description

Annotations

kadam_adv_list_campaign_folders

List folders with campaign counts and budgets

readOnly

kadam_adv_get_campaign_folder

Get a single folder: name, archived state, budgets

readOnly

kadam_adv_create_campaign_folder

Create a new folder (name 1-50 chars)

—

kadam_adv_update_campaign_folder

Partial update: rename and/or change budgets and distribution

—

kadam_adv_set_campaign_folder_status

Bulk action for comma-separated IDs: activate/pause campaigns, archive or restore folders with their campaigns; returns per-folder result

idempotent

Creatives

Tool

Description

Annotations

kadam_adv_list_creatives

List creatives by campaign, status, or search query

readOnly

kadam_adv_create_creative

Create creative for a campaign: image, HTML5 archive, video file or VAST tag (goes through moderation)

—

kadam_adv_update_creative

Update creative fields

—

kadam_adv_set_creative_status

Bulk status change for creatives: active/paused/archived/restored; returns per-creative result

idempotent

kadam_adv_get_creative_test_conversion

Signed links to test a creative's conversion tracking (test click + frame preview)

—

kadam_adv_upload_bulk_images

Stage images for a bulk creative batch (async, returns a job)

—

kadam_adv_create_bulk_creatives

Turn staged images into creatives in several campaigns at once (async, returns a job)

—

kadam_adv_get_bulk_job

State of a bulk batch: staged images, refusals, per-row outcome

—

kadam_adv_copy_creatives

Copy creatives into other campaigns (creatives × targets copies), originals untouched

—

kadam_adv_move_creatives

Move creatives to another campaign of the same format and pricing model; they lose per-geo bids and return to moderation

—

kadam_adv_get_creative_blocked_sources

Traffic sources that reject one creative, split by category and moderation tag. Manager-only (impersonation sessions)

—

kadam_adv_set_creative_bids

Replace the creatives' own per-country bids; countries left out fall back to the campaign bid

—

kadam_adv_delete_creatives

Bulk delete of archived creatives by comma-separated IDs; requires confirm: true, reports per-ID result

destructive

Audiences

Tool

Description

Annotations

kadam_adv_list_audiences

List audiences with search and sorting

readOnly

kadam_adv_get_audience

Get detailed audience info by ID

readOnly

kadam_adv_create_audience

Create audience (pixel, code, fingerprint, or S2S)

—

kadam_adv_update_audience

Update audience settings

—

kadam_adv_get_filtered_audience_sources

Audiences usable as sources of a filtered audience. Manager-only (impersonation sessions)

—

kadam_adv_get_audience_params

Hardcoded parameters a pixel/S2S audience substitutes into its code

—

kadam_adv_set_audience_params

Replace the hardcoded parameters of a pixel/S2S audience

—

kadam_adv_delete_audience

Delete audience permanently (requires confirm: true)

destructive

Finance & Statistics

Tool

Description

Annotations

kadam_adv_list_finance_operations

Transaction history (deposits, charges, refunds)

readOnly

kadam_adv_get_stats

Unified statistics — 3 report types via reportType param: custom (report builder with dimension/metric mapping), sites (per-site breakdown), postbacks (conversion logs)

readOnly

Publisher Tools (17)

Requires KADAM_PUB_API_KEY.

Sites (Sources)

Tool

Description

Annotations

kadam_pub_list_sources

List publisher sites with stats

readOnly

kadam_pub_create_source

Add a new site (starts verification flow)

—

kadam_pub_get_source

Get detailed site info

readOnly

kadam_pub_update_source

Update site name

—

kadam_pub_set_source_status

Change site status (active/paused/archived/unarchived)

idempotent

Ad Units

Tool

Description

Annotations

kadam_pub_list_ad_units

List ad units for a site, filter by format (native/banner/push/popunder/inpagepush)

readOnly

kadam_pub_set_ad_unit_status

Change ad unit status (active/paused/archived/restored)

idempotent

User & Statistics

Tool

Description

Annotations

kadam_pub_get_user_info

Get publisher account info and balance

readOnly

kadam_pub_get_stats

Publisher statistics with human-readable dimension/metric mapping

readOnly

Kadam Smart Mediation

Selling an ad unit's traffic through outside ad networks alongside Kadam demand. The API, the code and the report dimensions call it plain mediation. Read kadam://reference/mediation first; split the income in kadam_pub_get_stats with groupBy=network and the kadam_revenue / mediation_revenue metrics.

Tool

Description

Annotations

kadam_pub_list_mediation_networks

Catalog of networks, which have an account, and what an ad unit already runs

readOnly

kadam_pub_connect_mediation_network

Attach a network to an ad unit (resolves account and placement itself)

—

kadam_pub_update_mediation_network

Change geo, unique cap, proxy policy, tag template, placement or account

—

kadam_pub_set_mediation_network_status

active / paused for a connection

idempotent

kadam_pub_retest_mediation_network

Restart the forced test share (1-50%); starts a new measurement epoch

—

kadam_pub_disconnect_mediation_network

Remove a connection (requires confirm)

destructive

kadam_pub_update_mediation_network_account

Rotate the network API key, rename or disable the account

—

kadam_pub_delete_mediation_network_account

Remove a network account (requires confirm)

destructive

Resources (9)

Static reference data the agent can read before calling tools:

URI

Description

kadam://reference/campaign-types

All ad format types with IDs, features, pricing, and creative specs

kadam://reference/pricing-models

CPC, CPM, CPV, CPA Target with IDs and descriptions

kadam://reference/creative-formats

Creative requirements per campaign type

kadam://reference/ad-unit-types

Publisher ad unit formats with IDs

kadam://reference/site-states

Publisher site lifecycle states

kadam://reference/mediation

Outside ad networks: accounts, placements, connections, test share, income split

kadam://reference/report-dimensions

Available dimensions and metrics for statistics tools

kadam://reference/api-overview

General Kadam API capabilities overview

Prompts (4)

Pre-built workflow templates that guide the agent through multi-step operations:

Prompt

Description

Arguments

kadam_launch_campaign

Step-by-step campaign creation (check types -> create folder -> create campaign -> add creatives)

type, name, url, budget

kadam_campaign_performance

Campaign performance analysis with optimization recommendations

campaignId, period

kadam_optimize_sites

Analyze site performance and suggest blacklist/whitelist changes

campaignId, minClicks, maxCPA

kadam_account_overview

Full account overview — campaigns, spend, top performers

—

Architecture

src/
├── index.ts                  # Entry point, server instructions, transport
├── config.ts                 # Zod-validated env config with cache
├── errors.ts                 # AuthError class
├── logger.ts                 # Pino structured logging (stderr)
├── output-formatter.ts       # Text formatting + 50KB truncation
├── middleware/
│   └── tool-wrapper.ts       # Auth, error handling, logging middleware
├── api/
│   ├── http-client.ts        # Generic HTTP client with retry/429/timeout
│   ├── partners-client.ts    # Advertiser API (lazy singleton)
│   └── pub-client.ts         # Publisher API (lazy singleton)
├── utils/
│   ├── pagination.ts         # Shared pagination extraction
│   ├── cache-once.ts         # Generic async cache-once utility
│   └── dimension-mapper.ts   # Stats dimension name→ID resolution
├── types/
│   ├── common.ts             # Shared types (ApiListResponse, ReportConfig)
│   ├── advertiser.ts         # Campaign, Creative, Audience types + maps
│   ├── publisher.ts          # Source, AdUnit, PubUser types + maps
│   └── tool-module.ts        # ToolModule interface
├── tools/
│   ├── advertiser/           # 63 tools across 14 modules
│   └── publisher/            # 17 tools across 6 modules
├── resources/                # 9 reference resources
└── prompts/                  # 4 workflow prompts

Key Design Decisions

  • ToolWrapper middleware — centralized auth validation, error formatting, and logging for all 80 tools

  • Lazy singleton API clients — one HttpClient instance per product, created on first use

  • Output truncation — hard 50KB limit per response with maxResults (default 25, max 100) to prevent LLM context overflow

  • Human-readable output — formatted tables, aligned entities, pagination metadata instead of raw JSON

  • Tool annotations — readOnlyHint, destructiveHint, idempotentHint to guide agent behavior

  • Server instructions — usage patterns and constraints sent to the LLM on connection

  • Dimension mapping — stats tools accept human-readable names ("clicks", "spend") and resolve them to API IDs internally

  • Role-shaped catalog — the bearer is forwarded untouched, and its role is read once per session from GET /access (see "Role-based catalog"). Tools declare requires: "impersonation" and ToolWrapper skips them for client sessions; campaigns.ts adds the manager-only campaign fields to its schemas only under impersonation. Nothing is enforced here — the API still answers 403 / 422 to a client token — so the catalog can never be wider than the key's real rights, only narrower when /access is unreachable

Development

Prerequisites

  • Node.js >= 18

  • npm

Setup

git clone https://github.com/kadam-official/mcp-server.git
cd mcp-server
npm install
cp .env.example .env  # Fill in your API keys

Commands

npm run dev             # Watch mode with tsx
npm run build           # Production build with Vite
npm run start           # Run built server
npm run typecheck       # TypeScript check
npm run lint            # ESLint
npm run format          # Prettier
npm test                # Run 82 tests
npm run test:coverage   # Tests with V8 coverage
npm run inspect         # MCP Inspector (visual debugger)

Testing

202 tests across 23 files using Vitest + MCP SDK InMemoryTransport:

  • Unit tests — output formatter, config, HTTP client (mocked fetch)

  • Middleware tests — ToolWrapper auth, error formatting, logging

  • Integration tests — full server with all 72 tools, 8 resources, 4 prompts via in-memory MCP client

  • Tool handler tests — each tool module with mocked API clients

npm test
# Test Files  23 passed (23)
#      Tests  202 passed (202)

MCP Inspector

The MCP Inspector provides a visual interface for testing:

npm run build
npm run inspect

Deployment

Docker

docker build -t kadam-mcp-server .
docker run -i --rm -e KADAM_ADV_API_KEY=... kadam-mcp-server

CI/CD

The .gitlab-ci.yml pipeline includes:

  • lint — ESLint + TypeScript check

  • test — Vitest with coverage

  • build — Vite production build

  • publish — npm publish + Docker push (manual trigger)

License

MIT

Available Tools

58 tools
kadam_adv_block_sitesA
Idempotent

Stop or resume buying traffic from sites (zones) in the given campaigns. Zone IDs come from the sites report (macrosId). Blocking is per campaign: a site blocked in one campaign keeps running in the others, so list every campaign it should be stopped in. Repeating the call changes nothing, and a campaign that does not belong to the account refuses the whole request.

ParametersJSON Schema
NameRequiredDescriptionDefault
zonesYesComma-separated site (zone) IDs from the sites report
blockedYestrue — stop buying these sites, false — resume buying them
campaignIdsYesComma-separated campaign IDs

TDQS

A4.4/5.0
Behavior4/5

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

Goes beyond the idempotentHint annotation by spelling out the consequence ('repeating the call changes nothing') and disclosing an all-or-nothing failure mode ('a campaign that does not belong to the account refuses the whole request'). It does not state permission requirements or whether any response is returned, but the atomicity and idempotency disclosure is meaningful for a mutation 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?

Three sentences, front-loaded with the action, then scoping rule, then edge-case behavior. No filler; each sentence carries distinct operational information.

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

Completeness4/5

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

For a 3-parameter mutation tool with only an idempotency annotation and no output schema, the description covers scope, parameter sourcing, idempotency, and failure atomicity. Remaining gaps (permissions, return behavior) are minor.

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

Parameters4/5

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

Schema coverage is 100% so the baseline is 3, but the description adds value beyond the schema: it names the source of zone IDs (sites report, macrosId) and clarifies that campaignIds must enumerate every campaign affected. The blocked flag semantics are already in the schema, so no credit there.

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?

States a specific verb pair (stop/resume buying traffic) and resource (sites/zones in given campaigns), and the per-campaign scoping distinguishes it from siblings like kadam_adv_update_site_bids or kadam_adv_toggle_autorule_slice_block. An agent can identify the operation and its granularity without opening the schema.

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?

Explains the key usage condition – blocking is per campaign, so every campaign must be listed, and zone IDs come from the sites report (macrosId). It gives clear context but does not explicitly name an alternative tool or state when not to use this one.

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

kadam_adv_bulk_update_bidsA
Idempotent

Set the same bid on multiple campaigns at once. All campaigns in the batch must share one pricing model (mixing CPC/CPA errors out). Countries are required (backend rejects an empty list).

ParametersJSON Schema
NameRequiredDescriptionDefault
bidYesBid value in USD (for CPA this is the target CPA cost)
countriesYesComma-separated ISO country codes (e.g. 'US,DE'). Required — backend rejects empty list
campaignIdsYesComma-separated campaign IDs (e.g. '100,200,300')
pricingModelYesPricing model of the campaigns. All campaigns must share this model

TDQS

A4.4/5.0
Behavior4/5

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

Annotations provide idempotentHint=true. The description adds critical behavioral details: mixing pricing models errors out and countries are required. It does not mention if updates overwrite existing bids (implied) or what the response looks like, but given minimal annotations, the description provides meaningful context beyond 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?

Two sentences, no filler, front-loaded with the core action. Every sentence provides necessary information without redundancy. Highly efficient.

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

Completeness4/5

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

The description covers the main action and critical constraints (pricing model, countries). It doesn't explain return values (no output schema) or other edge cases, but for a 4-parameter bulk update tool with high schema coverage, it is sufficiently complete for agent decision-making.

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

Parameters4/5

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

Schema coverage is 100%, so each parameter is already documented. The description adds cross-parameter business logic: all campaigns must share one pricing model. This adds value beyond individual parameter descriptions, justifying a score above baseline 3.

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 'Set the same bid on multiple campaigns at once', with a specific verb and resource. It adds constraints (pricing model, countries) that distinguish it from sibling tools like kadam_adv_update_campaign_bid (single campaign) and kadam_adv_update_site_bids (site level).

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

Usage Guidelines4/5

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

The description explicitly states that all campaigns must share one pricing model and that countries are required. This provides clear context for when to use the tool. However, it does not explicitly exclude alternative tools or provide when-not-to-use guidance, but the constraints serve as implicit guidance.

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

kadam_adv_copy_campaignA

Copy a campaign. Targeting, limits and bids are cloned into a new campaign; statistics and spend are not. The copy always starts paused and goes through moderation again, so it does not spend until activated. Creatives are copied too (all of them by default) and are moderated as new ones.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCampaign ID to copy
bidNoBid for the new pricing model (target CPA cost for cpa_target)
nameYesName for the new campaign
folderIdYesCampaign group the copy is created in
countriesNoComma-separated ISO country codes the new bid applies to (e.g. 'US,DE')
creativesNoWhich creatives to copy: all of them, or only the active ones. Default: all
targetTypeNoCopy into another ad format. Only push <-> inpage_push is supported, and the source campaign must be one of the two
copySiteBidsNoCopy per-site bids and multipliers in the background. Ignored without extended-stats access; rejected when the target group belongs to an account with another currency
pricingModelNoSwitch the copy to another pricing model. Requires bid + countries, because the new model prices geo differently and the source bids cannot be reused
copyAutorulesNoCopy the campaign's autorules. Ignored for accounts without autorules access and for non-CPC campaigns
pauseAfterModerationNoKeep the copied creatives paused once moderation passes. Default: true

TDQS

A4/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false, so the description carries real weight and delivers: what is cloned (targeting, limits, bids) vs not (stats, spend), that the copy starts paused, re-enters moderation, does not spend until activated, and that creatives are copied and re-moderated as new. This is exactly the behavioral context an agent needs for a mutation.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the core action, and each one adds a distinct behavioral fact without redundancy. Zero filler.

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 mutation tool with no output schema this is strong: the description explains post-copy state, moderation, and spend behavior comprehensively. It is slightly short of perfect because return/result expectations are unaddressed, though the schema covers all inputs.

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 11 parameters with detailed semantics. The description adds no extra parameter syntax or format detail beyond what the schema provides (its 'all by default' note merely restates the creatives schema default), so the baseline 3 applies.

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 opening verb+resource ("Copy a campaign") is specific and clearly distinct from create_campaign/update_campaign, and the following sentences sharpen the meaning by stating exactly what is cloned. It stops short of an explicit sibling comparison, so it misses the top tier.

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?

Usage is implied: this duplicates an existing campaign rather than creating one from scratch, and the paused/moderation behavior is stated. However there is no explicit when-to-use, when-not, or alternative (e.g. create_campaign) guidance, so it stays at implied usage.

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

kadam_adv_copy_creativesA

Copy creatives into other campaigns. Every creative is copied into every target campaign, so 2 creatives and 2 targets produce 4 copies. Target campaigns must have the same ad format as the source, and each landing URL must stay on its target campaign's domain. Originals are untouched; copies start paused and go through moderation.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetsYesCampaigns to copy into, each with the landing URL its copies will use
creativeIdsYesComma-separated creative IDs. All must be the same format
pauseAfterModerationNoKeep the copies paused after they pass moderation so they can be reviewed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false, so the description carries real weight and delivers: the cartesian-product behavior (2 creatives x 2 targets = 4 copies), that originals are preserved, that copies start paused, and that they go through moderation. These are exactly the mutation-behavior facts an agent needs before calling a write 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?

Three tight sentences that front-load the purpose, then explain the copy semantics and constraints. No filler; the concrete 2x2=4 example earns its place by clarifying a non-obvious expansion rule.

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 mutating tool with no output schema, the description covers behavior, constraints, and post-copy state well. It stops short of noting the 50-target cap or what the call returns (e.g., new creative IDs), but nothing critical for correct invocation is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not convey: the multiplicative relationship between creativeIds and targets, and the pause-after-copy outcome tied to pauseAfterModeration. It reinforces the url domain constraint already documented 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 opens with a specific verb+resource: 'Copy creatives into other campaigns.' This clearly distinguishes it from siblings like kadam_adv_move_creatives (originals retained vs moved) and kadam_adv_create_creative, so an agent can route without opening the schema.

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?

It gives clear operational context and constraints (same ad format required, landing URL must stay on target domain), and 'originals are untouched' implicitly distinguishes copy from move. However, it never explicitly names an alternative tool or states when-not-to-use, so it stops short of full routing guidance.

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

kadam_adv_create_audienceA

Create an audience. Required fields by type: • audience_code (pixel) — name, expireDays; optional createFingerprint. • audience (stat) — name, expireDays, campaignIds, plus >=1 of hasClicks/hasConversions/hasHolds/hasRejects. • s2s — name, expireDays, linkedAudienceIds (pixel/fingerprint IDs). • fingerprint — not created directly; set createFingerprint=true on a pixel/stat audience. Set dryRun=true to check the payload without creating anything — useful while assembling a campaign and its audience together.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
typeYes
dryRunNoCheck the payload and create nothing
hasHoldsNoTrack holds (type=audience)
hasClicksNoTrack clicks (type=audience)
expireDaysYes
hasRejectsNoTrack rejects (type=audience)
campaignIdsNoComma-separated campaign IDs (required for type=audience)
hasConversionsNoTrack conversions (type=audience)
createFingerprintNoAlso create a linked fingerprint audience (type=audience_code or audience)
linkedAudienceIdsNoComma-separated pixel/fingerprint audience IDs (required for type=s2s)

TDQS

A4.2/5.0
Behavior3/5

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

Annotations only declare readOnlyHint=false, so the description must carry behavioral weight. It usefully discloses that type=fingerprint is never created directly and must be produced as a side effect via createFingerprint=true, and re-explains dryRun's no-op semantics. However it says nothing about permissions, error behavior on partial payloads, or whether a created fingerprint is atomically linked.

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?

Front-loads the core action, then uses a tight type-by-type bullet list rather than prose, with no redundant sentences. The closing dryRun sentence earns its place by giving the practical trigger for using it.

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 an 11-parameter mutation tool with no output schema, the description covers payload composition thoroughly. The remaining gap is the result side: it never indicates what is returned on success (e.g., the new audience ID) or how to verify creation, which an agent orchestrating a campaign create would want.

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

Parameters4/5

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

Schema description coverage is 73%, so the schema already documents most individual flags, but the description adds genuine cross-field semantics absent from the schema: the '>=1 of hasClicks/hasConversions/hasHolds/hasRejects' constraint for type=audience, the required sets per type, and that linkedAudienceIds takes pixel/fingerprint IDs. This meaningfully exceeds the baseline.

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

Purpose5/5

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

States a specific verb and resource ('Create an audience') and then enumerates the exact required field sets for each of the three creatable types, which no other sibling does. An agent can distinguish this from kadam_adv_update_audience, kadam_adv_delete_audience, and kadam_adv_list_audiences from the description alone.

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?

Gives clear per-type selection logic (which fields apply when) and recommends dryRun=true while assembling a campaign and its audience together. It stops short of naming the sibling tools to use for modification or deletion, so it lacks explicit alternatives/exclusions, but the conditional guidance is strong.

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

kadam_adv_create_autoruleA

Create an autorule on a CPC campaign (autorules are CPC-only). Campaigns usually carry several rules (a strategy); call once per rule. bidChange rules require slices + bidRate + bidMax and a spend/clicks condition. A client token holds at most 5 rules per campaign and 300 per account — going over either is refused, so delete a rule before adding one. A token issued to Kadam staff for this account is not bound by those two limits.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesRule type
actionYesAction (must match type): areaBlPut/areaBlRemove (area), campaignStop/dayLimitIncrease (campaign), creoStop/creoActivate (creo), bidChange (bid)
bidMaxNobidChange: max bid cap (>=0.001). REQUIRED for bidChange.
periodYesEvaluation period in days
slicesNobid rules: granularity dimension IDs, e.g. [180,190] = per source x site. REQUIRED for bidChange.
statByNo
bidRateNobidChange: coefficient on the slice EPC (earnings/click ~ eCPC); new bid = EPC x bidRate, capped at bidMax. REQUIRED for bidChange, range 0.1-2. bidRate=1 = set bid to the eCPC (valid, NOT a no-op).
isActiveNo
campaignIdYesCPC campaign ID
conditionsYesConditions ANDed together; each {metric, match, value}. Note: bidChange (bid) rules don't allow the ROI metric, and spend/clicks conditions can't use value 0.
dayLimitTypeNodayLimitIncrease only
dayLimitValueNodayLimitIncrease only

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial behavior beyond the lone readOnlyHint=false annotation: the 5-rules-per-campaign and 300-per-account caps, that exceeding either is refused, the delete-before-add workaround, and the staff-token exemption. This is exactly the operational context an agent needs before a write call.

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

Conciseness5/5

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

Four dense sentences, each carrying distinct information (scope, one-per-rule, bidChange requirements, quota rules). Front-loads the core purpose and uses no filler despite a 12-parameter 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?

For a complex mutation tool with no output schema and no destructive/rate annotations, the description covers scope, dependencies, and quotas well. It omits only return-value expectations and whether creation is reversible, which are minor gaps here.

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

Parameters4/5

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

Schema coverage is already high (83%), but the description adds cross-parameter dependencies the schema cannot express: bidChange requires slices + bidRate + bidMax together with a spend/clicks condition. It does not restate every field, but that dependency mapping is genuine added value.

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?

States a specific verb+resource ('Create an autorule on a CPC campaign') and immediately scopes it with the CPC-only constraint. It is clearly distinguishable from siblings like update_autorule, delete_autorule, list_autorules, and set_autorule_status.

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?

Gives concrete usage guidance: 'Campaigns usually carry several rules (a strategy); call once per rule' and 'delete a rule before adding one' when limits are exceeded. It does not explicitly route to update_autorule for modifying an existing rule, so it stops short of full when-vs-alternatives coverage.

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

kadam_adv_create_bulk_creativesA

Second step of a bulk creative batch: turn staged images into creatives. Every item is created in every listed campaign, so the batch size is items × campaigns. Each item needs a stagedId from kadam_adv_upload_bulk_images. Creation is asynchronous — this call queues the work and returns a job; read the per-row result from kadam_adv_get_bulk_job. Sending the same payload again returns the same job instead of creating the creatives twice.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesRows of the batch, one creative per campaign each
campaignIdsYesCampaigns to create the creatives in
pauseAfterModerationNoKeep the creatives paused after they pass moderation

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false, so the description carries the real behavioral burden and does it well: asynchronous queueing, a job handle rather than immediate creatives, and idempotency on identical payloads. It also discloses the multiplicative batch semantics (items × campaigns), which materially affects how the agent sizes requests.

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?

Five sentences, each carrying distinct information (pipeline position, cross-product sizing, prerequisite, async/job model, idempotency), with the most important framing front-loaded. No filler or restatement of the tool name.

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

Completeness5/5

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

With no output schema, the description still explains what the call returns (a job) and where per-row results are read, plus the async and replay semantics. Combined with 100% schema parameter coverage, an agent has everything needed to invoke and follow up correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema cannot express: every item is fanned out across every listed campaign, and each item requires a stagedId sourced from a specific sibling tool. The remaining params (name, path, text, title, pauseAfterModeration) are left to the schema, which is acceptable.

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?

States a specific verb and resource ('turn staged images into creatives') and positions itself as 'second step of a bulk creative batch', which separates it from the single-creative sibling kadam_adv_create_creative. An agent can identify the operation without opening the schema.

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

Usage Guidelines5/5

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

Explicitly names the prerequisite step (stagedId from kadam_adv_upload_bulk_images) and the follow-up path for results (kadam_adv_get_bulk_job), giving a full pipeline context rather than isolated usage. The same-payload-replay behavior further tells the agent when re-calling is safe.

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

kadam_adv_create_campaignA

Create a new advertiser campaign. Required: type, name, url, folderId (campaign group ID), pricingModel, bid, dailyBudget. Pass dryRun: true to only check the payload — nothing is created and the same field errors are reported, which is the cheap way to find out whether bids, targeting and limits are acceptable before committing.

ParametersJSON Schema
NameRequiredDescriptionDefault
osNoComma-separated OS names or IDs (e.g. 'Android,iOS' or '10,20')
bidYesBid amount in USD (e.g. 0.05). For cpa_target this is the target CPA cost
urlYesLanding page URL
nameYesCampaign name shown in dashboard
typeYesAd format
dryRunNoValidate the payload and create nothing
sspIdsNoComma-separated SSP IDs for the whitelist/blacklist
devicesNoComma-separated device names or IDs (e.g. 'Desktop,Smartphone' or '1,4')
endDateNoEnd date (YYYY-MM-DD)
sspModeNoSSP list mode: whitelist (allow listed) or blacklist (block listed)
browsersNoComma-separated browser names or IDs (e.g. 'Chrome,Firefox' or '8,16')
folderIdYesCampaign group ID (API field: folderId)
scheduleNoComma-separated hours (0-23) to show ads, applied to all days (e.g. '9,10,11,17')
timezoneNoTimezone offset in hours (e.g. 3 for UTC+3)
countriesYesComma-separated ISO country codes for bid targeting (e.g. 'US,DE,BR'). Required.
languagesNoComma-separated language names or IDs
startDateNoStart date (YYYY-MM-DD)
categoriesNoComma-separated targeting from kadam://reference/categories: 'mainstream', 'adult' (parent 1001), and/or adult subcategory IDs. Do not pass other numeric category IDs on create.
impTrackerNoThird-party impression tracking pixel URL
secondPushNoEnable second push notification (push/inpage_push only)
dailyBudgetYesDaily spending limit in USD
totalBudgetNoTotal campaign budget in USD
pricingModelYesPricing model: cpc, cpm, or cpa_target
siteBlacklistNoComma-separated site IDs for blacklist
siteWhitelistNoComma-separated site IDs for whitelist
connectionTypeNoNetwork connection type filter (all = no filter)
conversionHoldNoCustom postback status name for Hold (e.g. 'reg'). Sent only for a custom mapping, without a template id.
postViewWindowNoPost-view attribution window in hours (1-168)
trafficSourcesNoTraffic source pool: 'proven' = EasyStart pool of proven sources, 'all' = full pool filtered by Audience Engagement levels. Supported formats are configured server-side (popunder at release); for unsupported formats the API rejects the field with 422. Under 'proven' the API ignores audienceEngagementLevels.
campaignCapDaysNoWindow in days for campaignCapViews
postClickWindowNoPost-click attribution window in hours (1-168)
campaignCapViewsNoCampaign-level cap: max views of ANY creative from this campaign per user within campaignCapDays
conversionRejectNoCustom postback status name for Rejected. Sent only for a custom mapping, without a template id.
evenDistributionNoSpread budget evenly across the day
frequencyCapDaysNoWindow in days for frequencyCapViews
frequencyCapViewsNoCreative-level cap: max views of ONE creative per user within frequencyCapDays
audienceExcludeIdsNoComma-separated audience IDs to exclude
audienceIncludeIdsNoComma-separated audience IDs to include
conversionApprovedNoCustom postback status name for Approved (e.g. 'dep'). Sent only for a custom mapping, without a template id.
conversionTemplateIdNoConversion template id from conversion-templates. Omit or pass 0 for a custom mapping: approved/hold/reject are sent and id is not. A positive id selects that template; the status names are then taken from the template and are not sent.
pauseAfterModerationNoPause campaign after creatives pass moderation
countLastCampaignOnlyNoAttribute conversion only to the last campaign impression (default: true)
postClickAttrPriorityNoPost-click attribution takes priority over post-view (default: true)
audienceEngagementLevelsNoComma-separated Audience Engagement level slugs, e.g. 'very_high,high,medium'. Allowed slugs: very_high, high, medium, low, not_rated. Only meaningful with trafficSources=all; at least one level is required.
countFirstConversionOnlyNoCount only the first conversion per user (default: true)
postConversionAudienceIdsNoComma-separated audience IDs for post-conversion retargeting

TDQS

A3.7/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false, so the description carries most of the burden and does so well: dryRun creates nothing and reports the same field errors. It does not cover permissions, campaign status after creation (active vs paused), moderation effects, 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.

Conciseness4/5

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

Two dense sentences with the action first and the dryRun rationale second; both earn their place. The only cost is the incomplete required-field enumeration, which is a correctness issue rather than verbosity.

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 46-parameter creation tool with no output schema and near-zero annotation coverage, the description supplies the creation intent, the required set, and the validation escape hatch. Remaining gaps (resulting campaign state, interactions among trafficSources/conversionTemplateId) are largely covered by the rich schema.

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

Parameters2/5

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

Schema coverage is 100%, so the schema already documents all 46 parameters and the baseline would be 3. However, the description's 'Required:' list omits countries, which the schema marks required — an agent trusting the prose would submit an invalid payload.

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?

Specific verb+resource: 'Create a new advertiser campaign' immediately distinguishes it from update_campaign, copy_campaign, and create_campaign_folder siblings. It does not name an alternative, but the creation verb plus the required-field list makes the scope unambiguous.

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

Usage Guidelines4/5

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

Gives concrete when-to-use guidance for dryRun: validate the payload before committing, useful for checking bids/targeting/limits. It does not address when to choose this tool over siblings like copy_campaign or create_campaign_folder, so it falls short of the top band.

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

kadam_adv_create_campaign_folderA

Create a new campaign group (called 'campaign group' / 'Группа кампаний' in the Kadam UI; API term: folder).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCampaign group name (1-50 characters, e.g. 'SA', 'US campaigns')

TDQS

A3.5/5.0
Behavior2/5

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

Annotations already indicate write operation (readOnlyHint=false). Description adds terminology clarification but does not disclose behavioral traits such as uniqueness constraints, potential errors, or what happens on success (e.g., returns folder ID). The agent gains little 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?

The description is a single concise sentence (20 words) that directly states the purpose. No unnecessary words. 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.

Completeness3/5

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

Given a simple tool with one parameter and no output schema, the description covers the basic purpose. However, it lacks information about the expected response or side effects, which would help an agent use it correctly. The absence of output schema makes the description incomplete in terms of return value.

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 covers the single parameter (name) with a description including length and examples. The tool description adds the aliases but does not add new semantic meaning beyond 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?

Description clearly states the action ('Create') and resource ('campaign group' / 'folder'). It provides both UI and API terminology, and distinguishes from sibling tools like kadam_adv_create_campaign (different resource) and kadam_adv_update_campaign_folder (update vs create).

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 (when you need a new campaign group), but does not explicitly state when to use this tool vs alternatives or provide any exclusions. No prerequisites or context about 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.

kadam_adv_create_creativeA

Create a creative. Accepts image/video as a URL or local file path. Required fields by type:

  • Push / In-Page Push: title, text, url, imageUrl (icon), mainImageUrl

  • Native: title, url, imageUrl (icon), mainImageUrl

  • Banner: url, imageUrl, sizeId

  • Banner as an HTML5 archive: url, html5ArchiveUrl (.zip), sizeId — needs the HTML5 grant

  • Video: title, url, videoUrl (MP4) — uploading a video file is an internal grant; advertisers deliver video as a VAST tag

  • Video as a VAST tag: title, vastTagUrl (https) in a video campaign — needs the VAST grant, nothing is uploaded

  • Popunder: none (campaign URL is the ad) See kadam://reference/creative-formats for sizes and exact dimensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
bidNoCustom bid for this creative (overrides campaign bid)
urlYesLanding page URL for the creative
textNoCreative text/description (required for push/inpage, max 45 chars)
titleNoCreative title (required for push/inpage/native/video, max 30 chars for push, 75 for native)
sizeIdNoBanner size ID (required for banner). See kadam://reference/creative-formats for valid sizes.
imageUrlNoIcon/image source: URL or local file path (push: 192x192+, native: 500x500+, banner: exact size)
stopDateNoCreative stop date (YYYY-MM-DD HH:MM:SS)
videoUrlNoVideo source: URL or local file path to MP4 (video campaigns only)
startDateNoCreative start date (YYYY-MM-DD HH:MM:SS)
campaignIdYesCampaign ID to add creative to
vastTagUrlNohttps VAST tag URL (video campaigns only). The tag is fetched and parsed on save, so a tag that does not answer with a usable VAST document is refused right away.
bidCountriesNoComma-separated country IDs for the bid
mainImageUrlNoMain/rectangle image source: URL or local path (push/inpage: 492x328+, native: 492x328+). Not needed for banner/video.
html5ArchiveUrlNoHTML5 archive (.zip): URL or local file path (banner campaigns only)
pauseAfterModerationNoPause creative after it passes moderation (default: true for safety)

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the single readOnlyHint=false annotation: it discloses that HTML5 and video uploads require internal grants, that advertisers normally deliver video as a VAST tag with nothing uploaded, that the VAST tag is fetched and parsed on save and rejected if no usable document is returned, and that pauseAfterModeration defaults to true for safety.

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?

Front-loads the verb and resource in one line, then uses a tight scannable bullet list keyed by creative type, ending with a pointer to the reference resource for sizes. No filler sentences; every line carries actionable information.

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

Completeness4/5

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

For a 15-parameter, no-output-schema creation tool, the description covers format requirements, grants, and the moderation/pause default, which is what an agent needs to invoke it correctly. Minor gaps remain: no statement of what the created creative's initial status is beyond the pause flag, and no mention of how it relates to bulk creation.

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

Parameters4/5

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

Schema description coverage is already 100%, so the baseline is 3, but the description adds real value by consolidating requirements into a per-format matrix (e.g., Banner = url + imageUrl + sizeId; Video = title + url + videoUrl) that is not derivable from reading individual property descriptions in isolation.

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?

States a specific verb and resource ('Create a creative') and immediately enumerates the format-specific required fields, so the agent knows exactly what this operation produces. It does not, however, reference the adjacent 'create_bulk_creatives' sibling, so the single-vs-bulk distinction must be inferred.

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 per-type requirement list effectively tells the agent when each field combination applies (Push, Native, Banner, HTML5, Video, VAST, Popunder) and flags grant prerequisites for HTML5 archive and VAST/video upload. It gives no explicit exclusions or named alternatives (e.g., when to prefer bulk creation or update_creative).

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

kadam_adv_delete_audienceA
Destructive

Permanently delete an audience. Requires confirm=true for safety.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
confirmYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already set destructiveHint=true, and the description adds the detail that deletion is permanent and requires confirm=true. This adds non-obvious behavioral context beyond 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 conveying critical information with no wasted words. It is appropriately short and front-loaded.

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

Completeness4/5

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

For a simple delete tool with two parameters and no output schema, the description covers the key safety requirement and permanence. It does not describe return values, but that is acceptable given the action'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?

Schema description coverage is 0%, so the description must compensate. It explains the purpose of confirm (safety) but does not describe the id parameter. This provides partial but not complete parameter guidance.

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 'Permanently delete an audience', which is a specific verb (delete) and resource (audience). It distinguishes from sibling tools like create_audience or update_audience.

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

Usage Guidelines4/5

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

The description provides the explicit guideline 'Requires confirm=true for safety', indicating the required parameter setting. It does not elaborate on when not to use, but for a delete operation, this is adequate.

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

kadam_adv_delete_autoruleA
Destructive

Permanently delete an autorule. Requires confirm=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
confirmYes

TDQS

A4.2/5.0
Behavior5/5

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

Adds 'permanently' and 'requires confirm=true' beyond the destructiveHint annotation. Agent understands irreversibility and confirmation necessity, which are critical behavioral traits.

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 succinct sentences front-load purpose. Every word adds value; no filler.

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

Completeness4/5

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

Covers purpose and key requirement. Missing id explanation is minor given sibling tools; no output schema is typical for deletion. Adequate for a simple tool.

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

Parameters3/5

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

With 0% schema coverage, description must explain parameters. It explains confirm (must be true) but not id. Agent knows confirm's purpose but id remains ambiguous.

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 'Permanently delete an autorule', specifying the verb (delete), resource (autorule), and permanence. This distinguishes it from sibling tools like update or set status.

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 this tool versus alternatives (e.g., deactivating via set_autorule_status). The requirement 'confirm=true' is a prerequisite, not a usage comparison.

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

kadam_adv_delete_campaignsA
Destructive

Permanently delete campaigns together with their creatives. Requires confirm=true. A campaign must be archived first (use set_campaign_status with status=archived), otherwise the whole call is rejected. Retrying a call that already deleted the campaigns is rejected too, since deleted campaigns are no longer addressable.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesComma-separated campaign IDs
confirmYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare destructiveHint=true and a title; the description goes well beyond by specifying cascade deletion of creatives, the archived-state precondition, call-level rejection semantics, and non-idempotent retry behavior. That is exactly the behavioral context an agent needs before a permanent mutation.

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

Conciseness5/5

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

Four short sentences, each carrying a distinct fact (action, cascade, confirmation gate, precondition, retry behavior), with the destructive verb front-loaded. No filler.

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

Completeness5/5

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

For a permanent-mutation tool with no output schema, the description covers the irreversible consequences, the gating precondition with the sibling tool to call first, and failure modes. Nothing material is left for the agent to infer.

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

Parameters4/5

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

Schema coverage is only 50% (ids documented, confirm has a const with no prose). The description compensates by explaining that confirm must be true as a deliberate safety gate, though it never restates that ids is a comma-separated list, so the format meaning still lives only 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?

States a specific verb (permanently delete) and resource (campaigns), and discloses the cascade to their creatives. This cleanly separates it from sibling tools like set_campaign_status, delete_creatives, and move_campaigns.

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

Usage Guidelines5/5

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

Explicitly names the prerequisite path ('a campaign must be archived first (use set_campaign_status with status=archived)'), names the required confirm flag, and warns against retrying. It gives both when-to-use and when-the-call-will-fail.

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

kadam_adv_delete_creativesA
Destructive

Permanently delete creatives. Requires confirm=true. A creative must be archived first (use set_creative_status with status=archived), otherwise the whole call is rejected. Retrying a call that already deleted the creatives is rejected too, since deleted creatives are no longer addressable.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesComma-separated creative IDs
confirmYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare destructiveHint=true; the description goes well beyond that by stating the operation is permanent, that confirm=true is mandatory, that the entire call is rejected (atomic, not partial) if archiving wasn't done, and that deleted creatives become unaddressable. These are exactly the failure modes an agent needs before committing to a destructive call.

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

Conciseness5/5

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

Four short sentences, front-loaded with the action and hard requirement, then prerequisites, then the retry edge case. No filler; each sentence carries a distinct operational fact.

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

Completeness5/5

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

For a two-parameter destructive tool with no output schema, the description covers the mutation semantics, the mandatory flag, the ordering prerequisite, and the rejection conditions. Nothing an agent needs before invoking it is missing.

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

Parameters4/5

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

Schema coverage is 50%: 'ids' is documented in-schema as comma-separated IDs, but 'confirm' has only a const constraint and no schema description. The description compensates by explaining that confirm=true is required and that omitting it fails the call. It adds real meaning for the undocumented parameter, though it says nothing about format limits or ID count for 'ids'.

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?

States a specific verb and resource ('Permanently delete creatives') and immediately pins down scope via the confirm and archive prerequisites. An agent can distinguish it from siblings like set_creative_status, update_creative, or delete_campaigns without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-not conditions and the alternative workflow: the creative must be archived first, and it names the sibling (set_creative_status with status=archived) that accomplishes that. It also states that retries against already-deleted creatives are rejected, closing a failure path an agent would otherwise hit.

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

kadam_adv_get_accountA
Read-only

Gets the current advertiser account profile: id, balance, currency, registration date, and timezone offset in hours from UTC (-12 to 12). Does not return email or name.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds genuine behavioral value beyond that by disclosing the exact returned field set and, notably, a negative boundary ('Does not return email or name'), which prevents the agent from assuming the profile is complete.

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 tight sentences: the positive return set is front-loaded, followed by the exclusion. Every clause carries information and nothing is padded.

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

Completeness5/5

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

There is no output schema, so the description must carry the return-value burden, and it does so by listing the fields returned and the fields deliberately omitted. For a parameterless read tool this is complete.

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 tool takes no parameters, so there is nothing to document and the baseline of 4 applies. The description correctly spends no words on parameter semantics.

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?

States a specific verb and resource ('Gets the current advertiser account profile') and enumerates the returned fields, so the agent knows exactly what it retrieves. It does not explicitly distinguish itself from the sibling kadam_adv_get_balance, which overlaps on the 'balance' field it lists, so sibling differentiation is left to inference.

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?

Usage is implied by the name and the field list — fetch the account profile — but there is no explicit when-to-use statement or pointer to alternatives such as kadam_adv_get_balance. For a zero-parameter read tool the implied usage is largely sufficient, hence a minimum-viable 3.

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

kadam_adv_get_audienceA
Read-only

Get a single audience by ID. Returns type-specific details: tracking code for pixel/s2s, campaign links for stat, linked audiences for s2s.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already set readOnlyHint=true. The description adds valuable detail about return values depending on type (pixel/s2s/stat), going beyond a simple 'read'.

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 action, no wasted words.

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

Completeness4/5

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

For a simple 1-param get tool without output schema, the description covers purpose and return differentiation. Could add more on error conditions or exact return structure.

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

Parameters2/5

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

With 0% schema coverage, the description should compensate but only implies 'id' is the audience identifier by context. No explicit parameter description is provided.

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 it retrieves a single audience by ID. It distinguishes from siblings like list_audiences (returns multiple) and the many create/update/delete 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 usage for fetching a specific audience's details. Sibling tool names provide context, but no explicit when-to-use or alternatives are given.

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

kadam_adv_get_audience_paramsA
Read-only

Hardcoded parameter values a pixel or S2S audience substitutes into its tracking code. Only these two audience kinds have them, and only their owner can read them — an audience shared with the account answers as not found. Slots that were never set come back as null, which means the code keeps the {placeholder} as is.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPixel or S2S audience ID

TDQS

A4.3/5.0
Behavior5/5

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

Beyond readOnlyHint=true, the description discloses permission scoping (only the owner can read), the failure mode for shared audiences (not found), and null semantics for unset slots including the downstream effect on the {placeholder}. This is exactly the kind of auth/data-shape context annotations cannot carry.

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

Conciseness5/5

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

Three tight sentences, front-loaded with what the resource is, then eligibility, then return semantics. No filler and nothing repeated from the schema or annotations.

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 one-parameter read tool with no output schema, the description covers identity, eligibility, access failure, and null-slot behavior, which is nearly everything an agent needs. It stops short of describing the shape of the returned parameter slots, but that is a minor gap given the tool's simplicity.

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

Parameters4/5

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

Schema coverage is 100% for the single id parameter, so the baseline is 3, but the description adds real constraint meaning by tying the accepted ID domain to pixel-or-S2S audiences and explaining that IDs outside that domain surface as not found rather than as an error.

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 names the exact resource returned — hardcoded parameter values that a pixel or S2S audience substitutes into its tracking code — which is specific enough that an agent can distinguish it from the generic kadam_adv_get_audience sibling. It is phrased as a noun description rather than a verb-led statement of retrieval, but the scope and data type are unambiguous.

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

Usage Guidelines4/5

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

It states a clear precondition (only pixel and S2S audiences have these values) and an exclusion (an audience shared with the account answers as not found), which tells the agent when this call is pointless. It does not name kadam_adv_get_audience or kadam_adv_set_audience_params as alternatives, so routing is implied rather than explicit.

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

kadam_adv_get_balanceA
Read-only

Lightweight current advertiser balance and currency. Use for alerts and balance checks; prefer this over kadam_adv_get_account or finance operations when you only need the balance.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

readOnlyHint=true already establishes the safe-read profile, but the description adds value beyond annotations by disclosing the returned content (balance and currency) and the 'lightweight' nature of the call. It stops short of stating freshness, currency/account scoping, or error behavior, so it falls just below a full 5.

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 tight sentences, zero filler. The resource and return contents come first, the routing guidance second — appropriately front-loaded.

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

Completeness5/5

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

With no parameters, no output schema, and only readOnlyHint in annotations, the description carries the remaining burden and does so: it states what is returned (balance and currency) and when to call it. Nothing an agent needs to invoke this correctly is missing.

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 tool takes zero parameters, so there is nothing for the description to clarify beyond the schema; baseline 4 applies. The description correctly implies the call is self-scoped to the current advertiser, which is useful since no scoping parameter exists.

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 names a concrete resource (current advertiser balance and currency) with an implied retrieval verb, and explicitly distinguishes itself from kadam_adv_get_account and finance operations. An agent can separate it from the 50+ siblings without opening the schema.

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

Usage Guidelines5/5

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

It gives an explicit use case (alerts and balance checks) and names the alternatives it should displace (kadam_adv_get_account, finance operations) with the selecting condition ('when you only need the balance'). Routing is fully determined.

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

kadam_adv_get_bulk_jobA
Read-only

State of a bulk creative batch, for both steps: staged images and what staging refused for an upload job, the per-row outcome for a creation job. Status done only means the worker finished — individual rows can still have failed, so read the counters before reporting success.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYesJob ID returned by the upload or create call

TDQS

A4.1/5.0
Behavior5/5

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

Adds genuinely non-obvious behavioral context beyond the readOnlyHint annotation: 'done' means the worker finished, not that rows succeeded, and callers must inspect counters. This is exactly the kind of outcome-semantics disclosure the annotation cannot provide, and it is critical given there is no output schema.

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?

Two dense sentences with no filler; the critical caveat about 'done' is front-loaded in the second sentence. The opening clause is slightly compressed to the point of being terse, but nothing wastes space.

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

Completeness4/5

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

With no output schema, the description carries the burden of explaining what comes back (counters, staging refusals, per-row outcomes) and does so well. Remaining gaps are minor: no indication of polling behavior or how long results persist.

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% and the sole jobId parameter is already documented as 'Job ID returned by the upload or create call.' The description reinforces that origin story implicitly but adds no format, validation, or lifecycle detail beyond the schema, so baseline 3 applies.

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?

States a specific verb and resource ('State of a bulk creative batch') and goes further by distinguishing the two job flavors it covers — staged/refused images for an upload job vs. per-row outcomes for a creation job. It is clearly separable from siblings, though it never names the producer tools (upload_bulk_images / create_bulk_creatives) that generate the jobId.

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 makes the use context clear: this is the status-check step for a bulk upload or creation batch, and it warns to read counters before declaring success. It lacks explicit when-not-to-use guidance or polling/cadence advice, so it stops short of a 5.

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

kadam_adv_get_campaignA
Read-only

Get full campaign configuration by ID, including landing page URL, bids per country, budgets, targeting (devices, OS, browsers, languages, sites, SSPs, audiences), frequency caps, schedule, and conversion settings. Use after kadam_adv_list_campaigns to inspect one campaign in detail.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCampaign ID

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the read-only nature is known. The description adds details about the returned data but does not disclose any hidden behavioral traits beyond what the annotation already conveys.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the main purpose, and lists many included items without unnecessary fluff.

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

Completeness5/5

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

For a simple read-only tool with one parameter and no output schema, the description adequately covers what is returned and the usage context, making it complete.

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

Parameters3/5

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

The schema covers the only parameter 'id' with description 'Campaign ID' (100% coverage). The description adds no additional meaning beyond stating it's retrieved by ID, so baseline of 3 is appropriate.

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

Purpose5/5

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

The description explicitly states that the tool gets the full campaign configuration by ID, listing specific details. It differentiates from siblings by noting it should be used after kadam_adv_list_campaigns for detailed inspection.

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

Usage Guidelines5/5

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

It gives explicit guidance to 'Use after kadam_adv_list_campaigns to inspect one campaign in detail,' clearly indicating the workflow context and when this tool is appropriate.

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

kadam_adv_get_campaign_autorule_slicesA
Read-only

Slices the campaign's bid autorules act on, one entry per rule. Use it to tell apart a bid you set by hand from one an autorule keeps rewriting.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYes

TDQS

A3.7/5.0
Behavior3/5

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

readOnlyHint=true already covers the safety profile, so the bar is lower. The description adds cardinality context ('one entry per rule'), which hints at result shape, but says nothing about scoping, pagination, permissions, or failure behavior beyond what annotations provide.

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 tight sentences: the first delivers the what, the second the why. No filler, no repetition of the title, and the capability statement is 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?

With no output schema, the description should sketch the return shape; 'one entry per rule' is the only hint, and what a slice entry actually contains (bid value, rule identity, hand-set vs. rule-managed flag) is left unstated. For a simple read-only, one-parameter tool this is adequate but not fully complete.

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

Parameters3/5

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

There is a single required parameter (campaignId) with 0% schema description coverage, so the description must carry the load. It implicitly establishes campaign scoping ('the campaign's bid'), which makes the parameter's meaning inferable, but never mentions the argument by name, type, or accepted form.

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 states a specific resource ('the campaign's bid [that] autorules act on') and the output granularity ('one entry per rule'), which goes beyond the tautological title 'Campaign autorule slices'. The phrasing is slightly awkward and it does not explicitly distinguish itself from lookalike siblings such as get_campaign_bid_restrictions or list_extended_bids, so it stops short of a 5.

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?

'Use it to tell apart a bid you set by hand from one an autorule keeps rewriting' gives a concrete decision context for reaching for this tool. It does not name an alternative tool or state when not to use it (e.g., when you just want rule definitions from list_autorules), so no exclusion guidance is present.

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

kadam_adv_get_campaign_bid_restrictionsA
Read-only

Bid limits of a campaign: the cap a fixed bid must stay under, the largest allowed multiplier, and the campaign bid the multiplier applies to (null when the geo bids differ). Read it before writing bids to know what will pass.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYes

TDQS

A4/5.0
Behavior4/5

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

readOnlyHint=true already tells the agent this is a safe read, so the bar is lower; the description still adds real behavioral context by disclosing the null semantics ('null when the geo bids differ'), which prevents misinterpreting a missing value as an error. It does not cover auth, rate limits, or numeric formats, keeping it short of a 5.

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 dense sentence front-loads the resource, then the returned fields, then the usage rule. No filler; every clause carries information the agent needs.

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?

There is no output schema, so the description correctly compensates by describing the three returned values and the null case. The only gap is that the required campaignId argument is undocumented, which is minor for a single obvious identifier on a read-only tool.

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

Parameters3/5

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

Schema description coverage is 0% and the description never mentions campaignId or its expected form. The parameter name is self-evident and there is only one, which limits the practical damage, but the description does not compensate for the coverage gap. Minimum-viable 3.

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 states a specific resource and enumerates what is inside it: the fixed-bid cap, the largest allowed multiplier, and the campaign bid the multiplier applies to. That is far more concrete than a tautology. It stops short of naming the sibling write tools it is meant to precede, so sibling differentiation is only implied via 'before writing bids.'

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?

'Read it before writing bids to know what will pass' gives a clear triggering context and implicitly routes the agent toward the bid-writing siblings (update_campaign_bid, bulk_update_bids, update_extended_bids). There is no explicit when-not-to-use or named alternative, but the sequencing guidance is actionable.

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

kadam_adv_get_campaign_folderA
Read-only

Get a single campaign group by ID: name, archived state, budgets and distribution (campaign group = the UI term for a folder).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCampaign group ID

TDQS

A3.8/5.0
Behavior4/5

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

readOnlyHint=true already tells the agent this is a safe non-mutating call. Beyond that, the description discloses the returned payload shape (name, archived state, budgets, distribution), which genuinely matters because there is no output schema. It does not cover error behavior (e.g. what an unknown ID returns), so it is good but not complete.

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?

One tightly written sentence: the action and keying field come first, the returned fields follow as the payoff, and the parenthetical naming gloss is placed at the end where it does not interrupt the main clause. No wasted words.

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

Completeness4/5

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

For a single-resource read with one required parameter, no output schema and a readOnly annotation, the description supplies the missing piece: what fields come back. That makes it sufficient for correct invocation. A note on missing/not-found behavior would be the only remaining gap.

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% and the sole parameter is documented as 'Campaign group ID'. The description's only added value is reinforcing that the ID is a campaign-group/folder ID, which is a minor clarification over the schema. Baseline 3 is appropriate when the schema carries the semantics.

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?

Specific verb (get) plus resource (a single campaign group), the keyed lookup field (by ID), and an enumerated field list. It also resolves the naming ambiguity between the API term 'campaign group' and the UI term 'folder', which is the main source of confusion here. It stops short of explicitly distinguishing itself from the sibling list_campaign_folders.

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 word 'single' combined with 'by ID' implies this is the point-fetch counterpart to kadam_adv_list_campaign_folders, so the usage context is inferable. But there is no explicit when-to-use statement, no exclusion, and no mention of sibling tools by name.

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

kadam_adv_get_creative_test_conversionA
Read-only

Links for checking that a creative's conversion tracking works. The go link makes a real test click when opened — it writes a click id, resolves the macros and redirects to the landing exactly as a served ad does, so the advertiser's postback can be verified end to end. This tool only hands the links over; nothing is registered until someone opens one. HTML-tag creatives have no single landing link and come back without a go link; the formats rendered in a frame also carry a preview link.

ParametersJSON Schema
NameRequiredDescriptionDefault
creativeIdYesCreative ID

TDQS

A4.2/5.0
Behavior5/5

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

Far exceeds the readOnlyHint annotation by explaining exactly what the returned go link does when opened (writes a click id, resolves macros, redirects like a served ad), clarifying nothing is registered until someone opens it, and noting format-specific behavior: HTML-tag creatives have no go link and framed formats add a preview link.

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?

Purpose is front-loaded in the first sentence and each subsequent sentence carries distinct behavioral value (side-effect timing, format caveats). Slightly verbose, but nothing is wasted.

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

Completeness5/5

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

With no output schema, the description compensates by describing what comes back: a go link for standard creatives, no go link for HTML-tag creatives, and an extra preview link for framed formats. An agent has everything needed to call it and interpret the result.

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?

There is a single parameter with 100% schema coverage, so the schema already documents creativeId. The description adds no param-level syntax or constraint details, so the 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?

The description states a specific verb and resource: it hands over links for verifying a creative's conversion tracking. No sibling tool does this, and the agent can tell immediately this returns diagnostic test links rather than creative metadata (list_creatives) or creative mutations.

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 purpose implies when to use it (to verify a creative's postback end to end) but there is no explicit when/when-not framing or named alternative. With no sibling offering a comparable test-link capability, the guidance is adequate but left to inference.

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

kadam_adv_get_day_money_limitA
Read-only

Gets the daily spending limit of the WHOLE ACCOUNT, not of a single campaign (for a campaign budget use kadam_adv_get_campaign). A limit of 0 means no cap. When the reported minimum is null the account currency does not support changing the limit.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/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 genuinely useful semantics beyond that: '0 means no cap' and 'null minimum means the currency does not support changing the limit', which explain the returned values' meaning rather than restating the read-only nature.

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

Conciseness5/5

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

Three short sentences with zero filler. The scope constraint and sibling redirect are front-loaded ahead of the edge-case return semantics.

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

Completeness4/5

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

With no output schema, the description usefully documents the two key return values (limit=0 meaning no cap, null minimum meaning currency unsupported). It leaves minor gaps (no mention of other returned fields or error behavior), but covers what an agent needs to interpret the result.

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 tool takes zero parameters, so the baseline is 4. The description correctly implies a no-argument call and adds no spurious parameter guidance, keeping semantics clean.

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?

States a specific verb ('Gets') and resource ('daily spending limit') with an explicit scope qualifier ('WHOLE ACCOUNT, not of a single campaign'). It names the sibling kadam_adv_get_campaign and the condition that separates them, so an agent can route correctly without opening schemas.

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

Usage Guidelines4/5

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

Explicitly redirects campaign-budget calls to kadam_adv_get_campaign, giving clear usage context. It stops short of a full when/when-not framing (e.g., preconditions for calling), but the alternative-selection guidance is present.

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

kadam_adv_get_dictionaryA
Read-only

Gets one reference dictionary used to build campaign targeting: campaign-types, browsers, platforms (OS), devices, connection-types, categories, isps, conversion-templates, countries, regions or cities. Call this instead of guessing IDs — every targeting field expects the numeric ids returned here. campaign-types only lists the types this account may actually create. categories requires campaignType because the allowed set differs per type. isps, regions and cities require countryId, and are paginated and searchable because a single country can hold tens of thousands of entries. countries is the entry point of the geo chain: its ids are what a campaign stores in countries and what countryId expects here, while regions and cities give the ids a campaign stores in cities. cities can be narrowed to one region with regionId. platforms, devices and categories are trees: children are nested under their parent. conversion-templates entries carry the approved/hold/reject postback status strings, which are what a campaign's conversion field needs.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page; applies to isps, regions and cities
typeYesWhich dictionary to return
searchNoSubstring filter on the entry name; applies to isps, countries, regions, cities
perPageNoPage size, max 200; applies to isps, regions and cities
regionIdNoNarrows type=cities to one region; ignored otherwise
countryIdNoRequired for type=isps, regions and cities. Country id from type=countries
campaignTypeNoRequired for type=categories; ignored otherwise

TDQS

A4.8/5.0
Behavior5/5

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

Beyond readOnlyHint=true, the description discloses behavioral traits an agent needs: isps/regions/cities are paginated and searchable because one country can hold tens of thousands of entries, platforms/devices/categories return nested trees, campaign-types is scoped to what the account may actually create, and conversion-templates expose status strings. These are real invocation-relevant behaviors not derivable from annotations.

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

Conciseness4/5

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

Front-loaded with the core action and its full domain, then conditions per type. The single dense paragraph is long but nearly every sentence carries distinct information; only mild redundancy with the schema enum list keeps it from a 5.

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

Completeness5/5

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

For a lookup tool with no output schema, the description is complete: it names every valid type, the prerequisites for each, pagination/search scope, and how returned ids are consumed downstream. An agent can invoke it correctly without opening the 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?

Schema coverage is already 100%, so baseline is 3, but the description adds genuine meaning on top: the geo id chain (countries ids feed countryId and the campaign's countries field; regions/cities give the campaign's cities ids) and the conditional coupling of campaignType/countryId to specific type values. It stops short of documenting perPage/search edge behavior beyond what the schema states.

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?

States a specific verb (Gets) and resource (one reference dictionary used to build campaign targeting) and enumerates all eleven dictionary types by name. An agent can immediately tell this apart from data-fetching siblings like get_campaign or list_campaigns because it is a metadata/lookup tool.

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

Usage Guidelines5/5

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

Explicitly says 'Call this instead of guessing IDs — every targeting field expects the numeric ids returned here,' which is a direct when-to-use instruction. It further routes by type: categories requires campaignType, isps/regions/cities require countryId, cities can be narrowed by regionId, and countries is named as the entry point of the geo chain.

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

kadam_adv_get_extended_statsA
Read-only

Bid Optimization: per-slice stats grid for drilling down and setting bids (requires Bid Optimization access on the account). Drill by appending a sliceId to pathIds; reuse each row's pathIds to set bids via kadam_adv_update_extended_bids. Use ONE campaign to see per-row bids.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
dateToNo
periodNo7days
metricsNoComma-separated metric column keys (display-cased, the SAME keys as sortField and the output's 'Available metric columns' line): views,clicks,CTR,conversions,holds,rejections,spending,earning,profit,ROI,CR,CPM,EPL,EPC,CPC,CPA,CPL (default views,clicks,CPC,CR).
pathIdsNoDrill path: comma-separated alternating sliceId,valueId,... ending with a sliceId to break down by it. Slice IDs: 130 country, 140 platform, 150 browser, 180 source, 190 site, 200 platform version, 300 subscription age, 320 browser language, 380 CR-target. e.g. '130' = by country; '130,34,180' = sources within country 34
perPageNo
dateFromNo
sortFieldNoSort column key (same display-cased keys as metrics): views, clicks, CTR, conversions, holds, rejections, spending, earning, profit, ROI, CR, CPC, CPM, CPA, EPC, EPL, CPL. Default: views desc (high-traffic first).
sortOrderNo
campaignIdsYesComma-separated campaign IDs (use one for per-row bids)
searchQueryNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, and the description confirms it's a stats grid, consistent with read-only. It adds behavioral details beyond annotations: the need for Bid Optimization access and the pattern of re-using pathIds for bid updates. No contradictions.

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

Conciseness5/5

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

Three sentences with no wasted words. The first sentence states purpose and requirement, the second explains the drill/reuse pattern, and the third gives a cardinality tip. Information is front-loaded.

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

Completeness4/5

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

Given 11 parameters, low schema coverage, and no output schema, the description covers the core functionality and essential parameters well. It lacks detail on date range, search, and pagination but provides enough context for an agent to select and invoke the tool correctly.

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

Parameters4/5

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

Schema description coverage is low (36%), but the description adds significant meaning to key parameters: it explains how pathIds work (drill path, slice IDs), enumerates valid metric and sortField keys, and clarifies that campaignIds should be a single campaign for per-row bids. This compensates for the coverage gap.

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 'Bid Optimization: per-slice stats grid for drilling down and setting bids,' which is a specific verb+resource combination. It distinguishes from sibling tools like kadam_adv_get_stats (general stats) and kadam_adv_list_extended_bids (list bids) by focusing on drill-down and bid-setting context.

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

Usage Guidelines5/5

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

Explicitly states requirement ('requires Bid Optimization access'), provides when-to-use guidance ('Drill by appending a sliceId to pathIds'), and instructs how to re-use results ('reuse each row's pathIds to set bids via kadam_adv_update_extended_bids'). It also advises cardinality ('Use ONE campaign to see per-row bids').

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

kadam_adv_get_statsB
Read-only

Advertiser statistics. reportType: 'custom' (default, report builder), 'sites' (per-site), or 'conversions' (event log). For custom reports use names like 'spend,clicks,ctr' (metrics) and 'day,campaign,country' (groupBy).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
viewNoall
dateToNo
periodNo7days
sortByNo
groupByNoComma-separated groupings, e.g. 'day,campaign,country' (incl. campaign_group). Unknown names are reported back.
metricsNoComma-separated metric names, e.g. 'spend,clicks,ctr,cpa,conversions,income,roi' (income = profit). Unknown names are reported back; see report-dimensions for the full list.spend,clicks,impressions,ctr
perPageNo
dateFromNo
timezoneNoTimezone offset in hours (for reportType=conversions)
countriesNo
folderIdsNoComma-separated campaign group (folder) IDs (for reportType=conversions)
sortOrderNo
reportTypeNocustom
audienceIdsNoComma-separated audience IDs (for reportType=conversions)
campaignIdsNo
creativeIdsNo
searchQueryNo
conversionTypesNoComma-separated conversion type IDs (for reportType=conversions)

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, and the description aligns with a read operation. The description adds value by explaining report types and parameter details, but lacks disclosure on pagination, error handling, 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.

Conciseness4/5

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

The description is concise with two short sentences and a fragment, front-loading the purpose. It efficiently introduces key options without extra verbiage.

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 19 parameters and no output schema, the description is insufficient. It omits return value format, pagination behavior, and how to interpret responses, leaving significant gaps for an AI 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?

The description adds meaning by explaining reportType options and providing examples for metrics and groupBy, partially compensating for the low schema description coverage (32%). However, many parameters remain undocumented.

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 'Advertiser statistics' and explains the three report types with examples for metrics and groupBy. It distinguishes itself from sibling CRUD and list tools by focusing on statistical 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 siblings like list_campaigns or other read tools. It does not mention alternatives or conditions for use.

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

kadam_adv_get_traffic_forecastA
Read-only

Forecast how much traffic a bid can buy for a targeting set, based on yesterday's auction. Use it before creating a campaign or raising a bid. Targeting with too little traffic yesterday comes back with an empty curve — that means the forecast could not be built, not that the traffic is zero.

ParametersJSON Schema
NameRequiredDescriptionDefault
osNoComma-separated OS names or IDs
typeNoAd format. Omit to forecast across all formats
devicesNoComma-separated device names or IDs
browsersNoComma-separated browser names or IDs
countriesNoComma-separated ISO country codes (e.g. 'US,DE'). Omit for worldwide
campaignIdNoForecast for one of your campaigns: SSPs its creatives are blocked on are excluded and its category scaler applied, so the numbers match what this campaign can buy
pricingModelYesPricing model to forecast. cpa_target is forecast as cpc, its auction

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 meaningful behavioral context beyond that: the forecast is derived from yesterday's auction, and an empty curve signals 'could not be built' rather than zero traffic — a non-obvious output semantics detail.

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

Conciseness5/5

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

Three tight sentences, front-loaded with purpose, then usage timing, then the interpretation caveat. No filler and every sentence carries distinct information.

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

Completeness4/5

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

With no output schema, the description carries the burden of return semantics and does so for the key edge case (empty curve). It could say more about the shape of a successful forecast response, but is adequate for an agent to call and interpret the tool.

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

Parameters3/5

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

Schema description coverage is 100% for all 7 parameters, including enum semantics (cpa_target forecast as cpc) and the campaignId exclusion behavior, so the schema does the heavy lifting. The description adds no parameter-level detail, which matches the baseline 3 when the schema is complete.

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?

States a specific verb (forecast) and resource (traffic a bid can buy for a targeting set) with the data basis (yesterday's auction). No sibling tool forecasts traffic, and the description makes the tool's distinct role obvious.

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

Usage Guidelines4/5

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

Explicitly says when to use it: 'before creating a campaign or raising a bid,' which frames it as a pre-flight check. It does not name alternative tools or when-not to use it, but no sibling overlaps enough to require that.

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

kadam_adv_list_audiencesA
Read-only

List advertiser audiences with pagination. Filter by search query, sort by field and order.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
perPageNo
sortFieldNoSort column: audienceId, audienceName, dateCreated, expireDays, reachToday, newToday, reach7d, new7d, reach30d, new30d
sortOrderNo
searchQueryNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already mark the tool as read-only. The description adds behavioral details: it supports pagination, filtering by search query, and sorting by field and order, providing useful 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?

The description is a single concise sentence that front-loads the main action and key features, with no unnecessary words.

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

Completeness4/5

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

For a list tool with 5 parameters and no output schema, the description covers the essential aspects (pagination, filter, sort). It could mention defaults or constraints, but it's largely complete for agent 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 coverage is low (20%), so the description should compensate. It mentions 'Filter by search query, sort by field and order' but doesn't explain each parameter in depth, such as the minLength constraint on searchQuery or default values for page and perPage.

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 'advertiser audiences', distinguishing it from sibling tools like create, delete, or update. It also mentions pagination, filtering, and sorting, which are specific to this tool.

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

Usage Guidelines4/5

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

The description implies when to use this tool: for viewing audiences with optional filtering and sorting. It doesn't explicitly state when not to use it, but the sibling tools cover modifications, making the intended use clear.

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

kadam_adv_list_autorulesA
Read-only

List autorules (campaign automation). Omit campaignId for all rules of active campaigns, or pass it for one campaign. Returns full rule definitions.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the read-only nature is known. The description adds that it returns 'full rule definitions' and specifies behavior for campaignId, adding value beyond annotations without contradiction.

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

Conciseness5/5

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

Two sentences with no filler. The information is front-loaded and every word is necessary. Highly concise and structured effectively.

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 (one optional param, read-only), the description is mostly complete. It states the return type ('full rule definitions'). Could mention pagination or limits, but not essential for a minimal viable description.

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

Parameters5/5

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

Schema has 0% description coverage for the only parameter (campaignId). The description fully compensates by explaining that omitting it returns all rules for active campaigns and passing it filters for one campaign, giving crucial semantic 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 verb 'List' and the resource 'autorules (campaign automation)'. It distinguishes from sibling create/delete/update tools by specifying the listing behavior and the optional campaignId filter.

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

Usage Guidelines4/5

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

Provides clear guidance on parameter usage: omit campaignId for all rules of active campaigns, pass it for one campaign. Does not explicitly mention when not to use it or alternatives, but the context is sufficient for this read-only list tool.

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

kadam_adv_list_campaign_foldersA
Read-only

List advertiser campaign groups with pagination. Optional search by name. A campaign group (called 'campaign group' / 'Группа кампаний' in the Kadam UI) is the same entity the API/tool calls a folder.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
perPageNo
searchQueryNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true. The description adds behavioral context by mentioning pagination (page/perPage) and optional search by name, which are not in annotations. No contradictions.

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

Conciseness5/5

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

Two sentences: first summarizes core action and features, second clarifies terminology. No redundant information. Front-loaded and efficient.

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 3 parameters and no output schema, the description covers the main functionality. It lacks mention of response structure but is largely complete given the 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 0%, so description must compensate. It explains that 'page' and 'perPage' enable pagination and 'searchQuery' allows search by name. However, it does not specify defaults or types, leaving some ambiguity.

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

Purpose5/5

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

The description clearly states the tool lists campaign groups (folders) with pagination and optional search. It clarifies terminology by noting the entity is called 'campaign group' or folder, distinguishing it from sibling tools like list_campaigns.

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

Usage Guidelines2/5

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

The description does not provide any guidance on when to use this tool versus alternatives (e.g., when to use list_campaign_folders vs list_campaigns). No exclusion criteria or context for selection.

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

kadam_adv_list_campaignsA
Read-only

List advertiser campaigns with pagination. Filter by campaign group (folderId), status, type, date range, or search query.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
typeNo
dateToNoStats range end (YYYY-MM-DD); pass with dateFrom
statusNo
perPageNo
dateFromNoStats range start (YYYY-MM-DD); pass with dateTo
folderIdNo
sortFieldNoSort column: campaign, dateCreation, views, clicks, moneyOut, CPC, CPM, CPA, CTR, CR, ROI, conversions, holds, rejects, profit
sortOrderNo
searchQueryNoCampaign name/domain or campaign ID

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, consistent with listing. The description adds pagination and filtering behavior, but does not complicate or contradict. No destructive behavior disclosed, which matches 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?

Single sentence, front-loaded with primary action and filter options. No redundancy or unnecessary text.

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?

No output schema is provided. The description does not explain the return format (e.g., what fields are in each campaign object, pagination metadata). While it's a list tool, an agent might need to know the response structure. Completeness is adequate but not fully 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 description coverage is 40% (4/10 parameters described in schema). The description names filter categories but does not detail parameter formats or constraints beyond what schema provides. For example, enum values for status/type are not mentioned. It adds marginal context but does not fully compensate for low 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?

The description clearly states 'List advertiser campaigns with pagination' and enumerates filtering options (folderId, status, type, date range, search query), distinguishing it from sibling tools like get_campaign (single) or create_campaign.

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

Usage Guidelines4/5

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

The description implies when to use (when you need a paginated, filtered list) but does not explicitly contrast with sibling tools like get_campaign for a single campaign or list_campaign_folders for folders. Still, the filtering context is clear.

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

kadam_adv_list_creativesB
Read-only

List advertiser creatives with pagination. Filter by campaign, status, or search query.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
statusNo
perPageNo
campaignIdNo
searchQueryNoCreative title/name or creative ID

TDQS

B3.4/5.0
Behavior3/5

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

The description adds pagination and filter capabilities beyond the readOnlyHint annotation. However, it does not disclose additional behavioral traits like authentication requirements, rate limits, or response structure.

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

Conciseness5/5

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

Extremely concise single sentence, front-loaded with the primary action and resource. Every clause serves a purpose without redundancy.

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?

Given 5 parameters and no output schema, the description covers the core listing and filtering but omits default values (page, perPage), optional status enum details, and response format. It is adequate but has gaps.

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

Parameters2/5

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

With only 20% schema description coverage, the description should compensate but merely lists filter types (campaign, status, search query) without adding meaning or format details beyond parameter names. The searchQuery parameter description in schema is not reiterated.

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

Purpose5/5

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

The description clearly states the tool lists advertiser creatives with pagination, using specific verb 'List' and resource. It distinguishes from sibling tools like list_campaigns or list_audiences by specifying 'creatives'.

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 versus alternatives. While the name implies listing creatives, there is no mention of when not to use it or how it differs from other list tools among many siblings.

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

kadam_adv_list_extended_bidsA
Read-only

List the per-slice bid overrides currently set on campaign(s) (Bid Optimization). Paginated.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
perPageNo
campaignIdsYesComma-separated campaign IDs

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true. The description adds that the tool is paginated and lists 'per-slice bid overrides' under 'Bid Optimization', which provides slight behavioral context but no additional safety or auth details. No contradiction with annotations.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the action and resource. No wasted words.

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 mentions listing and pagination but does not describe the output format or structure. Given no output schema, this omission reduces completeness for an agent to understand what to expect.

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

Parameters2/5

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

Schema description coverage is 33% (only 'campaignIds' has a description). The description does not explain any parameters beyond implying campaignIds are needed. It adds no meaning to 'page' or 'perPage' beyond what the schema provides.

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', the resource 'per-slice bid overrides', and the context 'Bid Optimization'. This uniquely identifies the tool's function and distinguishes it from siblings like 'kadam_adv_bulk_update_bids' and 'kadam_adv_update_extended_bids'.

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 reading bid overrides but provides no explicit guidance on when to use this tool versus other listing tools (e.g., 'kadam_adv_list_campaigns'). No when-not or alternative tools are mentioned.

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

kadam_adv_list_finance_operationsA
Read-only

Lists financial operations (deposits, charges, refunds). Use to check account balance, recent transactions, and spending history.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
dateToNoRange end (YYYY-MM-DD); must be paired with dateFrom
perPageNo
dateFromNoRange start (YYYY-MM-DD); must be paired with dateTo
activityTypeNoOperation type filter

TDQS

A3.8/5.0
Behavior4/5

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

Annotations include readOnlyHint=true, confirming safety. Description adds purpose and typical use cases. No contradictions, but lacks additional behavioral details like pagination behavior or rate limits. Still, annotations cover the main safety aspect.

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

Conciseness5/5

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

Extremely concise: two sentences that front-load the purpose and provide immediate user intent. No wasted words.

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?

No output schema exists, yet description does not mention return format, pagination, or any error conditions. Adequate for basic use but leaves gaps for an AI agent needing full context.

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

Parameters2/5

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

Schema has 5 parameters with 60% description coverage (page and perPage lack descriptions). The description does not add any parameter-specific meaning beyond what is in the schema, failing to compensate for the gaps.

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 specifies the verb 'Lists' and resource 'financial operations', with examples (deposits, charges, refunds) and intended use (check account balance, transactions). This distinguishes it from sibling tools like list_campaigns or list_audiences.

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?

Provides context for usage ('check account balance, recent transactions, and spending history') but does not explicitly state when not to use or mention alternatives among siblings. The guidance is implicit rather than explicit.

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

kadam_adv_list_payment_systemsA
Read-only

Lists the payment systems the account may deposit through, with per-currency deposit conditions: commission, minimum and maximum amount, and the exchange rate to the account currency. Use before advising on a deposit. Systems reserved for administrators are not returned.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

readOnlyHint=true already establishes the safe-read profile, and the description adds real behavioral context beyond it: the per-currency shape of the returned conditions and the filtering rule that administrator-reserved systems are excluded. It does not mention auth scope or pagination, but for a no-param read tool the added disclosure is meaningful.

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

Conciseness5/5

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

Three compact sentences: what is returned, when to call it, and what is filtered out. Every clause carries information, and the primary purpose is front-loaded.

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

Completeness5/5

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

With no output schema, the description compensates by naming the fields a caller will receive and the exclusion rule, so an agent knows both the trigger and the payload shape. Nothing needed to invoke this zero-arg read tool correctly is missing.

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 tool takes zero parameters, so there is nothing for the schema to describe and the baseline of 4 applies. The description correctly adds no parameter guidance because none is needed.

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

Purpose5/5

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

The description uses a specific verb ('Lists') and a precise resource ('the payment systems the account may deposit through'), then enumerates the returned fields (commission, min/max amount, exchange rate). No sibling tool covers payment systems, so the resource itself is self-distinguishing within the sibling set.

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?

'Use before advising on a deposit' gives an explicit triggering condition, which is more than most list tools provide. It stops short of naming any alternative or stating when-not-to-call, but the intended call site is unambiguous.

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

kadam_adv_move_campaignsA
Idempotent

Move one or more campaigns to a campaign group. Pass comma-separated campaign IDs and the target campaign group ID. Validation errors reject the whole request; a successful response means every requested campaign was moved.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesComma-separated campaign IDs
folderIdYesTarget campaign group ID

TDQS

A3.7/5.0
Behavior4/5

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

The description goes beyond the idempotentHint annotation by disclosing atomicity semantics: validation errors reject the whole request and success means every campaign was moved. This is exactly the kind of all-or-nothing behavior an agent needs before issuing a batch mutation, and it is consistent with idempotentHint=true.

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?

Three short sentences with the core action front-loaded and no filler. The middle sentence largely duplicates the schema's parameter descriptions, which is mild redundancy given 100% schema coverage, but overall the structure is tight.

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 two-parameter batch mutation with no output schema, the description covers the action, the inputs, and the atomicity guarantee. Missing only minor context such as required permissions or behavior when a target group is invalid, which is not fatal at this complexity.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (ids, folderId) are already documented in the schema. The description restates 'comma-separated campaign IDs' and 'target campaign group ID', adding no format, limit, or constraint detail beyond the schema, so the baseline 3 applies.

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?

States a specific verb+resource pair ('Move ... campaigns to a campaign group'), which cleanly separates it from the sibling kadam_adv_move_creatives, whose resource differs. It is clear and specific, but does not explicitly disambiguate from other campaign-related siblings such as update_campaign or set_campaign_status.

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 instruction to pass comma-separated IDs implies the batch use case, so an agent can infer when this tool is the right choice over single-campaign operations. However, no explicit when-to-use/when-not guidance or named alternatives (e.g., a hypothetical single-campaign move) are given.

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

kadam_adv_move_creativesA

Move creatives to another campaign of the same ad format and the same pricing model. This is not a silent reparenting: the moved creatives lose their creative-level geo bids, are paused and go back to moderation. If any creative or the target campaign fails the checks, nothing moves. To keep the originals in place, copy instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesLanding URL the moved creatives will use; must be on the target campaign's domain
campaignIdYesTarget campaign: same ad format and same pricing model as the current one
creativeIdsYesComma-separated creative IDs to move

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false, so the description carries the behavioral burden and does it well: it discloses that moved creatives lose creative-level geo bids, are paused, and return to moderation, and that the operation is atomic ('nothing moves' on failure). It stops short of saying whether the operation is revertible or what the caller gets back afterward, but the destructive effects are unusually well surfaced.

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

Conciseness5/5

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

Four short sentences, front-loaded with the operation and its constraints, then the side effects, then the failure semantics, then the alternative. Every sentence carries distinct information with no filler.

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

Completeness4/5

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

With no output schema, the description could say what a caller receives after a successful move (e.g. job id or moderation state), which is the one gap. Otherwise it covers prerequisites, destructive effects, and atomicity, which is sufficient for a three-parameter mutation tool.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already states the domain constraint on 'url' and the format/pricing constraint on 'campaignId'. The description restates those constraints but adds no syntax, format, or edge-case detail beyond the schema, so the baseline of 3 applies.

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

Purpose5/5

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

The description states a specific verb and resource ('Move creatives to another campaign') and constrains scope to the same ad format and pricing model. It also explicitly names the sibling operation that covers the alternative intent ('To keep the originals in place, copy instead'), so an agent can distinguish it from kadam_adv_copy_creatives without opening either schema.

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

Usage Guidelines5/5

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

It gives explicit selection criteria — same ad format, same pricing model — and names the alternative tool (copy) with the condition that selects it. The when-not condition is stated rather than implied.

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

kadam_adv_reset_extended_bidsA
Destructive

Drop every per-slice bid of the listed campaigns at once, returning them to the campaign-level bid. Blacklisted slices (action=off) are dropped too, so those slices start being bought again. Requires confirm=true: the dropped bids are not recoverable. To remove a single slice use kadam_adv_update_extended_bids with action=remove.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYes
campaignIdsYesComma-separated campaign IDs

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, but the description adds value beyond them: it discloses the non-obvious side effect that blacklisted (action=off) slices are also dropped and begin being bought again, requires confirm=true, and states the bids are not recoverable. This is exactly the irreversibility and side-effect context an agent needs.

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

Conciseness5/5

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

Three tightly packed sentences, front-loaded with the core action, side effect, safety requirement, and alternative. No filler; every sentence carries actionable information.

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

Completeness5/5

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

No output schema exists and this is a destructive mutation, so the description carries the burden well: it covers what is destroyed, the blacklist side effect, the confirmation requirement, and irreversibility. An agent has everything needed to call it safely and correctly.

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

Parameters4/5

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

Schema coverage is 50% (confirm documented only as const true, campaignIds as comma-separated string). The description explains why confirm=true exists ('the dropped bids are not recoverable'), adding meaning beyond the schema's const constraint, and clarifies campaignIds as 'the listed campaigns'. It stops short of detailing ID formats or the confirm failure mode.

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?

States a specific verb+resource ('Drop every per-slice bid ... returning them to the campaign-level bid') and defines the exact scope (listed campaigns, all slices). It is clearly distinguishable from the sibling kadam_adv_update_extended_bids, which is named for the single-slice case.

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?

Names a concrete alternative ('To remove a single slice use kadam_adv_update_extended_bids with action=remove') and gives the condition selecting it. It lacks broader routing guidance among the many other bid-related siblings (bulk_update_bids, update_site_bids), so it is strong but not exhaustive.

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

kadam_adv_set_audience_paramsA

Set the hardcoded parameters of a pixel or S2S audience. This replaces the whole set: a slot you do not send is cleared, so send every value you want to keep. Read the current ones with kadam_adv_get_audience_params first. Values that look like a {placeholder} are refused — they would stand in for the template's own placeholders.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPixel or S2S audience ID
eventNoEvent name, e.g. deposit
paramIntNoUp to 2 decimal places
paramStrNo
paramInt2NoUp to 2 decimal places
paramStr2No

TDQS

A4.5/5.0
Behavior5/5

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

With annotations only supplying readOnlyHint=false, the description carries the disclosure burden and does so well: it states this is a full-replace operation where unset slots are cleared, and that {placeholder}-like values are rejected. Both are non-obvious behaviors an agent would otherwise get wrong.

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

Conciseness5/5

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

Three tight sentences with no filler; the destructive replace semantics are front-loaded and the read-first pointer and validation rule follow in priority order. Every sentence carries actionable information.

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

Completeness5/5

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

For a 6-parameter mutation with no output schema, the description covers the destructive-replace risk, the prerequisite read step, and a validation constraint, which is what an agent needs to call it safely. Return-value detail is unnecessary given there is 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 coverage is 67%, with the id and two paramInt descriptions supplied by the schema, so the baseline is 3. The description adds important semantics about the set as a whole (omitted slots are cleared, placeholder values refused) but does not explain what event, paramStr, or paramStr2 individually mean beyond their schema entries.

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?

States a specific verb ('Set') and resource ('hardcoded parameters of a pixel or S2S audience'), which cleanly separates it from the read sibling kadam_adv_get_audience_params and from kadam_adv_update_audience. An agent can identify the operation without opening either schema.

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

Usage Guidelines4/5

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

Explicitly directs the agent to read current values with kadam_adv_get_audience_params first and clarifies the 'send every value you want to keep' precondition, which is real usage guidance. It stops short of stating when not to use this tool (e.g. versus update_audience or create_audience), so it is clear context rather than full when/when-not routing.

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

kadam_adv_set_autorule_statusB
Idempotent

Enable or disable an autorule without deleting it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
isActiveYes

TDQS

B3.3/5.0
Behavior4/5

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

Adds important context by clarifying the tool does not delete the autorule. The annotation 'idempotentHint' already covers idempotency, so the description does not need to repeat it.

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

Conciseness3/5

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

Extremely concise (one sentence), but at the cost of omitting parameter guidance and usage context; prioritizes brevity over completeness.

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 simple two-parameter tool without output schema, the description is too minimal; it fails to explain return values, what happens on error, or any behavioral nuances.

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

Parameters1/5

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

With 0% schema description coverage, the description must compensate by explaining parameters, but it does not mention 'id' or 'isActive' at all, leaving their meanings unclear.

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

Purpose5/5

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

Clearly states the verb (enable/disable) and resource (autorule), and distinguishes from sibling 'delete_autorule' by explicitly saying 'without deleting it'.

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?

Implies usage for toggling active state, but provides no explicit guidance on when to use versus alternatives like 'update_autorule' or conditions that must be met.

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

kadam_adv_set_campaign_folder_statusA
Idempotent

Bulk action on campaign groups (comma-separated IDs): activate/pause all campaigns in the groups, archive the groups together with their campaigns, or restore archived groups and their campaigns (campaign group = the UI term for a folder). archive and restore are each other's inverse: restore accepts ONLY archived group IDs and rejects the whole call if a live ID is passed.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesComma-separated campaign group IDs, e.g. '15,16'
actionYes

TDQS

A4/5.0
Behavior4/5

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

Beyond the idempotentHint annotation, it discloses cascading effects (activating/pausing/archiving a group also affects all contained campaigns) and an all-or-nothing failure mode for restore, which is valuable operational context. It does not describe permissions, rate limits, or return shape, but it adds real behavior 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.

Conciseness4/5

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

Front-loaded with the scope ('Bulk action on campaign groups') and compressed into roughly two sentences. The parenthetical clarifications (folder terminology, inverse relationship) earn their place, though the sentence is dense.

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 2-parameter, no-output-schema tool, the description covers the bulk semantics, ID format, every action's effect, and the restore precondition, plus the idempotency annotation. Only minor gaps remain (no note on what happens to already-active groups, no permission requirements).

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?

With 50% schema coverage, only 'ids' is documented in the schema; the description compensates by defining what each enum value of 'action' actually performs (activate, pause, archive, restore) and restating the comma-separated 'ids' format. This meaningfully extends what the bare enum and schema provide.

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 opens with a specific verb and resource ('Bulk action on campaign groups') and enumerates exactly what activate/pause/archive/restore do at the group level. It also disambiguates terminology ('campaign group = the UI term for a folder'). It stops short of contrasting itself with the sibling kadam_adv_set_campaign_status, which operates on individual campaigns rather than groups.

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?

It gives per-action semantics and a concrete precondition for restore ('accepts ONLY archived group IDs and rejects the whole call if a live ID is passed'), which tells the agent when restore is valid. It does not name an alternative tool or state when to prefer this over single-campaign status tools, so no explicit exclusions.

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

kadam_adv_set_campaign_rssA
Idempotent

Point a native campaign at an RSS feed so creatives are imported from it, or stop the import by sending an empty link. Native campaigns only — other formats are rejected. The import runs on a schedule, so a success here means the feed was saved, not that creatives exist yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
linkYesFeed URL. Pass an empty string to stop importing; imported creatives stay
campaignIdYesCampaign ID, must be a native campaign
keepRemovedCreativesNoKeep creatives whose item left the feed; false archives them on the next import
pauseAfterModerationNoImported creatives stay paused after moderation so they can be reviewed first

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only supply idempotentHint, so the description carries real behavioral weight and delivers it: the import is scheduled rather than immediate, success means the feed was saved and not that creatives exist yet, and stopping the import leaves already-imported creatives in place. That success-semantics caveat is exactly the kind of context annotations cannot express.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the primary action and effect, then the eligibility constraint, then the asynchronous caveat. Every sentence carries information the agent needs.

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 4-parameter mutation with no output schema and thin annotations, the description covers the main risks: format restriction, async scheduling, and non-destructive stop behavior. Minor gaps remain (it never touches the moderation/removal flags), though the schema does document those.

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% and the schema already documents the empty-string stop convention, native-campaign requirement, and both boolean flags. The description repeats the empty-link behavior rather than adding new parameter meaning, so the 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?

States a specific verb+resource ('point a native campaign at an RSS feed') and covers both directions of the operation (set vs. stop via empty link). The 'native campaigns only — other formats are rejected' clause scopes it precisely, and no sibling tool touches RSS feeds, so the agent can pick it without ambiguity.

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

Usage Guidelines4/5

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

Gives clear when-to-use conditions for both modes: set a feed to import creatives, or send an empty link to stop. It does not name an alternative tool for related work (e.g., manual creative creation), but the usage context itself is unambiguous.

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

kadam_adv_set_campaign_statusA
Idempotent

Set status for multiple campaigns. Pass comma-separated IDs and status: active, paused, archived, or restored (take out of the archive). The API answers per campaign, so some IDs can be refused while others succeed.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYes
statusYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only supply idempotentHint=true, so the description carries most of the load and does so well: it discloses partial-failure semantics ('some IDs can be refused while others succeed') and clarifies the non-obvious 'restored' semantics as un-archiving. It stops short of stating permission requirements, behavior for campaigns already in the target status, or reversibility of archiving.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action, then invocation format, then the partial-success caveat. No filler or redundancy; every sentence carries distinct information.

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

Completeness4/5

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

For a two-parameter mutation tool with no output schema, the definition covers what an agent needs to call it correctly, including per-campaign result variability. Only secondary details (authorization needs, effect on campaigns already in the target state) are absent, which is acceptable at this complexity.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate, and it does: 'ids' is documented as a comma-separated list and 'status' values are enumerated with the meaning of the ambiguous 'restored' spelled out. It adds no formatting/validation detail beyond that (e.g. ID formats, max batch size).

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?

States a specific verb ('Set status') and resource ('campaigns') with explicit batch scope ('multiple campaigns'). It is clearly distinguishable from same-family siblings like kadam_adv_set_creative_status, kadam_adv_set_autorule_status and kadam_adv_set_campaign_folder_status without opening any schema.

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 gives invocation guidance (comma-separated IDs, allowed status values) but never states when to prefer this bulk tool over per-campaign paths such as kadam_adv_update_campaign, nor any exclusion or precondition. Usage is implied by the operation itself, not compared against alternatives.

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

kadam_adv_set_creative_bidsA

Set per-country bids on creatives. The list replaces the creatives' own bids entirely, so a country left out of it falls back to the campaign bid — send every country you want priced, not just the one you are changing. All creatives must belong to one campaign, every country must be targeted by that campaign, and a country may appear only once across the whole list. CPA campaigns are rejected: their bid is system-managed.

ParametersJSON Schema
NameRequiredDescriptionDefault
bidsYesBids grouped by country; together they replace the creatives' own bids
creativeIdsYesComma-separated creative IDs. All must belong to the same campaign

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false; the description carries the real behavioral load: replace-not-merge semantics, fallback to campaign bid for omitted countries, same-campaign and targeting preconditions, duplicate-country restriction, and CPA rejection. This is exactly the destructive/irreversible context an agent needs before calling.

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

Conciseness5/5

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

Three sentences, purpose front-loaded, then the crucial replace/fallback behavior, then validation constraints. Every sentence earns its place with no filler.

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

Completeness5/5

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

For a two-parameter write tool with no output schema, the description covers semantics, preconditions, and rejected cases completely. An agent has everything needed to invoke it correctly without opening the 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?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning beyond the schema: the bids list fully replaces existing bids and unmapped countries fall back to the campaign bid. That semantics-of-the-list insight is not inferable from the schema alone.

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?

States a specific verb and resource ('Set per-country bids on creatives') with scope clarified as per-country/creative. This clearly distinguishes it from siblings like kadam_adv_bulk_update_bids and kadam_adv_update_extended_bids.

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?

Gives strong operational guidance: 'send every country you want priced, not just the one you are changing' and an explicit exclusion ('CPA campaigns are rejected'). It does not, however, name an alternative tool for e.g. campaign-level bids, so it stops short of full when-vs-alternative routing.

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

kadam_adv_set_creative_statusA
Idempotent

Set status for multiple creatives. Pass comma-separated IDs and status: active, paused, archived, or restored (take out of the archive). The API answers per creative, so some IDs can be refused while others succeed. restored is rejected for the whole call if the creative's campaign is itself archived — restore the campaign first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYes
statusYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only assert idempotentHint, so the description carries the behavioral load and does it well: partial success semantics ('some IDs can be refused while others succeed') and a real precondition ('restored is rejected for the whole call if the creative's campaign is itself archived — restore the campaign first'). It omits auth/permission requirements and any rate-limit context.

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

Conciseness5/5

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

Three sentences, front-loaded with the core action, then the parameter format, then the two edge cases. No filler; every clause adds operative information.

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

Completeness5/5

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

For a 2-parameter mutation tool with no output schema and minimal annotations, this covers the essentials an agent needs: bulk invocation format, allowed values, partial-failure behavior, and the archived-campaign blocker for 'restored'.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate: it explains that 'ids' is a comma-separated string and that 'status' accepts active/paused/archived/restored, including the non-obvious meaning of 'restored' as take-out-of-archive. That adds genuine meaning beyond the enum list.

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?

States a specific verb and resource ('Set status for multiple creatives'), explicitly bulk, which cleanly separates it from siblings like kadam_adv_set_campaign_status and kadam_adv_update_creative (single-creative edit). An agent can pick it without opening the schema.

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?

Gives clear operative context: comma-separated IDs, the four allowed statuses, and the meaning of 'restored'. It does not explicitly name when to prefer an alternative (e.g., update_creative or set_creative_bids), so it stops short of full when/when-not routing.

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

kadam_adv_set_day_money_limitA
Idempotent

Sets the daily spending limit of the WHOLE ACCOUNT, not of a single campaign (for a campaign budget use kadam_adv_update_campaign). Pass 0 to remove the limit, otherwise the amount must be at least the minimum reported by kadam_adv_get_day_money_limit. Only accounts in the supported currency may change it. Raising or removing the limit resumes campaigns that it had stopped.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitYesNew daily limit in the account currency; 0 removes the limit

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only cover idempotency, so the description carries the rest and delivers real behavioral disclosure: raising or removing the limit resumes campaigns it had stopped, a minimum-value constraint sourced from another tool, and a currency-eligibility gate. These are consequential side effects an agent must know before calling.

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

Conciseness5/5

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

Four dense sentences, each carrying distinct routing, validation, eligibility, or side-effect information with no filler. The most important distinction (account vs campaign) is front-loaded.

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

Completeness5/5

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

For a one-parameter mutation with no output schema, the description covers scope, alternative routing, validation bounds, eligibility, and side effects. An agent has everything needed to call it correctly.

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

Parameters4/5

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

The single parameter is fully described in the schema, but the description goes beyond it by stating the amount must be at least the minimum reported by kadam_adv_get_day_money_limit and reasserting the 0-removes semantics. That adds a validation rule the schema's minimum: 0 alone does not convey.

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?

States a specific verb and resource ('sets the daily spending limit of the WHOLE ACCOUNT') and explicitly scopes it against the sibling use case by naming kadam_adv_update_campaign for campaign budgets. An agent can distinguish it from all siblings without opening a schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use routing ('for a campaign budget use kadam_adv_update_campaign'), a value convention (pass 0 to remove), a validation precondition tied to kadam_adv_get_day_money_limit, and a currency eligibility restriction. Nothing substantive is left to inference.

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

kadam_adv_toggle_autorule_slice_blockA

Exclude a slice from the campaign's bid autorules, or let them back in. This does not stop buying the slice — that is action=off in kadam_adv_update_extended_bids; it only keeps the autorules from rewriting the bid you set by hand. The call toggles, and the answer says which state the slice ended in, so read kadam_adv_get_campaign_autorule_slices first if you need a specific state.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathIdsYesAlternating [sliceId, valueId, ...] as shown in a get_extended_stats row
campaignIdYesCampaign the slice belongs to

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false plus a title, so the description carries most of the burden — and it does: it discloses that the operation is a toggle (direction is decided by current state, not by a parameter), that the response reports the resulting state, and what real-world effect it does NOT have (bid parity with stopping purchase). It does not mention permissions or whether the effect is reversible, which keeps it from a 5.

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

Conciseness5/5

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

Three sentences, front-loaded with the action and followed by the two disambiguating facts (the update_extended_bids contrast, the read-first recommendation). No filler and nothing repeated from annotations or schema.

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

Completeness5/5

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

There is no output schema, but the description compensates by stating that the answer reports the resulting state, and it covers the critical semantic gap between this toggle and bid shutting-off. For a two-parameter mutation tool with high schema coverage, nothing needed to call it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters are documented in the schema, including the non-obvious alternating [sliceId, valueId, ...] format of pathIds and the minItems constraint. The description adds no parameter-level detail beyond that, so the 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?

The description states a specific verb and resource — excluding (or re-including) a slice from a campaign's bid autorules — and immediately distinguishes it from the two siblings an agent might confuse it with (kadam_adv_update_extended_bids action=off, which stops buying; kadam_adv_get_campaign_autorule_slices, which reads state). An agent can select this tool without opening any schema.

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

Usage Guidelines5/5

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

Explicit when-to-use and when-not-to-use: it says this does NOT stop buying the slice and names the alternative tool/action that does, and it tells the agent to call kadam_adv_get_campaign_autorule_slices first if a specific end state is required. Alternatives and preconditions are both covered.

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

kadam_adv_update_audienceA

Update an existing audience (read-modify-write). Fetches current state, merges your changes, sends full payload. Type cannot be changed. Pass only the fields you want to change.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
nameNo
hasHoldsNo
hasClicksNo
expireDaysNo
hasRejectsNo
campaignIdsNoComma-separated campaign IDs (type=audience)
hasConversionsNo
linkedAudienceIdsNoComma-separated pixel/fingerprint audience IDs (type=s2s)

TDQS

A4.2/5.0
Behavior5/5

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

The description discloses the read-modify-write behavior and full payload sending, adding context beyond the readOnlyHint annotation. No contradictions with annotations.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose, and contains no unnecessary text.

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?

While the key behavioral aspects are covered, the description lacks details about return values, error handling, or parameter specifics given the 9-parameter schema and no output schema.

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

Parameters2/5

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

With only 22% schema description coverage, the description does not detail individual parameters beyond a general principle. It fails to compensate for the lack of parameter documentation 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 explicitly states the verb (update), the resource (audience), and the read-modify-write pattern, clearly distinguishing it from sibling tools like create or delete.

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 instructs to pass only fields to change and notes that type cannot be changed, providing clear usage guidance. However, it does not explicitly mention when to avoid this tool or alternatives beyond implication.

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

kadam_adv_update_autoruleA

Update an autorule (read-modify-write). Pass only the fields to change; full payload is rebuilt from current state.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAutorule ID
typeNoRule type
actionNo
bidMaxNobidChange: max bid cap (>=0.001). REQUIRED for bidChange.
periodNo
slicesNobid rules: granularity dims, e.g. [180,190]. REQUIRED for bidChange.
statByNo
bidRateNobidChange: coefficient on slice EPC (new bid = EPC x bidRate, capped at bidMax). REQUIRED for bidChange, range 0.1-2; bidRate=1 = set bid to eCPC.
isActiveNo
conditionsNo
dayLimitTypeNo
dayLimitValueNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations only provide readOnlyHint=false. The description reveals a key behavioral trait: 'read-modify-write' and 'full payload is rebuilt from current state', adding value beyond annotations. However, it omits potential side effects or race 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 a single, concise sentence with no wasted words. It front-loads the purpose and packs behavioral guidance efficiently.

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 12 parameters with enums and no output schema, yet the description omits return values, error handling, and prerequisites. For a complex mutation tool, this is insufficient for complete agent understanding.

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 42% schema description coverage, the description explains the partial-update strategy but adds no per-parameter details beyond what the schema provides. It clarifies optionality but does not compensate fully for undocumented params like conditions or action.

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 'Update an autorule', specifying the verb and resource. It adds the 'read-modify-write' pattern, distinguishing it from create, delete, and status-only tools among siblings.

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 hints at partial updates ('pass only the fields to change') but does not explicitly contrast with alternatives like kadam_adv_set_autorule_status or kadam_adv_create_autorule. Usage context is implied, not directly stated.

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

kadam_adv_update_campaignA

Update a campaign (read-modify-write): pass only the fields to change, same names as create. Handles all targeting/budget/bid/schedule/conversion edits. For status changes use set_campaign_status.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCampaign ID to update
osNoComma-separated OS names or IDs (e.g. 'Android,iOS' or '10,20')
bidNoBid amount in USD. For cpa_target this is the target CPA cost
urlNoLanding page URL
nameNoCampaign name shown in dashboard
sspIdsNoComma-separated SSP IDs for the whitelist/blacklist
devicesNoComma-separated device names or IDs (e.g. 'Desktop,Smartphone' or '1,4')
endDateNoEnd date (YYYY-MM-DD)
sspModeNoSSP list mode: whitelist (allow listed) or blacklist (block listed)
browsersNoComma-separated browser names or IDs (e.g. 'Chrome,Firefox' or '8,16')
folderIdNoCampaign group ID (API field: folderId)
scheduleNoComma-separated hours (0-23) to show ads, applied to all days (e.g. '9,10,11,17')
timezoneNoTimezone offset in hours (e.g. 3 for UTC+3)
countriesNoComma-separated ISO country codes (e.g. 'US,DE,BR')
languagesNoComma-separated language names or IDs
startDateNoStart date (YYYY-MM-DD)
categoriesNoComma-separated targeting from kadam://reference/categories: 'mainstream', 'adult' (parent 1001), and/or adult subcategory IDs. Do not pass other numeric category IDs on create.
impTrackerNoThird-party impression tracking pixel URL
secondPushNoEnable second push notification (push/inpage_push only)
dailyBudgetNoDaily spending limit in USD
totalBudgetNoTotal campaign budget in USD
disableProxyNoBlock proxy/VPN traffic
siteBlacklistNoComma-separated site IDs for blacklist
siteWhitelistNoComma-separated site IDs for whitelist
connectionTypeNoNetwork connection type filter (all = no filter)
conversionHoldNoCustom postback status name for Hold (e.g. 'reg'). Sent only for a custom mapping, without a template id.
postViewWindowNoPost-view attribution window in hours (1-168)
trafficSourcesNoTraffic source pool: 'proven' = EasyStart pool of proven sources, 'all' = full pool filtered by Audience Engagement levels. Supported formats are configured server-side (popunder at release); for unsupported formats the API rejects the field with 422. Under 'proven' the API ignores audienceEngagementLevels.
campaignCapDaysNoWindow in days for campaignCapViews
postClickWindowNoPost-click attribution window in hours (1-168)
campaignCapViewsNoCampaign-level cap: max views of ANY creative from this campaign per user within campaignCapDays
conversionRejectNoCustom postback status name for Rejected. Sent only for a custom mapping, without a template id.
evenDistributionNoSpread budget evenly across the day
frequencyCapDaysNoWindow in days for frequencyCapViews
subscriptionAgesNoComma-separated subscription-age IDs (push / in-page push only; see campaign options 'subAges'). Replaces the current set. Example: '1' = newest only.
frequencyCapViewsNoCreative-level cap: max views of ONE creative per user within frequencyCapDays
audienceExcludeIdsNoComma-separated audience IDs to exclude
audienceIncludeIdsNoComma-separated audience IDs to include
conversionApprovedNoCustom postback status name for Approved (e.g. 'dep'). Sent only for a custom mapping, without a template id.
conversionTemplateIdNoConversion template id from conversion-templates. Omit or pass 0 for a custom mapping: approved/hold/reject are sent and id is not. A positive id selects that template; the status names are then taken from the template and are not sent.
pauseAfterModerationNoPause campaign after creatives pass moderation
countLastCampaignOnlyNoAttribute conversion only to the last campaign impression (default: true)
postClickAttrPriorityNoPost-click attribution takes priority over post-view (default: true)
audienceEngagementLevelsNoComma-separated Audience Engagement level slugs, e.g. 'very_high,high,medium'. Allowed slugs: very_high, high, medium, low, not_rated. Only meaningful with trafficSources=all; at least one level is required.
countFirstConversionOnlyNoCount only the first conversion per user (default: true)
postConversionAudienceIdsNoComma-separated audience IDs for post-conversion retargeting

TDQS

A4/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false; the description usefully adds that this is a read-modify-write partial update and that field names mirror create_campaign, which prevents overwrite-by-omission mistakes. It does not cover permissions, validation failures beyond schema notes, or response behavior, but adds real 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?

Three compact sentences: the operation and its partial-update semantics come first, the scope second, the routing hint last. No filler, nothing redundant.

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 46-parameter mutation tool with no output schema, the description covers the essential semantics (partial update, create-name parity) and the status alternative. What is missing is minor: any note on error/validation behavior or bid-related sibling routing, which the schema only partially compensates for.

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

Parameters3/5

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

Schema description coverage is 100% with detailed per-parameter docs, so the schema carries the burden. The description only adds that parameters match create_campaign names and that only changed fields need passing, which is useful but limited. 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?

States a specific verb (update), resource (campaign), and even the interaction pattern (read-modify-write, partial fields). It names set_campaign_status as the alternative for status. It does not address the overlap with the sibling kadam_adv_update_campaign_bid despite claiming to handle 'budget/bid' edits, so sibling differentiation is imperfect.

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?

Gives a clear usage contract (pass only the fields to change) and routes status changes to set_campaign_status explicitly. It stops short of saying when to prefer kadam_adv_update_campaign_bid or kadam_adv_bulk_update_bids for bid work, leaving one overlap unresolved.

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

kadam_adv_update_campaign_bidA
Idempotent

Change ONLY the bid for countries the campaign ALREADY targets (does NOT change geo). To add or change countries use kadam_adv_update_campaign. Unknown countries error out; omit countries to re-bid all current ones.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCampaign ID
bidYesBid value in USD (e.g. 0.05)
countriesNoWhich of the campaign's EXISTING countries to re-bid (e.g. 'US,DE') — not for adding countries. If omitted, re-bids all current countries.

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already provide idempotentHint=true. Description adds valuable behavioral details: error on unknown countries, re-bidding all when omitted, and that only bids are changed. No contradictions.

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

Conciseness5/5

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

Two sentences, no wasted words. The first sentence front-loads the core purpose. Every sentence adds distinct value.

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

Completeness5/5

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

Despite no output schema, the description fully covers behavior: what it changes, constraints, error handling, and alternative tool. Complete for a focused bid update tool.

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

Parameters5/5

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

All three parameters have schema descriptions (100% coverage). The description adds crucial context for 'countries' parameter: it only accepts existing campaign countries, not for adding, and omission re-bids all. This goes beyond the schema.

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

Purpose5/5

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

The description clearly states the tool changes only bids for countries already targeted, explicitly distinguishing it from kadam_adv_update_campaign which adds/changes countries. The use of 'ONLY' and 'does NOT change geo' makes the specific resource and verb clear.

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

Usage Guidelines5/5

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

Explicitly tells when to use this tool versus kadam_adv_update_campaign for geo changes. Also clarifies behavior on unknown countries (error) and omission of countries (re-bid all current).

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

kadam_adv_update_campaign_folderB

Partially update a campaign group: rename and/or change budgets and distribution. Only the provided fields are changed (campaign group = the UI term for a folder).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
nameNoNew campaign group name
dailyBudgetNo
totalBudgetNo
limitsEnabledNo
evenDistributionNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations only declare readOnlyHint=false, so the description carries most of the burden. The partial-update contract ('only provided fields are changed') is a meaningful disclosure beyond the annotations, but nothing is said about auth requirements, reversibility, or side effects on campaigns inside the folder.

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?

Two tight sentences; the core mutation behavior and the partial-update rule are front-loaded, and the glossary parenthetical is short. No filler.

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 6-parameter mutation with sparse schema descriptions and no output schema, the description covers the field categories but not the meaning of the budget/distribution toggles or the shape of a successful response. Adequate but with visible gaps.

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 only 17% (only 'name' is documented), so the description must compensate. It does group the fields into rename, budgets, and distribution, but leaves dailyBudget vs totalBudget, limitsEnabled, and evenDistribution semantics unexplained, so the compensation is only partial.

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?

States a specific verb ('partially update') and resource ('campaign group'), and resolves a real terminology ambiguity by equating 'campaign group' with the UI term 'folder'. It does not explicitly distinguish itself from the sibling kadam_adv_update_campaign, but the folder framing makes the scope clear.

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?

'Only the provided fields are changed' implies patch-style usage, which is genuinely useful context. However, there is no statement of when to prefer this over update_campaign, nor prerequisites such as ownership or permissions on the folder.

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

kadam_adv_update_creativeA

Update an existing creative (read-modify-write). Fetches current state, merges your changes, sends full payload. Pass only the fields you want to change. For image changes, create a new creative instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
bidNoCustom bid for this creative
urlNoLanding page URL
textNoCreative description/text
titleNoCreative title
stopDateNoStop date (YYYY-MM-DD HH:MM:SS or null to clear)
startDateNoStart date (YYYY-MM-DD HH:MM:SS)
creativeIdYesCreative (material) ID to update
bidCountriesNoComma-separated GEO IDs for the bid
pauseAfterModerationNoPause after moderation

TDQS

A4.3/5.0
Behavior4/5

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

Discloses the read-modify-write pattern, explaining that it fetches current state, merges changes, and sends full payload. No annotation contradictions; adds context beyond readOnlyHint=false.

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, front-loaded with operation description, followed by key usage guidance. No redundant information; every sentence adds value.

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

Completeness5/5

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

Given the tool has 9 parameters and no output schema, the description sufficient covers behavior and key constraints (image change warning). No gaps in understanding how to use the tool.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are well documented. The description adds only a general usage hint ('Pass only the fields you want to change'), not specific semantic details beyond 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?

Explicitly states 'Update an existing creative' with the read-modify-write pattern. Distinguishes from create by noting image changes require a new creative. Clearly differentiates from siblings like create_creative and set_creative_status.

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

Usage Guidelines4/5

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

Provides clear guidance: 'Pass only the fields you want to change' and warns against using for image changes. Does not explicitly compare to other update tools like update_campaign, but context is adequate.

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

kadam_adv_update_extended_bidsA

Set / multiply / blacklist / remove per-slice bids (Bid Optimization). Bulk: every bid op applies to all listed campaigns. action: set (needs mode+bid), off (blacklist), on (un-blacklist), remove (delete). Get pathIds from kadam_adv_get_extended_stats.

ParametersJSON Schema
NameRequiredDescriptionDefault
bidsYes
campaignIdsYesComma-separated campaign IDs (CPC/CPM)

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already indicate write behavior (readOnlyHint=false). The description adds behavioral details about actions and bulk application, but does not cover error states, idempotency, or response structure. No contradiction with annotations.

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

Conciseness5/5

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

The description is three concise sentences, front-loaded with key information, and every sentence adds value without fluff.

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 lacks an output schema, so the description should cover response expectations. It covers main functionality and required IDs but omits details on success/failure, idempotency, and invalid inputs.

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

Parameters4/5

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

The description adds meaning beyond schema by explaining action values ('off' = blacklist, 'on' = un-blacklist) and noting the source of pathIds. Given schema description coverage of 50%, the description significantly compensates.

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 sets/multiplies/blacklists/removes per-slice bids with strong verbs and specific resource. It distinguishes from sibling tools like kadam_adv_bulk_update_bids by focusing on 'extended' and 'per-slice' bids.

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

Usage Guidelines4/5

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

The description provides context that operations apply to all listed campaigns and directs to another tool for obtaining pathIds. It lacks explicit when-not-to-use guidance but offers clear usage context.

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

kadam_adv_update_site_bidsB
Idempotent

Set per-site (zone) bids for campaigns. Bid is a number ('0.05'), a multiplier ('x1.5'), or '0' to remove.

ParametersJSON Schema
NameRequiredDescriptionDefault
bidYesBid value: number ('0.05'), multiplier ('x1.5'), or '0' to remove
zonesYesComma-separated site (zone) IDs to set bids for
campaignIdsYesComma-separated campaign IDs

TDQS

B3.3/5.0
Behavior2/5

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

Beyond the idempotentHint annotation (which already indicates safe retries), the description adds no behavioral context such as what happens if campaign or zone IDs are invalid, whether bids are overwritten or merged, or any side effects. The bid format info is parameter-related, not behavioral.

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

Conciseness5/5

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

The description is extremely concise: two sentences, no fluff, front-loaded with the purpose. Every sentence adds value. It is optimally sized for quick comprehension.

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 simple update tool with three required parameters and an idempotent annotation, the description covers the core function. However, it lacks context about return values, error behavior, and differentiation from sibling tools, which limits completeness for an agent deciding between similar 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?

The input schema already describes all three parameters with 100% coverage, including the bid format. The description repeats the bid format (number, multiplier, '0' to remove) but does not add new semantic information beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Set per-site (zone) bids for campaigns.' It uses a specific verb ('set') and resource ('per-site bids'), and distinguishes from sibling tools like 'kadam_adv_update_campaign_bid' by specifying the per-site scope. The bid format explanation adds further clarity.

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 any guidance on when to use this tool versus alternatives such as 'kadam_adv_bulk_update_bids' or 'kadam_adv_update_campaign_bid'. There are no explicit when-to-use or when-not-to-use instructions, nor mention of prerequisites or context.

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

kadam_adv_upload_bulk_imagesA

First step of a bulk creative batch: stage images so they can be turned into creatives. Each image is checked against the formats of the target campaigns, which must be compatible with each other. Staging is asynchronous — this call only queues the work and returns a job; read the stagedId values from kadam_adv_get_bulk_job once it is done. Staged images count against the account's daily creative limit, and a batch that would exceed it is rejected.

ParametersJSON Schema
NameRequiredDescriptionDefault
imagesYesImage URLs or local file paths to stage
campaignIdsYesCampaigns the creatives will be created in
idempotencyKeyNoRepeat an upload with the same key to get the same job instead of staging twice

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only tell the agent readOnlyHint=false; the description adds substantial behavioral context beyond that: asynchronous queuing that returns a job rather than staged IDs, format validation against target campaigns, quota consumption against the daily creative limit, and batch rejection on overage. These are exactly the non-obvious traits an agent needs.

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

Conciseness5/5

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

Four tight sentences, front-loaded with the core purpose, then constraints and async behavior. Every sentence carries information; none is redundant.

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

Completeness5/5

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

No output schema exists, but the description explains the return (a job, not immediate staged IDs), how to retrieve results, and the quota/rejection behavior. Combined with 100% schema coverage, nothing an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description still adds meaning beyond the schema by noting that images are format-checked and that campaignIds must reference mutually compatible campaigns, which is not expressible in the schema. idempotencyKey and image format are already covered by 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?

States a specific verb and resource ('stage images so they can be turned into creatives') and positions itself as 'first step of a bulk creative batch'. It names the follow-up sibling kadam_adv_get_bulk_job, so an agent can distinguish this staging step from the creation step without reading either schema.

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?

Clearly sets context as the first step of a bulk batch and explicitly routes to kadam_adv_get_bulk_job for retrieving results. It does not, however, state when-not to use it (e.g. vs create_creative for single creatives) or exclusions, so it falls short of a full when/when-not treatment.

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. 35 tool updatesv0.7.1
    • Addedkadam_adv_block_sites
    • Addedkadam_adv_copy_campaign
    • Addedkadam_adv_copy_creatives
    • Changedkadam_adv_create_audience1 field changed
      • addedInput schema / properties / dryRun
        Added value: +{
        +  "default": false,
        +  "description": "Check the payload and create nothing",
        +  "type": "boolean"
        +}
    • Addedkadam_adv_create_bulk_creatives
    • Changedkadam_adv_create_campaign8 fields changed
      • addedInput schema / properties / audienceEngagementLevels
        Added value: +{
        +  "description": "Comma-separated Audience Engagement level slugs, e.g. 'very_high,high,medium'. Allowed slugs: very_high, high, medium, low, not_rated. Only meaningful with trafficSources=all; at least one level is required.",
        +  "type": "string"
        +}
      • changedInput schema / properties / categories / description
        Previous value: -"Comma-separated category IDs from kadam://reference/categories (or the 'mainstream'/'adult' keyword)"New value: +"Comma-separated targeting from kadam://reference/categories: 'mainstream', 'adult' (parent 1001), and/or adult subcategory IDs. Do not pass other numeric category IDs on create."
      • changedInput schema / properties / conversionApproved / description
        Previous value: -"Postback status name for 'Approved' conversions (e.g. 'dep'); used with conversionTemplateId=0"New value: +"Custom postback status name for Approved (e.g. 'dep'). Sent only for a custom mapping, without a template id."
      • changedInput schema / properties / conversionHold / description
        Previous value: -"Postback status name for 'Hold' conversions (e.g. 'reg')"New value: +"Custom postback status name for Hold (e.g. 'reg'). Sent only for a custom mapping, without a template id."
      • changedInput schema / properties / conversionReject / description
        Previous value: -"Postback status name for 'Rejected' conversions"New value: +"Custom postback status name for Rejected. Sent only for a custom mapping, without a template id."
      • changedInput schema / properties / conversionTemplateId / description
        Previous value: -"Conversion template ID (from campaign options). Use 0 for custom mapping via conversionApproved/Hold/Reject"New value: +"Conversion template id from conversion-templates. Omit or pass 0 for a custom mapping: approved/hold/reject are sent and id is not. A positive id selects that template; the status names are then taken from the template and are not sent."
      • addedInput schema / properties / dryRun
        Added value: +{
        +  "default": false,
        +  "description": "Validate the payload and create nothing",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / trafficSources
        Added value: +{
        +  "description": "Traffic source pool: 'proven' = EasyStart pool of proven sources, 'all' = full pool filtered by Audience Engagement levels. Supported formats are configured server-side (popunder at release); for unsupported formats the API rejects the field with 422. Under 'proven' the API ignores audienceEngagementLevels.",
        +  "enum": [
        +    "all",
        +    "proven"
        +  ],
        +  "type": "string"
        +}
    • Changedkadam_adv_create_creative2 fields changed
      • addedInput schema / properties / html5ArchiveUrl
        Added value: +{
        +  "description": "HTML5 archive (.zip): URL or local file path (banner campaigns only)",
        +  "type": "string"
        +}
      • addedInput schema / properties / vastTagUrl
        Added value: +{
        +  "description": "https VAST tag URL (video campaigns only). The tag is fetched and parsed on save, so a tag that does not answer with a usable VAST document is refused right away.",
        +  "type": "string"
        +}
    • Addedkadam_adv_delete_campaigns
    • Addedkadam_adv_delete_creatives
    • Addedkadam_adv_get_account
    • Addedkadam_adv_get_audience_params
    • Addedkadam_adv_get_balance
    • Addedkadam_adv_get_bulk_job
    • Addedkadam_adv_get_campaign_autorule_slices
    • Addedkadam_adv_get_campaign_bid_restrictions
    • Addedkadam_adv_get_campaign_folder
    • Addedkadam_adv_get_creative_test_conversion
    • Addedkadam_adv_get_day_money_limit
    • Addedkadam_adv_get_dictionary
    • Addedkadam_adv_get_traffic_forecast
    • Addedkadam_adv_list_payment_systems
    • Addedkadam_adv_move_campaigns
    • Addedkadam_adv_move_creatives
    • Addedkadam_adv_reset_extended_bids
    • Addedkadam_adv_set_audience_params
    • Addedkadam_adv_set_campaign_folder_status
    • Addedkadam_adv_set_campaign_rss
    • Changedkadam_adv_set_campaign_status1 field changed
      • changedInput schema / properties / status / enum
        Previous value: -[
        -  "active",
        -  "paused",
        -  "archived"
        -]New value: +[
        +  "active",
        +  "paused",
        +  "archived",
        +  "restored"
        +]
    • Addedkadam_adv_set_creative_bids
    • Changedkadam_adv_set_creative_status1 field changed
      • changedInput schema / properties / status / enum
        Previous value: -[
        -  "active",
        -  "paused",
        -  "archived"
        -]New value: +[
        +  "active",
        +  "paused",
        +  "archived",
        +  "restored"
        +]
    • Addedkadam_adv_set_day_money_limit
    • Addedkadam_adv_toggle_autorule_slice_block
    • Changedkadam_adv_update_campaign7 fields changed
      • addedInput schema / properties / audienceEngagementLevels
        Added value: +{
        +  "description": "Comma-separated Audience Engagement level slugs, e.g. 'very_high,high,medium'. Allowed slugs: very_high, high, medium, low, not_rated. Only meaningful with trafficSources=all; at least one level is required.",
        +  "type": "string"
        +}
      • changedInput schema / properties / categories / description
        Previous value: -"Comma-separated category IDs from kadam://reference/categories (or the 'mainstream'/'adult' keyword)"New value: +"Comma-separated targeting from kadam://reference/categories: 'mainstream', 'adult' (parent 1001), and/or adult subcategory IDs. Do not pass other numeric category IDs on create."
      • changedInput schema / properties / conversionApproved / description
        Previous value: -"Postback status name for 'Approved' conversions (e.g. 'dep'); used with conversionTemplateId=0"New value: +"Custom postback status name for Approved (e.g. 'dep'). Sent only for a custom mapping, without a template id."
      • changedInput schema / properties / conversionHold / description
        Previous value: -"Postback status name for 'Hold' conversions (e.g. 'reg')"New value: +"Custom postback status name for Hold (e.g. 'reg'). Sent only for a custom mapping, without a template id."
      • changedInput schema / properties / conversionReject / description
        Previous value: -"Postback status name for 'Rejected' conversions"New value: +"Custom postback status name for Rejected. Sent only for a custom mapping, without a template id."
      • changedInput schema / properties / conversionTemplateId / description
        Previous value: -"Conversion template ID (from campaign options). Use 0 for custom mapping via conversionApproved/Hold/Reject"New value: +"Conversion template id from conversion-templates. Omit or pass 0 for a custom mapping: approved/hold/reject are sent and id is not. A positive id selects that template; the status names are then taken from the template and are not sent."
      • addedInput schema / properties / trafficSources
        Added value: +{
        +  "description": "Traffic source pool: 'proven' = EasyStart pool of proven sources, 'all' = full pool filtered by Audience Engagement levels. Supported formats are configured server-side (popunder at release); for unsupported formats the API rejects the field with 422. Under 'proven' the API ignores audienceEngagementLevels.",
        +  "enum": [
        +    "all",
        +    "proven"
        +  ],
        +  "type": "string"
        +}
    • Changedkadam_adv_update_campaign_folder1 field changed
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "New campaign group name",
        +  "maxLength": 50,
        +  "minLength": 1,
        +  "type": "string"
        +}
    • Addedkadam_adv_upload_bulk_images
  2. 8 tool updatesv0.5.4
    • Addedkadam_adv_create_autorule
    • Addedkadam_adv_delete_autorule
    • Addedkadam_adv_get_extended_stats
    • Addedkadam_adv_list_autorules
    • Addedkadam_adv_list_extended_bids
    • Addedkadam_adv_set_autorule_status
    • Addedkadam_adv_update_autorule
    • Addedkadam_adv_update_extended_bids
  3. 4 tool updatesv0.5.3
    • Changedkadam_adv_list_audiences1 field changed
      • addedInput schema / properties / sortField / description
        Added value: +"Sort column: audienceId, audienceName, dateCreated, expireDays, reachToday, newToday, reach7d, new7d, reach30d, new30d"
    • Changedkadam_adv_list_campaigns5 fields changed
      • addedInput schema / properties / dateFrom / description
        Added value: +"Stats range start (YYYY-MM-DD); pass with dateTo"
      • addedInput schema / properties / dateTo / description
        Added value: +"Stats range end (YYYY-MM-DD); pass with dateFrom"
      • addedInput schema / properties / searchQuery / description
        Added value: +"Campaign name/domain or campaign ID"
      • addedInput schema / properties / searchQuery / minLength
        Added value: +2
      • addedInput schema / properties / sortField / description
        Added value: +"Sort column: campaign, dateCreation, views, clicks, moneyOut, CPC, CPM, CPA, CTR, CR, ROI, conversions, holds, rejects, profit"
    • Changedkadam_adv_list_creatives3 fields changed
      • addedInput schema / properties / searchQuery / description
        Added value: +"Creative title/name or creative ID"
      • addedInput schema / properties / searchQuery / minLength
        Added value: +2
      • addedInput schema / properties / status / enum
        Added value: +[
        +  "active",
        +  "paused",
        +  "moderation",
        +  "blocked",
        +  "archived"
        +]
    • Changedkadam_adv_list_finance_operations4 fields changed
      • addedInput schema / properties / activityType / description
        Added value: +"Operation type filter"
      • addedInput schema / properties / activityType / enum
        Added value: +[
        +  "impression",
        +  "deposit",
        +  "admin_deposit",
        +  "withdrawal",
        +  "admin_withdrawal"
        +]
      • addedInput schema / properties / dateFrom / description
        Added value: +"Range start (YYYY-MM-DD); must be paired with dateTo"
      • addedInput schema / properties / dateTo / description
        Added value: +"Range end (YYYY-MM-DD); must be paired with dateFrom"
  4. 3 tool updatesv0.5.2
    • Changedkadam_adv_create_campaign16 fields changed
      • changedInput schema / properties / campaignCapDays / description
        Previous value: -"Campaign-level: time window in days (e.g. 1 = per day). Used with campaignCapViews. Example: campaignCapViews=1, campaignCapDays=1 means 'show campaign to each user max once per day'"New value: +"Window in days for campaignCapViews"
      • changedInput schema / properties / campaignCapViews / description
        Previous value: -"Campaign-level: max times ANY creative from this campaign is shown to a user within campaignCapDays (e.g. 1 = one pop per user)"New value: +"Campaign-level cap: max views of ANY creative from this campaign per user within campaignCapDays"
      • changedInput schema / properties / categories / description
        Previous value: -"Comma-separated category IDs for content classification (e.g. '1,2,3' or 'mainstream,adult'). Multiple values allowed. Use campaign options to see available IDs."New value: +"Comma-separated category IDs from kadam://reference/categories (or the 'mainstream'/'adult' keyword)"
      • changedInput schema / properties / conversionApproved / description
        Previous value: -"Postback status name for 'Approved' conversions (e.g. 'dep', 'sale'). Used with conversionTemplateId=0 for custom mapping."New value: +"Postback status name for 'Approved' conversions (e.g. 'dep'); used with conversionTemplateId=0"
      • changedInput schema / properties / conversionHold / description
        Previous value: -"Postback status name for 'Hold' conversions (e.g. 'reg', 'lead'). Used with conversionTemplateId=0 for custom mapping."New value: +"Postback status name for 'Hold' conversions (e.g. 'reg')"
      • changedInput schema / properties / conversionReject / description
        Previous value: -"Postback status name for 'Rejected' conversions. Used with conversionTemplateId=0 for custom mapping."New value: +"Postback status name for 'Rejected' conversions"
      • changedInput schema / properties / conversionTemplateId / description
        Previous value: -"Conversion acceptance template ID from campaign options (conversionTemplates list). Use 0 for custom mapping with conversionApproved/Hold/Reject."New value: +"Conversion template ID (from campaign options). Use 0 for custom mapping via conversionApproved/Hold/Reject"
      • changedInput schema / properties / countFirstConversionOnly / description
        Previous value: -"Only count the first conversion per user (default: true). Set false to allow multiple conversions per view/click"New value: +"Count only the first conversion per user (default: true)"
      • changedInput schema / properties / folderId / description
        Previous value: -"Campaign group ID (the Kadam UI calls this a 'campaign group' / 'Группа кампаний'; the API field name is folderId)"New value: +"Campaign group ID (API field: folderId)"
      • changedInput schema / properties / frequencyCapDays / description
        Previous value: -"Creative-level: time window in days for the cap (e.g. 1 = per day, 7 = per week). Used with frequencyCapViews"New value: +"Window in days for frequencyCapViews"
      • changedInput schema / properties / frequencyCapViews / description
        Previous value: -"Creative-level: max times ONE creative is shown to a user within frequencyCapDays (e.g. 3 = user sees this creative at most 3 times)"New value: +"Creative-level cap: max views of ONE creative per user within frequencyCapDays"
      • changedInput schema / properties / postClickWindow / description
        Previous value: -"Post-click attribution window in hours (1-168). Time after ad click to count a conversion"New value: +"Post-click attribution window in hours (1-168)"
      • changedInput schema / properties / postViewWindow / description
        Previous value: -"Post-view attribution window in hours (1-168). Time after ad impression to count a conversion"New value: +"Post-view attribution window in hours (1-168)"
      • changedInput schema / properties / schedule / description
        Previous value: -"Comma-separated hours (0-23) to show ads, applied to all days (e.g. '9,10,11,12,13,14,15,16,17' for 9am-5pm)"New value: +"Comma-separated hours (0-23) to show ads, applied to all days (e.g. '9,10,11,17')"
      • changedInput schema / properties / sspIds / description
        Previous value: -"Comma-separated SSP IDs for the source whitelist/blacklist (see ssps in campaign options)"New value: +"Comma-separated SSP IDs for the whitelist/blacklist"
      • changedInput schema / properties / sspMode / description
        Previous value: -"SSP source list mode: 'whitelist' = only allow listed SSPs, 'blacklist' = block listed SSPs"New value: +"SSP list mode: whitelist (allow listed) or blacklist (block listed)"
    • Changedkadam_adv_get_stats2 fields changed
      • changedInput schema / properties / groupBy / description
        Previous value: -"Comma-separated groupings, e.g. 'day,campaign,country'. Includes campaign_group (a.k.a. folder). Unknown names are reported back, not silently ignored."New value: +"Comma-separated groupings, e.g. 'day,campaign,country' (incl. campaign_group). Unknown names are reported back."
      • changedInput schema / properties / metrics / description
        Previous value: -"Comma-separated metric names, e.g. 'spend,clicks,impressions,ctr,cpa,conversions,income,roi'. income = earned/profit. Unknown names are reported back, not silently ignored. See the report-dimensions resource for the full list."New value: +"Comma-separated metric names, e.g. 'spend,clicks,ctr,cpa,conversions,income,roi' (income = profit). Unknown names are reported back; see report-dimensions for the full list."
    • Changedkadam_adv_update_campaign16 fields changed
      • changedInput schema / properties / campaignCapDays / description
        Previous value: -"Campaign-level: time window in days (e.g. 1 = per day). Used with campaignCapViews. Example: campaignCapViews=1, campaignCapDays=1 means 'show campaign to each user max once per day'"New value: +"Window in days for campaignCapViews"
      • changedInput schema / properties / campaignCapViews / description
        Previous value: -"Campaign-level: max times ANY creative from this campaign is shown to a user within campaignCapDays (e.g. 1 = one pop per user)"New value: +"Campaign-level cap: max views of ANY creative from this campaign per user within campaignCapDays"
      • changedInput schema / properties / categories / description
        Previous value: -"Comma-separated category IDs for content classification (e.g. '1,2,3' or 'mainstream,adult'). Multiple values allowed. Use campaign options to see available IDs."New value: +"Comma-separated category IDs from kadam://reference/categories (or the 'mainstream'/'adult' keyword)"
      • changedInput schema / properties / conversionApproved / description
        Previous value: -"Postback status name for 'Approved' conversions (e.g. 'dep', 'sale'). Used with conversionTemplateId=0 for custom mapping."New value: +"Postback status name for 'Approved' conversions (e.g. 'dep'); used with conversionTemplateId=0"
      • changedInput schema / properties / conversionHold / description
        Previous value: -"Postback status name for 'Hold' conversions (e.g. 'reg', 'lead'). Used with conversionTemplateId=0 for custom mapping."New value: +"Postback status name for 'Hold' conversions (e.g. 'reg')"
      • changedInput schema / properties / conversionReject / description
        Previous value: -"Postback status name for 'Rejected' conversions. Used with conversionTemplateId=0 for custom mapping."New value: +"Postback status name for 'Rejected' conversions"
      • changedInput schema / properties / conversionTemplateId / description
        Previous value: -"Conversion acceptance template ID from campaign options (conversionTemplates list). Use 0 for custom mapping with conversionApproved/Hold/Reject."New value: +"Conversion template ID (from campaign options). Use 0 for custom mapping via conversionApproved/Hold/Reject"
      • changedInput schema / properties / countFirstConversionOnly / description
        Previous value: -"Only count the first conversion per user (default: true). Set false to allow multiple conversions per view/click"New value: +"Count only the first conversion per user (default: true)"
      • changedInput schema / properties / folderId / description
        Previous value: -"Campaign group ID (the Kadam UI calls this a 'campaign group' / 'Группа кампаний'; the API field name is folderId)"New value: +"Campaign group ID (API field: folderId)"
      • changedInput schema / properties / frequencyCapDays / description
        Previous value: -"Creative-level: time window in days for the cap (e.g. 1 = per day, 7 = per week). Used with frequencyCapViews"New value: +"Window in days for frequencyCapViews"
      • changedInput schema / properties / frequencyCapViews / description
        Previous value: -"Creative-level: max times ONE creative is shown to a user within frequencyCapDays (e.g. 3 = user sees this creative at most 3 times)"New value: +"Creative-level cap: max views of ONE creative per user within frequencyCapDays"
      • changedInput schema / properties / postClickWindow / description
        Previous value: -"Post-click attribution window in hours (1-168). Time after ad click to count a conversion"New value: +"Post-click attribution window in hours (1-168)"
      • changedInput schema / properties / postViewWindow / description
        Previous value: -"Post-view attribution window in hours (1-168). Time after ad impression to count a conversion"New value: +"Post-view attribution window in hours (1-168)"
      • changedInput schema / properties / schedule / description
        Previous value: -"Comma-separated hours (0-23) to show ads, applied to all days (e.g. '9,10,11,12,13,14,15,16,17' for 9am-5pm)"New value: +"Comma-separated hours (0-23) to show ads, applied to all days (e.g. '9,10,11,17')"
      • changedInput schema / properties / sspIds / description
        Previous value: -"Comma-separated SSP IDs for the source whitelist/blacklist (see ssps in campaign options)"New value: +"Comma-separated SSP IDs for the whitelist/blacklist"
      • changedInput schema / properties / sspMode / description
        Previous value: -"SSP source list mode: 'whitelist' = only allow listed SSPs, 'blacklist' = block listed SSPs"New value: +"SSP list mode: whitelist (allow listed) or blacklist (block listed)"
  5. 5 tool updatesv0.5.1
    • Changedkadam_adv_create_campaign1 field changed
      • changedInput schema / properties / folderId / description
        Previous value: -"Campaign folder ID"New value: +"Campaign group ID (the Kadam UI calls this a 'campaign group' / 'Группа кампаний'; the API field name is folderId)"
    • Changedkadam_adv_create_campaign_folder1 field changed
      • changedInput schema / properties / name / description
        Previous value: -"Folder name (1-50 characters, e.g. 'SA', 'US campaigns')"New value: +"Campaign group name (1-50 characters, e.g. 'SA', 'US campaigns')"
    • Changedkadam_adv_get_stats3 fields changed
      • changedInput schema / properties / folderIds / description
        Previous value: -"Comma-separated folder IDs (for reportType=conversions)"New value: +"Comma-separated campaign group (folder) IDs (for reportType=conversions)"
      • addedInput schema / properties / groupBy / description
        Added value: +"Comma-separated groupings, e.g. 'day,campaign,country'. Includes campaign_group (a.k.a. folder). Unknown names are reported back, not silently ignored."
      • addedInput schema / properties / metrics / description
        Added value: +"Comma-separated metric names, e.g. 'spend,clicks,impressions,ctr,cpa,conversions,income,roi'. income = earned/profit. Unknown names are reported back, not silently ignored. See the report-dimensions resource for the full list."
    • Changedkadam_adv_update_campaign2 fields changed
      • changedInput schema / properties / folderId / description
        Previous value: -"Campaign folder ID"New value: +"Campaign group ID (the Kadam UI calls this a 'campaign group' / 'Группа кампаний'; the API field name is folderId)"
      • addedInput schema / properties / subscriptionAges
        Added value: +{
        +  "description": "Comma-separated subscription-age IDs (push / in-page push only; see campaign options 'subAges'). Replaces the current set. Example: '1' = newest only.",
        +  "type": "string"
        +}
    • Changedkadam_adv_update_campaign_bid1 field changed
      • changedInput schema / properties / countries / description
        Previous value: -"Comma-separated ISO country codes (e.g. 'US,DE'). If omitted, keeps current countries from campaign settings"New value: +"Which of the campaign's EXISTING countries to re-bid (e.g. 'US,DE') — not for adding countries. If omitted, re-bids all current countries."
  6. 1 tool updatev0.4.5
    • Addedkadam_adv_get_campaign
  7. 21 tool updatesv0.3.9
    • First observedkadam_adv_bulk_update_bids
    • First observedkadam_adv_create_audience
    • First observedkadam_adv_create_campaign
    • First observedkadam_adv_create_campaign_folder
    • First observedkadam_adv_create_creative
    • First observedkadam_adv_delete_audience
    • First observedkadam_adv_get_audience
    • First observedkadam_adv_get_stats
    • First observedkadam_adv_list_audiences
    • First observedkadam_adv_list_campaign_folders
    • First observedkadam_adv_list_campaigns
    • First observedkadam_adv_list_creatives
    • First observedkadam_adv_list_finance_operations
    • First observedkadam_adv_set_campaign_status
    • First observedkadam_adv_set_creative_status
    • First observedkadam_adv_update_audience
    • First observedkadam_adv_update_campaign
    • First observedkadam_adv_update_campaign_bid
    • First observedkadam_adv_update_campaign_folder
    • First observedkadam_adv_update_creative
    • First observedkadam_adv_update_site_bids

TDQS

A3.8/5.0

Scored across 58 tools

Disambiguation4/5

Tools are mostly differentiated by resource and action, and descriptions explicitly resolve several overlaps (e.g. get_balance vs get_account, update_campaign_bid vs bulk_update_bids). Some clusters around finance, bid optimization, and bulk campaign/creative operations still require careful reading, but boundaries are documented.

Naming Consistency5/5

All 58 tools use a consistent kadam_adv_ prefix and snake_case verb_noun naming. Verbs like get, list, create, update, delete, set, move, copy, and reset are used predictably with no mixed conventions.

Tool Count2/5

58 tools is far above the typical 3–15 range and makes agent navigation heavy. While many tools map to distinct API operations, the surface could be consolidated across finance, bid optimization, and folder/creative bulk actions.

Completeness4/5

Core lifecycle coverage is strong across campaigns, creatives, audiences, autorules, bid optimization, finance, and dictionaries. Minor gaps exist (e.g. account profile updates, deposit creation, some reporting consolidation), but agents can work around them.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server for programmatic management of Meta (Facebook/Instagram) advertising campaigns through AI assistants. It enables campaign creation, ad set management, creative upload, analytics, audience management, and conversion tracking.
    115 npm
    4
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for managing ad campaigns across Google Ads, Meta, and more. Enables deploying campaigns, checking performance, and managing budgets from terminal or AI assistants.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server that enables AI agents (Claude Code) to manage Criteo campaigns, ad sets, creatives, audiences, and reports via natural language.
    -