Skip to main content
Glama
Moe03

Convocore MCP Server

by Moe03

Convocore MCP Server

A Model Context Protocol (MCP) server that connects AI assistants (Claude Desktop, Cursor, and other MCP hosts) to the Convocore HTTP API. The host spawns this process, talks to it over stdio (standard input/output), and gains many tools for agents, conversations, knowledge bases (including mass URL ingest), and single-URL scraping.

npm version Docker Hub License: MIT


What this project is

Piece

Role

MCP

A protocol so clients (e.g. Claude) can list and call tools with structured arguments and get text (or other) results back.

This server

A small Node.js app using @modelcontextprotocol/sdk: it registers tools, validates arguments with Zod, and proxies calls to Convocore’s REST API with your workspace bearer token.

Convocore API

Backend at https://{region}-api.vg-stuff.com/v3 (see Regions). Your WORKSPACE_SECRET is sent as Authorization: Bearer ….

This repository is not a chat UI. It is the bridge between an MCP-capable assistant and Convocore.


Related MCP server: Letta MCP Server

What the server exposes (capabilities)

The server declares tools only (no MCP resources or prompts in code). Each successful tool call returns MCP content with a single text part whose body is pretty-printed JSON (JSON.stringify(result, null, 2)) from the Convocore API response.

Area

Tools

Purpose

Agents

~12

CRUD, list, search, export/import, clone, usage, CSS, patch prompt

Conversations

~12

CRUD, list, export, assign, bulk/query, channel send

Knowledge base

~14

CRUD, patch, bulk get/create/delete, URL ingest, search, images, quota

Orgs / agency / clients

6

orgs_read/write, agency_read/write, clients_read/write

Leads CRM

2

leads_read / leads_write (list, export, import, magic import, …)

Agent HTTP tools

5

list/get/create/update/delete Convocore agent tools (not MCP tools)

Agent variables

5

list/get/create/update/delete agent variables

Channels

4

get_agent_channels, create_channel_connect_link, get_connect_link_status, disconnect_meta_page — connect WhatsApp / Messenger / Instagram through a no-login link

WhatsApp AI rules

3

get_whatsapp_ai_rules, update_whatsapp_ai_rules, update_whatsapp_number_settings — when the AI replies on WhatsApp

Campaigns

2

campaigns_read / campaigns_write — outbound call campaigns (create, edit, start/stop, restart, delete)

Call logs

2

call_logs_read / call_logs_write — list, get, export, create, edit, delete

Outbound calls & SMS

4

get_agent_phone, start_outbound_call, send_sms, contact_leads

Custom metrics

2

custom_metrics_read / custom_metrics_write — define metrics and read their data

Lead groups

2

lead_groups_read / lead_groups_write — list, create, assign, rename, delete

Folders

2

folders_read / folders_write — agent folders

Agent extras

5

get_agent_audit_log, send_handoff_reminder, generate_conversation_summaries, agent_gallery_templates, notification_email

WhatsApp management

6

whatsapp_numbers_read/write, whatsapp_templates_read/write, whatsapp_campaigns_read/write

Meta pages, SMS, email

5

meta_pages_read, sms_numbers_read/write, email_channel_read/write

Integrations

3

integrations_read / integrations_write / integrations_test — every connection (Google Calendar, Outlook Calendar, Google Sheets, Airtable, Shopify, Calendly, Zoho CRM, Gmail, Outlook mail, Zoho Mail, Google Drive), assign / update / remove on agents, diagnose an agent's setup, and inspect or run the agent's real integration tools

Zoho CRM records

2

zoho_crm_records_read / zoho_crm_records_write — list, search, COQL, get; create, update, upsert, delete, notes

Contacts

2

contacts_read / contacts_write — cross-channel identities

Agent backups

2

agent_backups_read / agent_backups_write — backup, restore, revert prompt, prompt caching

Code tools & sharing

2

code_tools, tool_sharing

Workspace

3

workspace_read / workspace_write, generate_lead_funnel

Testing

3

test_agent_tool, test_agent_tool_request, run_agent_auto_test

Discovery

1

search_mcp_tools — find the right tool without guessing

Scrape / embed / voice

many

scrape, embed code, voices, Twilio utils

Interact (WS)

1

Drive one agent turn; supports toolTest + variablesOverrides

Specs

3

UI Engine, channel integration, pricing


Light mode

The tools in the rows from "Campaigns" down to "Agent extras" (and every list tool) take mode:

  • compact (default): every record and field, but long text is cut and bulky blobs (transcripts, page content, histories) are replaced by a size marker.

  • full: the complete API response.


How it runs (transport and lifecycle)

  1. The host (Claude Desktop, Cursor, etc.) starts the server as a subprocess: e.g. npx -y convocore-mcp, docker run …, or node dist/index.js.

  2. Communication uses StdioServerTransport: JSON-RPC messages on stdin/stdout. Do not write logs to stdout; the server logs to stderr (e.g. Convocore MCP Server running on stdio).

  3. On startup, getConfig() reads env vars. If WORKSPACE_SECRET is missing, the process throws and exits.

  4. The host sends tools/list and tools/call. Each call is validated, then ConvocoreClient performs fetch() to the REST API.

flowchart LR
  Host[MCP host]
  MCP[convocore-mcp stdio]
  API[Convocore REST API v3]
  Host <--> MCP
  MCP --> API

Repository layout

Path

Purpose

src/index.ts

MCP server, tool definitions (JSON Schema for hosts), Zod validation, tool dispatch

src/convocore-client.ts

HTTP client: paths, methods, query strings, JSON bodies

src/agent-theme-palette.ts

hexToHsl / handleAutoGenPallet — builds nineColorPallet for customThemeJSONString

src/config.ts

WORKSPACE_SECRET, CONVOCORE_API_REGION, optional CONVOCORE_WORKSPACE_ID, resolved baseUrl

src/types.ts

Shared TypeScript types for config and agent payloads

dist/

Compiled output (pnpm run build / tsc) — what npm publishes

Dockerfile

Multi-stage image: build with pnpm, run node dist/index.js (alternative distribution)

docker-compose.yml

Example service (see Docker Compose note)

claude_desktop_config.example.json

Sample Claude Desktop MCP entry

openapi.json

OpenAPI spec (reference for API shape)


Environment variables

Variable

Required

Default

Meaning

WORKSPACE_SECRET

Yes

—

Bearer token for the Convocore workspace (same as API key/secret from your dashboard).

CONVOCORE_API_REGION

No

eu-gcp

eu-gcp or na-gcp; selects API host (see below).

CONVOCORE_API_BASE_URL

No

—

Optional full REST base URL override. Useful for local dev, e.g. http://localhost:5000/v3. Overrides CONVOCORE_API_REGION when set. The /interact WebSocket URL is derived from this (scheme swapped to ws/wss, path replaced with /interact) unless CONVOCORE_INTERACT_WS_URL is also set.

CONVOCORE_INTERACT_WS_URL

No

—

Optional explicit override for only the /interact WebSocket URL, e.g. ws://localhost:5000/interact. Set this when you want REST traffic on prod but WebSocket traffic on a local debug server (or vice-versa). Used verbatim — supply scheme, host, port, and path.

CONVOCORE_WORKSPACE_ID

No

—

Workspace/org UUID (agent.ownerID). When set, MCP avoids heavy GET /agents scans used only to infer the workspace id.

CONVOCORE_TELEMETRY

No

on

Set to 0 to turn off anonymous usage telemetry. See Telemetry.

The server reads WORKSPACE_SECRET, CONVOCORE_API_REGION, optional CONVOCORE_API_BASE_URL, optional CONVOCORE_INTERACT_WS_URL, optional CONVOCORE_WORKSPACE_ID, and optional CONVOCORE_TELEMETRY / CONVOCORE_TELEMETRY_DEBUG / DO_NOT_TRACK. Any other variables in compose files or docs are ignored unless you wire them yourself.

API regions and base URLs

CONVOCORE_API_REGION

Base URL

eu-gcp

https://eu-gcp-api.vg-stuff.com/v3

na-gcp

https://na-gcp-api.vg-stuff.com/v3

For local development, set CONVOCORE_API_BASE_URL=http://localhost:5000/v3 to redirect both REST and WebSocket, or set CONVOCORE_INTERACT_WS_URL=ws://localhost:5000/interact to redirect only the /interact WebSocket while REST keeps using the regional host.


Authentication

Every request from ConvocoreClient includes:

  • Authorization: Bearer <WORKSPACE_SECRET>

  • Content-Type: application/json

Non-OK responses: body is parsed as JSON; message is thrown as an error when present, otherwise a generic status message. Keep WORKSPACE_SECRET out of prompts, screenshots, and shared configs; use env vars or your host’s secret mechanism.

Gray-label client connections

Agencies can let a whitelabel client connect Claude, ChatGPT or Cursor to only the agents assigned to that client, under the agency's brand, on a neutral host (https://mcp-project.vg-stuff.com/mcp, extra hosts via GRAY_LABEL_MCP_HOSTS).

  • The agency turns on AI assistant access for the client (mcpAccess on the client). The client clicks Connect AI in their dashboard; the API mints a gl_… connection token stored as a hash on the agency workspace (users/{workspaceId}/mcpClientConnections).

  • The agency host accepts gl_ tokens only, and gl_ tokens work only there. The API scopes every call to the client's agents (client.widgetIDs ∪ org.widgetIDs, read live) and refuses workspace-level routes; this server also narrows the tool list and checks agent ids.

  • Server name, instructions, tool text, results, errors and the OAuth Connect page carry the agency brand ({Agency} - {Client}), never the platform's. Scope and brand refresh every minute on open sessions; revoking a connection or turning access off stops it.


Quick start

Prerequisites

  • A Convocore workspace secret (WORKSPACE_SECRET).

  • Optional: correct region (eu-gcp / na-gcp).

  • Node.js 20+ (ships with npx). Docker is optional and only needed for the container workflow.

You don't have to install anything. Your MCP host (Claude Desktop, Cursor, etc.) runs the server on demand:

npx -y convocore-mcp

Set WORKSPACE_SECRET (and optionally CONVOCORE_API_REGION) in the host's env block — see the Claude Desktop example below.

The first invocation downloads the package (a few seconds); subsequent runs are cached by npm.

Option B: Docker

docker run -i --rm \
  -e WORKSPACE_SECRET="your_workspace_secret_here" \
  -e CONVOCORE_API_REGION="eu-gcp" \
  moe003/convocore-mcp:latest

-i keeps stdin open so the MCP host can speak JSON-RPC to the container.

Option C: Local Node (development)

git clone https://github.com/moe003/convocore-mcp.git
cd convocore-mcp
pnpm install
pnpm run build
export WORKSPACE_SECRET="your_workspace_secret_here"
export CONVOCORE_API_REGION="eu-gcp"
node dist/index.js

Connecting MCP hosts

Claude Desktop

Config path:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

npx (recommended):

{
  "mcpServers": {
    "convocore": {
      "command": "npx",
      "args": ["-y", "convocore-mcp"],
      "env": {
        "WORKSPACE_SECRET": "your_workspace_secret_here",
        "CONVOCORE_API_REGION": "eu-gcp"
      }
    }
  }
}

Windows note: if Claude Desktop fails to spawn npx directly, wrap it with cmd:

{
  "mcpServers": {
    "convocore": {
      "command": "cmd",
      "args": ["/c", "npx", "-y", "convocore-mcp"],
      "env": {
        "WORKSPACE_SECRET": "your_workspace_secret_here",
        "CONVOCORE_API_REGION": "eu-gcp"
      }
    }
  }
}

After saving the config, fully quit and relaunch Claude Desktop. The convocore server should appear in the MCP server list and the tools become available in chat.

Docker (alternative): pull the image first to avoid first-run timeout in the host:

docker pull moe003/convocore-mcp:latest
{
  "mcpServers": {
    "convocore": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e", "WORKSPACE_SECRET=your_workspace_secret_here",
        "-e", "CONVOCORE_API_REGION=eu-gcp",
        "moe003/convocore-mcp:latest"
      ]
    }
  }
}

Local Node (development): use an absolute path to dist/index.js:

{
  "mcpServers": {
    "convocore": {
      "command": "node",
      "args": ["/absolute/path/to/convocore-mcp/dist/index.js"],
      "env": {
        "WORKSPACE_SECRET": "your_workspace_secret_here",
        "CONVOCORE_API_REGION": "eu-gcp"
      }
    }
  }
}

Cursor and other clients

Any client that supports stdio MCP servers can use the same command + args + env pattern as above. The recommended command/args is npx + ["-y", "convocore-mcp"]; Docker and local Node also work. Set the same environment variables.

Dashboard one-click install (hosted MCP)

For a workspace dashboard button, call the hosted helper with the MCP URL, region, and workspace secret:

curl -sS -X POST https://mcp.convocore.ai/v1/install-links \
  -H 'Content-Type: application/json' \
  -d '{
    "mcpUrl": "https://mcp.convocore.ai/mcp",
    "workspaceSecret": "vg_…",
    "region": "na-gcp",
    "workspaceName": "Acme Agency"
  }'

Response highlights — connector / install name defaults to Convocore {workspaceName} (e.g. Convocore Acme Agency) for Claude, Cursor, and other hosts:

Field

Use

name

Display name used in Claude connectorName, Cursor deeplink name, Claude Desktop key

cursor.deeplink

Add to Cursor — true one-click (cursor://…/mcp/install with URL + Authorization + X-Convocore-Region in base64 config)

cursor.webFallback

https://cursor.com/en/install-mcp?… if the protocol handler is not registered yet

claude.installUrl

Add to Claude — opens the official prefilled custom-connector modal

claude.connectorUrl

/t/<base64url(secret)>/mcp?region=… (path keeps the secret after Claude strips ?token= from OAuth resource)

claudeDesktop

Optional local mcp-remote JSON for Claude Desktop config files

Why Claude needs ?token= (and OAuth on the host)

  • Cursor deeplinks embed headers in base64 — secret travels with the install.

  • Claude’s install URL only prefills name + connector URL. No header query params exist.

  • Claude then runs OAuth Dynamic Client Registration against the MCP host. Without /oauth/register + authorize/token, you get “Couldn't register with Convocore’s sign-in service”.

  • Hosted MCP implements that OAuth AS. Claude often strips ?token= from OAuth resource, so the secret is in the path (/t/…/mcp). Authorize shows a one-click Connect page (auto-submits) — no paste. Access tokens are the workspace secret, expires_in ≈ 10 years, plus refresh.

  • MCP transport sessions idle-evict after ~1 year by default (CONVOCORE_HOSTED_SESSION_IDLE_MS=0 disables eviction). Reconnect recreates a session with the same secret.

Security note: ?token= in a Claude connector URL is a pragmatic tradeoff (logs/history). Prefer Cursor headers when possible; rotate the workspace secret if a link leaks.

You can also build the same URLs client-side with buildInstallLinks from dist/install-links.js without calling the API.


HTTP API mapping (what each tool calls)

All paths are relative to baseUrl (e.g. https://eu-gcp-api.vg-stuff.com/v3).

Tool

Method

Path / pattern

create_agent

POST

/agents body { agent: { … } } (legacy/raw mode)

create_agent_from_template

POST workflow

Preferred: explicit systemPrompt / branding / merged voiceConfig; optional sourceUrl scrape + KB; then POST /agents; response includes full agent via follow-up get_agent

get_agent

GET

/agents/{agentId}

update_agent

PATCH

/agents/{agentId} body { agent: { … } }

patch_agent_prompt

GET+PATCH

get_agent then exact old_string→new_string on prompt/CSS field (Cursor StrReplace-style); PATCH only the changed fields

delete_agent

DELETE

/agents/{agentId}

list_agents

GET

/agents optional ?limit= when supported

search_agents

GET

/agents/search?workspaceId=…&page&limit&sortBy&starredOnly&search? (workspace resolved internally from MCP config/workspace secret context)

export_agent

GET

/agents/{agentId}/export-template

import_agent

POST

/agents/import-template

get_agent_usage

POST

/agents/{agentId}/usage body { range }

list_conversations

GET

/agents/{agentId}/convos?limit&cursor (cursor pagination; page>1 without cursor rejected)

get_conversations_bulk

GET×N

Fan-out GET /agents/{agentId}/convos/{convoId} (max 50 IDs, concurrency pool)

query_conversations

MCP

Cursor list + bulk filter (not server SQL; maxScan bound)

get_agent_usage_bulk

POST×N

Fan-out POST /agents/{agentId}/usage (max 20 agents)

get_kb_docs_bulk

GET×N

Fan-out GET /agents/{agentId}/kb/{docId} (max 30 docs)

create_conversation

POST

/agents/{agentId}/convos body { conversation }

get_conversation

GET

/agents/{agentId}/convos/{convoId}

update_conversation

PATCH

/agents/{agentId}/convos/{convoId} body { conversation }

list_conversation_notes

GET

/agents/{agentId}/convos/{convoId}/notes

add_conversation_note

POST

/agents/{agentId}/convos/{convoId}/notes body { text, authorName? }

update_conversation_note

PATCH

/agents/{agentId}/convos/{convoId}/notes/{noteId} body { text, authorName? }

delete_conversation_note

DELETE

/agents/{agentId}/convos/{convoId}/notes/{noteId}

delete_conversation

DELETE

/agents/{agentId}/convos/{convoId}

export_all_conversations

GET

/agents/{agentId}/convos/export?format=&limit=&cursor=&… (requires paid workspace / hasEverPaid)

export_conversation

GET

/agents/{agentId}/convos/{convoId}/export?format=

assign_conversation

POST

/agents/{agentId}/convos/{convoId}/assign body { assignToUserId, delegatedBy? }

create_kb_from_urls

POST×N or 1

Fan-out / batch POST /agents/{agentId}/kb with sourceType=url + scrapeContent

create_kb_doc

POST

/agents/{agentId}/kb body: KB fields

list_kb_docs

GET

/agents/{agentId}/kb?page&pageSize

get_kb_doc

GET

/agents/{agentId}/kb/{docId}

update_kb_doc

PATCH

/agents/{agentId}/kb/{docId}

patch_kb_doc

GET+PATCH

get_kb_doc then exact old_string→new_string on content/name (Cursor StrReplace-style)

delete_kb_doc

DELETE

/agents/{agentId}/kb/{docId}

get_kb_stats

GET

/agents/{agentId}/kb/stats

scrape_url

HTTP ping or crawler

mode=check (default): fast status for up to 20 URLs/images; mode=scrape: full page scrape (1 URL)

interact_with_agent

WSS

wss://{region}-gcp-api.vg-stuff.com/interact (single InteractObject in, streamed ChunkMessages out)

get_ui_engine_spec

n/a

Static reference — does not hit the API


Tool reference (parameters and notes)

Agent tools

create_agent_from_template — Preferred for from-scratch chat+voice agents. Workspace is resolved internally (no workspaceId input). Recommended explicit fields: title, systemPrompt, voiceConfig (must use speechGen.provider google-live or ultravox only — use search_voices on those providers), primaryColor (hex, from scrape_url colours when possible), widgetImageUrl (logo URL, e.g. favicon from scrape_url). Optional: voicePrompt (Gemini Live systemInstruction; omitted → reuse systemPrompt), description, themeType (light|dark, default light), sourceUrl (optional scrape wait + excerpt), createKbUrlDoc (requires sourceUrl when true), defaultLanguage (default multilingual), proactiveMessage, branding, chatBgURL, additionalConfig.

  • Workflow for the AI: scrape_url first → pick colour + favicon URL → search_voices on google-live / ultravox for accents → then this tool with explicit prompts and full voiceConfig.

  • MCP builds customThemeJSONString (nineColorPallet) from primaryColor (same lightness ramp as Convocore handleAutoGenPallet).

  • After create, MCP calls get_agent and returns data.agent as the full document (plus agentId).

  • Prefer env CONVOCORE_WORKSPACE_ID so MCP does not need to infer workspace from list_agents.

create_agent — Legacy direct mode for advanced/manual payload control. Required: title. Optional: description, theme, disabled, light, enableVertex, autoOpenWidget, voiceConfig, nodes, additionalConfig.

  • Prefer create_agent_from_template unless you intentionally need low-level manual field control.

  • nodes: Convocore’s multi-step graph; nodes[0].instructions is the main system prompt.

  • additionalConfig: Plain object merged into the agent payload (same level as other fields). Use for fields not listed explicitly.

get_agent — Required: agentId. Response includes agent JSON; main prompt is under nodes[0].instructions when present.

update_agent — Required: agentId. Optional: same agent fields as create; patch semantics depend on API. To change the main prompt, update nodes[0].instructions. For large prompts prefer patch_agent_prompt.

patch_agent_prompt — Cursor-style surgical edit. Required: agentId, old_string, new_string. Optional: replace_all, target (auto|nodes0|vg_instructions|vg_systemPrompt|proactiveMessage|customCSS — vg_* still writes nodes[0].instructions), sync_mirrors (default false; never PATCHes vg_instructions). Fails if old_string is missing or ambiguous (unless replace_all).

AI Funnel / lead scoring — funnelConfig + leadCollectionRules on create/update, or ownerNotifyEmails on create_agent_from_template. Runtime emails sales on hot leads. Do not attach a custom HTTP “notify sales” webhook tool.

delete_agent — Required: agentId. Permanent deletion on the API side.

list_agents — Optional: limit (capped fetch when API supports ?limit=). Prefer search_agents or CONVOCORE_WORKSPACE_ID for large workspaces instead of dumping every agent without a cap.

search_agents — Required: none. Optional: search, page (default 1), limit (default 50), sortBy (newest | oldest | alphabetical, default newest), starredOnly (default false). Workspace is resolved internally by MCP.

export_agent — Required: agentId. Returns template JSON for backup/migration.

import_agent — Required: agentTemplate, agentName. Optional: fromAgentId.

get_agent_usage — Required: agentId. Optional: range: { from, to } ISO date strings.

Conversation tools

list_conversations — Required: agentId. Optional: limit (default 20, max 20), cursor (from previous nextCursor). Response: data, hasMore, nextCursor, limit. For page 2+ pass cursor — do not bump page alone (API rejects page>1 without cursor). List reads the Postgres mirror; summary / capturedVariables are often missing on list rows.

get_conversations_bulk — Required: agentId, convoIds (1–50). Fan-out GETs; returns lean { ID, summary, ts, capturedVariables, userName, origin } plus failed[]. Chunk larger audits.

query_conversations — Required: agentId. Optional filters: origin, tsFrom/tsTo, capturedVariableExists, capturedVariableEquals, summaryContains, hasUserName, plus limit / maxScan. MCP-side scan (not SQL).

get_agent_usage_bulk — Required: agentIds (1–20). Optional shared range.

get_kb_docs_bulk — Required: agentId, docIds (1–30). Optional includeContent (default false).

create_conversation — Required: agentId, conversation. The API expects at least a ts (timestamp) in the conversation object; you may add userName, userEmail, etc. per your Convocore setup.

get_conversation — Required: agentId, convoId.

update_conversation — Required: agentId, convoId, conversation (partial fields).

Conversation notes — a timeline of human review notes per conversation (reviewNotes, oldest first; also returned by get_conversation). add_conversation_note / update_conversation_note / delete_conversation_note need agentId, convoId, text / noteId; authorName (optional) labels an API-key caller such as "Claude via MCP". Notes cannot be changed through update_conversation. Every change is recorded in the workspace Logs (who, IP, time). query_conversations accepts hasNotes and noteContains.

delete_conversation — Required: agentId, convoId.

export_all_conversations — Required: agentId. Optional: format (json|csv), limit, sort, fromTs, toTs, cursor, convoIds. Requires a paid workspace (hasEverPaid === true); billed against monthly export quota. Cursor pagination via nextCursor / hasMore.

export_conversation — Required: agentId, convoId. Optional: format — json or csv. Requires a paid workspace (hasEverPaid === true).

assign_conversation — Required: agentId, convoId, assignToUserId. Optional: delegatedBy.

Knowledge base tools

Tool descriptions in code note “VG agents only” — KB operations target /agents/{id}/kb and may only apply to supported agent types on the Convocore side.

create_kb_from_urls — Preferred for many pages. Required: agentId, urls (max 50). Optional: mode (per_url default | batch), name, tags, refreshRate (3d|7d|never), scrapeContent (default true), skipExisting (default true). Uses the KB router to scrape — do not pre-scrape with scrape_url / web fetch. Scraping is async; poll list_kb_docs / get_kb_doc.

create_kb_doc — Required: agentId, name, sourceType: doc | url | sitemap.

  • doc: use content for text.

  • url: use urls (array), optional scrapeContent.

  • sitemap: use sitemapUrl, optional maxPages.

Optional: metadata, tags, refreshRate — 3d | 7d | never (default never; matches Convocore API).

list_kb_docs — Required: agentId. Optional: page (default 1), pageSize (default 20).

get_kb_doc — Required: agentId, docId.

update_kb_doc — Required: agentId, docId. Optional: name, content, metadata, tags, refreshRate, url. For large bodies prefer patch_kb_doc.

patch_kb_doc — Cursor-style surgical edit. Required: agentId, docId, old_string, new_string. Optional: replace_all, field (content|name, default content).

delete_kb_doc — Required: agentId, docId.

get_kb_stats — Required: agentId.

Scrape tool

scrape_url — Provide url and/or urls (max 20).

  • mode: "check" (default): fast HTTP ping — status (200/404/…), ok, content-type, final URL after redirects. Use to verify images, logos, and page links before wiring them into an agent.

  • mode: "scrape": full Convocore crawler scrape of one URL (waits up to ~120s) for text/colours/favicon. Workspace resolved internally. Not for KB ingest (create_kb_from_urls).

Interact (WebSocket) tool

interact_with_agent is the only WebSocket-backed tool. It opens a single connection to wss://{region}-gcp-api.vg-stuff.com/interact, sends one InteractObject, and aggregates every streamed ChunkMessage (chunk / debug / action / metadata / sync_chat_history) into one MCP response. Authentication uses the same Authorization: Bearer <WORKSPACE_SECRET> header as REST.

Required: agentId, convoId.

Common optional:

  • prompt — User message. Special values: "start" (initial greeting), "@cancel:<reason>", "@rewind:<nodeId>" (v2/node agents).

  • bucket — voiceglow-eu or (default). Auto-derived from CONVOCORE_API_REGION (eu-gcp → voiceglow-eu, na-gcp → (default)); only override to deliberately cross regions.

  • messageType + visualPayload — for image turns.

  • replyTo — reply context for a previous message.

  • lightConvoData — userName, userEmail, userPhone, origin, capturedVariables, etc. Surfaced into the agent's system prompt where supported.

  • agentData / workspaceData / turnsHistory — overrides that skip Firestore loads.

  • disableUiEngine, disableRecordHistory, v2, isTest, isLLMStudio, kbPreview, agentProfileId, toolTest, formSubmissionMetadata, initNodesOptions — same flags as the underlying EWSInteractModel.

  • timeoutMs (default 120000, max 600000) — how long the MCP waits for the streamed turn before forcing the WebSocket closed.

  • raw (default false) — when true, the response includes every raw streamed chunk; when false, only the aggregated text + actions + metadata + final turns are returned (cheaper on tokens).

Response shape (default raw: false):

{
  "assistantText": "...",
  "uiEngineEnabled": false,
  "uiEngineSnapshot": null,
  "uiEngineSummary": [],
  "actions": [],
  "metadata": { "inputTokens": 0, "outputTokens": 0, "llmUsed": "...", "sources": [], "turns": [] },
  "turns": [],
  "closeCode": 1000,
  "closeReason": "",
  "durationMs": 1234,
  "timedOut": false,
  "chunkCount": 17
}

UI Engine handling

When the agent has vg_enableUIEngine: true (and the request did not pass disableUiEngine: true), the server streams JSON-stringified TurnProps snapshots instead of plain text. UI Engine snapshots are overwriting (each chunk is a full snapshot of the bot turn so far) — interact_with_agent parses them, keeps only the latest snapshot as uiEngineSnapshot, and produces a compact uiEngineSummary for quick scanning:

{
  "assistantText": "",
  "uiEngineEnabled": true,
  "uiEngineSnapshot": {
    "from": "bot",
    "ts": 1719931200,
    "messages": [
      { "from": "bot", "type": "text",   "item": { "type": "text",   "payload": { "message": "Pick one:" } } },
      { "from": "bot", "type": "choice", "item": { "type": "choice", "payload": { "buttons": [ { "name": "Pricing", "request": { "type": "text", "payload": { "message": "Tell me about pricing" } } } ] } } }
    ]
  },
  "uiEngineSummary": [
    { "index": 0, "type": "text",   "summary": "Pick one:",                 "webChannelOnly": false },
    { "index": 1, "type": "choice", "summary": "1 button: Pricing",         "webChannelOnly": false }
  ],
  "...": "..."
}

The eight UI Engine message types are text, choice, visual, cardV2, carousel, iFrame, form, input. form and input are emitted only on web channels (web-chat / text origin). Call get_ui_engine_spec before testing or building UI-Engine-enabled agents to load the full schema.

Cost note: every call runs a real agent turn (LLM + voice + tools) and consumes Convocore credits exactly like a normal chat. It is not a dry-run.

UI Engine spec tool

get_ui_engine_spec — Returns the full Convocore UI Engine schema. Static knowledge, no API call, no credits.

  • Required: none.

  • Optional: section — "all" (default) | "meta" | "envelopes" | "message_types" | "shared" | "rules" | "checklist" | "primer".

  • Optional: messageType — "text" | "choice" | "visual" | "cardV2" | "carousel" | "iFrame" | "form" | "input". When set, returns just that message-type schema (overrides section).

Use this BEFORE:

  1. Validating output from interact_with_agent against a UI-Engine-enabled agent.

  2. Creating / updating an agent whose system prompt should teach the model to emit UI Engine messages — bake the relevant rules and messageType shapes into nodes[0].instructions.


Convocore concepts: nodes and prompts

  • Each node can represent a step in a workflow.

  • The first node (nodes[0]) holds the primary instructions (instructions field) that define default agent behavior.

  • light mode (agent flag): described in-tool as no chat history retention for privacy.


Errors and validation

  • Invalid tool arguments: Zod validation fails → error with Invalid arguments: ….

  • Unknown tool name: thrown as Unknown tool: ….

  • API errors: thrown with the message from the JSON body when available.

  • Startup: missing WORKSPACE_SECRET → configuration error before the server connects.


Natural language examples (for end users)

After configuration, users can ask their assistant things like:

  • “List all my Convocore agents” → list_agents

  • “Create an agent for this website from scratch” → create_agent_from_template (preferred default)

  • “Export all conversations for agent … as CSV” → export_all_conversations

  • “Add many hotel/site pages to the KB” → create_kb_from_urls (KB router scrapes; do not web-fetch first)

  • “Add one URL / sitemap to the KB” → create_kb_doc with sourceType: url|sitemap + scrapeContent: true

  • “Are these image/page links dead?” → scrape_url with mode: "check" + urls: [...]

  • “Scrape one URL for branding (colours/favicon)” → scrape_url with mode: "scrape"

Exact tool choice and arguments are up to the host model; the tool descriptions in src/index.ts are what the model sees.


Docker

docker pull moe003/convocore-mcp:latest

Common tags (see Docker Hub for current list): latest, version tags such as 2.0.0 / 1.0.x as published by the maintainer.

Build locally:

docker build -t moe003/convocore-mcp:latest .

Docker Compose

The included docker-compose.yml runs the image with stdin open for MCP-style use. Set WORKSPACE_SECRET and optionally CONVOCORE_API_REGION in your environment or an .env file beside the compose file. Authentication is WORKSPACE_SECRET only (no separate API key variable is read by the server).


Development

Command

Action

pnpm install

Install dependencies

pnpm run build

Run tsc → dist/ and chmod the bin

pnpm run dev

tsc --watch

Dependencies: @modelcontextprotocol/sdk, zod, plus file-reader stack (mammoth, pdf-parse, xlsx, sharp, mime-types). Dev: typescript, @types/node, shx.

Publish to npm (maintainers)

pnpm install
pnpm run build
pnpm pack --dry-run     # sanity check the tarball
pnpm publish --access public

prepublishOnly re-runs the build automatically. Only dist/, README.md, and LICENSE are shipped (controlled by the files field in package.json).

Push Docker image (maintainers)

docker push moe003/convocore-mcp:latest

Telemetry

Like Next.js, convocore-mcp collects anonymous usage data to learn which tools are used and where they fail. It is on by default.

What is sent, per tool call: the tool name, whether it succeeded, a short error category (e.g. input_validation_error) plus, for failures only, a short error message with emails, URLs, IDs and numbers removed, the action of action-based tools (e.g. assign_to_agent), how long it took, the MCP client name and version (e.g. Claude Desktop, Cursor), the convocore-mcp version, Node.js version, OS platform, and a random id for the current server process.

What is never sent: tool arguments, tool results, prompts, agent content, contacts, conversations, or any file contents.

Events are batched and sent to the Convocore API in your own region (<base URL>/mcp/telemetry), authenticated with your workspace secret, so they are tied to your workspace and nothing else. Sending happens in the background and never slows down or fails a tool call.

Opt out by setting either variable in your MCP config's env:

"env": {
  "WORKSPACE_SECRET": "...",
  "CONVOCORE_TELEMETRY": "0"
}

DO_NOT_TRACK=1 is respected too. To see exactly what would be sent without sending anything, set CONVOCORE_TELEMETRY_DEBUG=1; events are printed to stderr.

The hosted server at mcp.convocore.ai runs on Convocore infrastructure and records the same events.


Contributing and license

Contributions are welcome via pull request.

MIT License — see the LICENSE file.



Built for the Convocore community.

Available Tools

145 tools
add_conversation_noteAInspect

Add a note to a conversation's notes timeline (visible to the workspace team and clients in the dashboard). Recorded in the workspace Logs with who, IP and time. Max 5000 characters. Prefer this over update_conversation, which cannot change notes.

NameRequiredDescriptionDefault
textYesThe note text (max 5000 characters).
agentIdYesThe agent ID
convoIdYesThe conversation ID
authorNameNoLabel for who is acting, e.g. "Claude via MCP". Only used because API-key calls have no signed-in person; it is shown on the note and in the audit log.

TDQS

A4.2/5.0
Behavior4/5

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

Goes well beyond the annotations: discloses that notes are client-visible in the dashboard, that the action is recorded in workspace Logs with who/IP/time, and the 5000-character cap. That audit-trail and visibility detail is the kind of side-effect context annotations cannot convey. It does not say what the call returns or whether repeated identical calls create duplicates (annotations already flag idempotentHint=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?

Three short sentences, front-loaded with the action, then side effects, then the alternative — no filler. The character limit is the only near-redundant clause, and it functions as a guardrail reminder.

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-purpose mutation with no output schema and 100% schema coverage, the definition supplies the crucial missing pieces: visibility, audit logging, and size limit. Only the return value/shape and permission requirements are left implicit.

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 every parameter, including the nontrivial authorName explanation, is documented in the schema itself. The description only restates the 5000-character limit already present in the text property, adding no new semantics. 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 and resource — 'Add a note to a conversation's notes timeline' — and immediately scopes the audience (workspace team and clients). An agent can distinguish it from list_conversation_notes, update_conversation_note, and delete_conversation_note 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 Guidelines4/5

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

Explicitly routes away from update_conversation with the reason ('cannot change notes'), which is exactly the comparative guidance an agent needs. It stops short of distinguishing this add path from update_conversation_note (creating a new note vs. editing an existing one), leaving one inference for the agent.

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

agency_brandingA
Destructive
Inspect

Brand the caller's own whitelabel agency (client portal + login page), like the dashboard Agency settings. Never another agency; whitelabel clients cannot use it. get: current branding, login page and domain status (secrets and provider keys are never returned). update_branding { branding }: only the fields sent change — name, logoUrl (round avatar), darkLogoUrl, wideLogoUrl, wideLogoDarkUrl, faviconUrl, brandingText (markdown), primaryColorHex (#RRGGBB, builds the whole palette), themeType (light | dark), themeVariant (default | bordered | flat | faded), themeColorUsage (gradient | colorful | plain), googleFontStack (Google Fonts families in fallback order, e.g. ["Rubik","Almarai"] = Rubik for Latin/digits, Almarai for Arabic), googleFontWeights (default [400,500,700]), customCSS, defaultLanguage (e.g. "ar" — also sets right-to-left), allowedLanguages, mainWebsite, supportEmail, tosPage, privacyPolicyPage, enableClientSignup, disablePasswordLogin. All URLs must be https. update_login_page { loginPage }: merges into the login page — layout (centered | split), mediaSide (start | end: logical, start = left in LTR / right in RTL), mediaUrl, mediaFit (cover | contain), headline (≤120), subtext (≤300), textPlacement (overlay | below), background { type: theme | color | gradient | image, color, from, to, angle 0-360, imageUrl }, card { style: elevated | bordered | flat | glass, radius: sm | md | lg }, mobileMedia (stack | hide), logo (square | wide | none). Split layout without mediaUrl shows a gradient from the primary colour. reset: true clears it. upload_asset { kind, sourceUrl | base64 }: copies an image onto the Convocore CDN and returns its URL (then pass it to update_branding / update_login_page). kinds: logo, dark_logo, wide_logo, wide_logo_dark (≤1 MB png/jpg/webp/svg), favicon (≤256 KB png/ico/svg), login_media, login_background (≤2 MB webp/png/jpg/svg). Custom domains are claimed and verified on the dashboard only. Confirm the brand values with the user before changing a live portal. Actions: get — current branding, login page and domain status | update_branding — change logos, colour, fonts, language, CSS, links, signup/login options Needs: branding. | update_login_page — customise the client login page (layout, media, text, background, card) | upload_asset — put a logo / favicon / login image on the CDN and get its URL Needs: kind.

NameRequiredDescriptionDefault
kindNoFor upload_asset.
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
resetNoFor update_login_page: clear the login page customisation.
actionYes
base64NoFor upload_asset: the image as base64 (alternative to sourceUrl).
brandingNoFor update_branding: only the fields to change.
loginPageNoFor update_login_page: only the login page fields to change (merged).
sourceUrlNoFor upload_asset: public https URL of the image.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations flag the whole tool as destructive, but the description decomposes behaviour per action: get is a safe read that never returns secrets or provider keys, update_* are partial merges where only sent fields change, reset clears the login page, and upload copies to the CDN with stated per-kind size/format limits. It also adds the operational caveat "Confirm the brand values with the user before changing a live portal" and the https-only URL rule, none of which are in the annotations.

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

Conciseness3/5

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

The core block is front-loaded and information-dense, but it is a single semicolon-chained paragraph, and the trailing "Actions: ..." list then restates the same behaviours already described, duplicating several sentences. The tool is genuinely complex, yet roughly a third of the text is repetition.

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 all four actions, their merge vs replace semantics, the prerequisite that assets must be uploaded before being referenced, and what upload_asset returns. With no output schema, it could say slightly more about what get hands back beyond "domain status", but an agent has enough 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?

Schema coverage is already 88%, so the schema carries most of the weight, but the description adds real meaning: font fallback order with a worked example (["Rubik","Almarai"] = Latin vs Arabic), primaryColorHex building the whole palette, mediaSide being logical (start = left in LTR, right in RTL), and the split-layout gradient fallback when mediaUrl is absent. Upload size limits (≤1 MB, ≤256 KB, ≤2 MB) are stated only here, not in the schema.

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

Purpose5/5

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

The opening sentence gives a concrete verb and resource: "Brand the caller's own whitelabel agency (client portal + login page)", then anchors it to the dashboard equivalent. The scope constraint "Never another agency; whitelabel clients cannot use it" separates it from the generic agency_read/agency_write siblings.

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

Usage Guidelines4/5

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

Each action is given a use case (get for current state, update_branding for logos/colour/fonts, upload_asset before passing URLs to the update actions), and two exclusions are stated: other agencies and custom domains, which go through the dashboard. It stops short of naming agency_write as the alternative route for other agencies, so the routing is inferred rather than explicit.

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

agency_readA
Read-onlyIdempotent
Inspect

Get the current agency account for this workspace secret (raw document). For branding (logo, colours, fonts, language, login page) use agency_branding get — it is typed and never returns secrets. Distinct from orgs_read (child organizations) and clients_read (end-user client accounts).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds real value by flagging that this returns a 'raw document' and contrasting with agency_branding which 'never returns secrets' — implying this one may expose sensitive data. It stops short of stating what fields or how sensitive, so not 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 compact clauses, front-loaded with the core action and scope, then the alternative and the disambiguations. No redundant restatement of the title 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?

No output schema exists, and the description tells the agent it returns a 'raw document', which is enough to set expectations. A hint about the document's shape or secret exposure would make it complete, but nothing needed to invoke the 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?

Zero parameters, so the baseline is 4. The description usefully clarifies that the implicit input is 'this workspace secret', which frames how the tool is scoped even with an empty 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 ('Get the current agency account') and immediately scopes it to 'this workspace secret (raw document)'. It explicitly names the siblings it is not — agency_branding, orgs_read, clients_read — so an agent can distinguish it 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?

Explicitly routes the agent: use agency_branding when the goal is branding (logo, colours, fonts, language, login page), and notes it is typed and never returns secrets. It also distinguishes the tool from orgs_read (child organizations) and clients_read (end-user accounts), covering the main ambiguity cases.

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

agency_writeA
Destructive
Inspect

Create (upsert with a name) or delete the agency account. To brand it (logo, colour, fonts, language, login page, assets) use agency_branding instead — it validates fields. Domain claims, verification flags, secrets and provider keys cannot be changed here (domains are verified on the dashboard). For org/client CRUD use orgs_write / clients_write.

NameRequiredDescriptionDefault
actionYes
agencyNoAgency fields for upsert (passthrough object).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds useful behavior beyond them: upsert requires a name, branding fields are validated elsewhere, and certain fields are immutable here. It does not describe return values or deletion permanence, but annotations already flag destructive behavior.

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

Conciseness5/5

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

The description is front-loaded with the core action and uses the remaining sentences for high-value routing and field constraints. Every sentence earns its place, with no redundant restatement of the tool name 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?

Given the destructive annotation and absence of an output schema, the description covers purpose, alternatives, and key field restrictions well. The main remaining gap is that the nested agency payload is still not fully described, though the critical field exclusions are stated.

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

Parameters3/5

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

Schema coverage is 50%, and the description clarifies that the action supports upsert/delete and that upsert needs a name. However, the agency object is a passthrough with a vague schema description, and the description lists what cannot be changed rather than enumerating allowed agency fields.

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 gives a specific verb and resource: create/upsert or delete the agency account. It clearly distinguishes this tool from agency_branding, orgs_write, and clients_write, so an agent can identify its role 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 Guidelines5/5

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

It explicitly routes branding work to agency_branding and org/client CRUD to orgs_write / clients_write. It also states exclusions such as domain claims, verification flags, secrets, and provider keys, which are not changeable here.

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

agent_backups_readA
Read-onlyIdempotent
Inspect

Read the backups and prompt history of an agent. Check here before a risky change, or to find a version to go back to. Actions: list — saved backups (id, date, author) | latest — the most recent backup | prompt_history — prompt-assistant history with the prompt snapshots that can be restored

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
actionYes
agentIdYes

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds the return-field hints for 'list' (id, date, author) and the restorability note for prompt_history, but says nothing about the 'mode' tradeoff (truncation vs full payload) or about pagination/size limits.

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

Conciseness5/5

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

Purpose is front-loaded in the first clause, followed by usage guidance and a compact action legend. No filler sentences; every element earns its place.

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

Completeness4/5

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

With no output schema, the description usefully sketches what each action returns. Minor gap: nothing about agentId scope or the size implications of 'mode', which matter for a read tool that can return bulky blobs.

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 33%, but the description compensates by defining what each action value yields ('latest — the most recent backup', 'prompt_history — ... snapshots that can be restored'). It leaves 'mode' to the schema (which documents it fully) and adds nothing for agentId, so it stops short of perfect.

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 ('Read') and resource ('backups and prompt history of an agent'), and the enumerated actions make the scope concrete. It is clearly distinguishable from the sibling agent_backups_write.

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 explicit usage context: 'Check here before a risky change, or to find a version to go back to.' That names the trigger conditions well, though it never explicitly points to the write sibling as the alternative for restoring.

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

agent_backups_writeA
Destructive
Inspect

Back up or roll back an agent. Take a backup (create) BEFORE large edits with update_agent. restore and revert_prompt overwrite the current agent — confirm with the user and create a backup first. Actions: create — save a backup of the agent as it is now | restore — replace the agent with a saved backup Needs: backupId. | revert_prompt — put back an earlier version of the prompt only Needs: snapshotId. | set_prompt_caching — turn provider prompt caching on or off (cheaper, faster replies for long prompts) Needs: enabled.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
actionYes
agentIdYes
enabledNoFor set_prompt_caching.
backupIdNoFor restore (from agent_backups_read list).
snapshotIdNoFor revert_prompt (from prompt_history).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and readOnlyHint=false, but the description adds substantive detail the annotations cannot convey: which action overwrites the whole agent (restore) versus only the prompt (revert_prompt), that create captures the agent 'as it is now', and that set_prompt_caching affects cost/latency. It stops short of stating permissions, reversibility of a restore, or what a successful response returns.

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 warning about destructive overwrites is front-loaded, followed by a compact pipe-delimited action catalogue — no filler sentences. The single run-on caution sentence is dense but every clause carries distinct operational meaning.

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 6-parameter, destructive, no-output-schema tool, the description covers action semantics, prerequisites, ID sources, and user-confirmation requirements. The only omission is the 'mode' parameter's relevance to this tool's responses, which is a minor gap.

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 67%, and the description compensates well for the undocumented action and agentId fields by mapping each action to its required ID (backupId for restore, snapshotId for revert_prompt, enabled for set_prompt_caching). The one gap is 'mode', which is documented only in the schema and never mentioned in the description.

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

Purpose5/5

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

The opening line states a specific verb pair and resource ('Back up or roll back an agent') and then enumerates all four actions with one-line summaries. It also differentiates from siblings by naming update_agent as the tool whose edits precede a backup and pointing to agent_backups_read / prompt_history as the sources of the required IDs.

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 sequencing guidance ('Take a backup BEFORE large edits with update_agent') and an explicit caution for the destructive actions ('confirm with the user and create a backup first'). The action list tells the agent exactly which action to pick for each goal, with no reliance on inference.

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

assign_conversationBInspect

Assign a conversation to a user for manual delegation

NameRequiredDescriptionDefault
agentIdYesThe agent ID
convoIdYesThe conversation ID
delegatedByNoOptional: ID of user delegating
assignToUserIdYesUser ID to assign to

TDQS

B3.4/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true, so the mutation and non-idempotency profile is already known. The description adds that this is a delegation action, but says nothing about permission requirements, whether prior assignment is overwritten, or what the caller gets back—gaps that matter for a mutation with 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?

A single ten-word sentence that front-loads the action and resource with no filler. Conciseness is good, though brevity here borders on under-specification.

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

Completeness3/5

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

The tool has 4 parameters and no output schema, and the description omits the response shape, permission needs, and reassignment behavior. With annotations covering the safety profile and the schema covering parameters, the definition is adequate but leaves real operational 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 description coverage is 100%, so agentId, convoId, delegatedBy, and assignToUserId are all documented in the schema. The description only implies assignToUserId meaning via 'to a user'; it adds no format, constraints, or semantics about delegatedBy beyond what the schema says. Baseline 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 verb (assign) and resource (conversation), and adds the target (a user) plus intent (manual delegation). It is clearly distinguishable from siblings like update_conversation or send_handoff_reminder, though it doesn't explicitly name the closest alternative.

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?

'For manual delegation' implies the usage context, but there is no explicit when-to-use guidance, no prerequisites (e.g., the conversation must exist, the user must be in the workspace), and no comparison to the many sibling conversation tools.

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

bulk_create_kb_docsAInspect

Create up to 20 KB documents in one request. For many website URLs prefer create_kb_from_urls. For a single doc use create_kb_doc.

NameRequiredDescriptionDefault
docsYes
agentIdYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true, so the safety and idempotency profile is covered. The only added detail, the 20-item cap, is already in the schema via maxItems=20; nothing is said about partial-batch failure, per-item error handling, or whether URL/sitemap sources are fetched asynchronously. Adequate but not additive.

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 short sentences with zero filler; the capability and its constraint come first, then the sibling routing. Every clause earns its place and nothing is padded.

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 batch mutation with a nested item schema, 0% schema description coverage, and no output schema, the description omits everything an agent would want before calling: how results are reported for 20 items, what happens if some docs fail, and what each doc object field means. The routing to siblings is complete, but the invocation-side context is thin.

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 0%, so the description must carry parameter meaning and does not: it never explains that `docs` is an array of objects requiring at minimum a `name`, nor what `sourceType` (doc/url/sitemap), `urls`, `content`, `tags` or `metadata` do. It also says nothing about `agentId`, the required target. The only hint is the phrase "up to 20", which merely restates maxItems.

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 ... KB documents") plus the scope of the operation ("up to 20 ... in one request"). The two following sentences explicitly name the sibling tools it is not, so an agent can distinguish it from create_kb_doc and create_kb_from_urls 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 routing rules: many website URLs → create_kb_from_urls; a single doc → create_kb_doc. Both the when-to-use-this and the when-to-use-something-else cases are covered, leaving nothing to inference.

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

bulk_delete_kb_docsA
DestructiveIdempotent
Inspect

Delete many KB documents in one call (POST .../kb/delete). Prefer over looping delete_kb_doc. Destructive and irreversible.

NameRequiredDescriptionDefault
docIdsYes
agentIdYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known; the description's 'Destructive and irreversible' mostly restates that, though 'irreversible' adds a nuance beyond the hint. It says nothing about partial-failure behavior, batch limits, or required permissions, which matter for a bulk 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?

Three short clauses: action, endpoint, alternative preference. Nothing is wasted and the destructive warning is not buried.

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 destructive bulk operation with no output schema and zero parameter documentation, the definition covers the essentials (what it does, that it is irreversible, which sibling it replaces) but omits batch size limits, partial-success semantics, and auth requirements an agent would want before firing it.

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 0%, so the schema gives only names and types for docIds and agentId. The description adds no semantics for either — no mention of what agentId scopes, whether all docIds must belong to it, or how missing/invalid IDs are handled.

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 with its bulk scope ('Delete many KB documents in one call') and even names the endpoint. It is immediately distinguishable from the singular delete_kb_doc sibling.

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?

'Prefer over looping delete_kb_doc' explicitly names the alternative and the condition that selects this tool. It does not state any when-not cases (e.g. single-doc deletion threshold or size limits), so it falls 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.

call_logs_readA
Read-onlyIdempotent
Inspect

Read voice call logs of the workspace (web, inbound and outbound calls). Actions: list (filter by agent, type, phone numbers, date range, search; paginated), get (one call by callLogId — transcript and latency data only with mode="full"), export (JSON or CSV of many calls; includeTranscripts=true to add transcripts). Chat conversations are in list_conversations, not here.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
pageNo
typeNo
limitNoList page size, default 20, max 100.
actionYes
formatNoFor export. Default json.
searchNo
agentIdNo
maxRowsNoFor export. Default 1000, max 5000.
startToNoISO datetime.
callLogIdNoRequired for get (UUID).
sessionIdNo
startFromNoISO datetime, e.g. "2026-10-01T00:00:00.000Z".
agentPhoneNo
callLogIdsNoFor export: only these call log ids.
customerPhoneNo
includeTranscriptsNoFor export. Default false.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: latency and transcript data on get are only available with mode="full", and transcripts on export require includeTranscripts=true — both are non-obvious side effects an agent would otherwise miss. It stops short of describing output shape or pagination termination behavior.

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 compact parenthetical clauses, one per action, with the sibling-routing exclusion front-loaded at the start and end. Dense but every clause carries information; the nested quoting around mode="full" makes it slightly harder to scan than it could be, but nothing is wasted.

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 17-parameter branching tool with no output schema, the description covers the essential decision surface: what each action does, which options are action-specific, and where not to look. Missing is the per-action parameter applicability matrix and any note on what a call log record contains beyond transcript/latency, which would be needed for full completeness.

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 17 parameters and only 53% schema coverage, the description usefully maps the filter families (agent, type, phone numbers, date range, search) and pins down the mode/action interaction ("transcript and latency data only with mode="full"") plus export options. It does not resolve which filters apply to which action — e.g. whether page/limit are honored during export or whether search is list-only — leaving a meaningful gap on a 17-param tool.

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?

Opens with a specific verb and resource ("Read voice call logs of the workspace") and immediately delimits scope with the call types (web, inbound, outbound). It also names the sibling it excludes — "Chat conversations are in list_conversations, not here" — so an agent can separate it from the conversation tools 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?

The three actions are given with the conditions that select them: list with filters and pagination, get with a callLogId for a single call, export for many calls in JSON/CSV. It also states the routing rule to the alternative tool for chat data, which is exactly the when-not guidance an agent needs.

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

call_logs_writeA
Destructive
Inspect

Create, edit or delete a call log record. Actions: create (callLog needs agent_id, type web|inbound|outbound, start_time ISO, agent_phone_number and customer_phone_number — null for web calls), update (callLogId + callLog with only the fields to change; agent_id and start_time cannot change), delete (callLogId; permanent). This edits records only — to place a call use start_outbound_call.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
actionYes
callLogNoCall log fields (snake_case, as returned by call_logs_read).
callLogIdNoRequired for update / delete.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations cover the safety profile (destructive, non-idempotent, openWorld), but the description adds what annotations cannot: delete is permanent, agent_id and start_time are immutable on update, and phone numbers are null for web calls. That is the field-level consequence data an agent needs before mutating.

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 verb/resource, then per-action parentheticals in a predictable order. The parenthetical for create is dense and multi-clause, but no sentence is filler — the one candidate for trimming is the schema-redundant 'callLogId; permanent' phrasing.

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 destructive, non-idempotent mutation over a nested object with no output schema, the description covers required fields, immutability, permanence, and the sibling alternative. What it leaves unstated is what a create/update returns and how the 'mode' parameter interacts with these writes.

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 75% and the nested callLog object has no documented properties, so the description carries real weight: it names the required create fields, the enum values for type, the ISO format for start_time, and the null rule. It omits any mention of the 'mode' toggle, which is documented in the schema but never connected to these operations.

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 the exact verb set and resource (create/edit/delete a call log record) and immediately contrasts with the sibling that could be confused for it (start_outbound_call). An agent can distinguish this from call_logs_read and start_outbound_call 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 per-action guidance (what create needs, what update accepts, that delete is permanent) and an explicit exclusion: 'This edits records only — to place a call use start_outbound_call.' The one ambiguity an agent would have is resolved in-line.

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

campaigns_readA
Read-onlyIdempotent
Inspect

Read outbound call campaigns of an agent. Actions: list (paginated, with progress counters: totalLeads, contactedLeads, successfulCalls, missingCalls, onGoingCalls), get (one campaign by campaignId). To change campaigns use campaigns_write. WhatsApp broadcast campaigns are not covered.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
pageNo
limitNoDefault 10.
actionYes
agentIdYes
campaignIdNoRequired for get.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so safety is covered. The description adds useful context beyond that: list is paginated and returns progress counters (totalLeads, contactedLeads, successfulCalls, missingCalls, onGoingCalls), which tells the agent what to expect from a read. It stops short of describing pagination limits or token/response size behavior.

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 clauses, front-loaded with the core purpose, followed by the action breakdown and then the routing/exclusion note. No filler sentences.

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 helpfully names the return counters for list, and the pagination and mode behavior are covered by the schema. Remaining gap: agentId is required yet its role and whether it scopes the list vs. identifies the campaign owner is unstated, and page indexes are undocumented.

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

Parameters3/5

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

Schema coverage is 50%: mode and campaignId are documented in the schema, while action, agentId and page are bare. The description compensates for action by explaining the list/get semantics and ties campaignId to get, but says nothing about agentId (required for both actions) or page. Baseline 3 is appropriate given partial schema support.

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 ('Read outbound call campaigns of an agent') and enumerates both actions with what each does. It is immediately distinguishable from campaigns_write and whatsapp_campaigns_read, both of which are named or explicitly excluded.

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 routes writes to campaigns_write and declares a clear exclusion ('WhatsApp broadcast campaigns are not covered'), so the agent knows both when to use this tool and when to look elsewhere. The list/get split is also spelled out inline.

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

campaigns_writeA
Destructive
Inspect

Create, edit, delete, start/stop or restart an outbound call campaign. Actions: create (campaign needs name + leadGroupName; created stopped unless enabled is true), update (partial: send only the fields to change in campaign), delete, enable (START dialing — places real phone calls to the lead group; resumes where it stopped), disable (stop), restart (start again from the first lead; resetConversations=true also clears earlier call conversations). Campaign fields: name, leadGroupName (a lead group name, or "all"), delayBetweenEachCall (seconds), concurrentSlots, initialPrompt, overrideInitialPrompt, postCallPrompt, postCallMetrics (custom metric ids), openTime / closeTime ("HH:mm" 24h), openDays (monday…sunday), timezone (IANA). The agent needs an assigned phone number before a campaign can start.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
actionYes
agentIdYes
campaignNoFor create / update. name, leadGroupName (a lead group name, or "all"), delayBetweenEachCall (seconds), concurrentSlots, initialPrompt, overrideInitialPrompt, postCallPrompt, postCallMetrics (custom metric ids), openTime / closeTime ("HH:mm" 24h), openDays (monday…sunday), timezone (IANA).
campaignIdNoRequired for every action except create.
resetConversationsNoFor restart. Default false.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true, openWorldHint=true and non-idempotent, but the description adds material context those annotations cannot convey: that 'enable' dials real phone numbers, that restart resets to the first lead, that resetConversations=true erases earlier call conversations, and that newly created campaigns are stopped by default. That is exactly the kind of side-effect disclosure an agent needs before invoking a destructive mutation.

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 most decision-relevant information (action list and per-action behavior) is front-loaded in the opening sentence, and the compact parenthetical style keeps a lot of detail dense. Minor waste comes from restating the campaign field list that already exists verbatim in the input schema.

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 destructive, nested-object, six-parameter tool with no output schema, the description covers actions, prerequisites and side effects well. It does not mention the 'mode' parameter's compact/full output behavior or say anything about what the call returns, which leaves a small but real gap 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.

Parameters4/5

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

Schema coverage is 67%, and the description explains the semantics of every action enum value plus resetConversations and the campaign field set (including non-obvious values like leadGroupName='all' and HH:mm formats). It does add meaning beyond the schema, though the campaign field list is largely duplicated from the schema's own campaign description rather than extended.

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 set of verbs (create, edit, delete, start/stop, restart) operating on a precisely named resource (outbound call campaign). An agent can immediately distinguish this from campaigns_read, which is the read-only sibling.

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?

Each action is given its own operational semantics: create requires name + leadGroupName and starts stopped unless enabled=true; update is partial; enable places real calls and resumes from where it stopped; restart begins from the first lead. It also states the prerequisite that the agent needs an assigned phone number before starting. The only gap is that it never explicitly routes the agent to campaigns_read for listing/reading.

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

check_twilio_numberAInspect

Repair / re-sync the Twilio SMS/voice webhook configuration for a number (useful when call/SMS routing breaks). This does not check WhatsApp Cloud API health. Pass the full request body for /utils/twilio/check-number as an object — typically includes phoneNumber or phoneNumberSid.

NameRequiredDescriptionDefault
payloadYesFull request body object for /utils/twilio/check-number.

TDQS

A3.9/5.0
Behavior3/5

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

The annotations already disclose that this is a non-read-only, non-destructive, non-idempotent, open-world operation. The description adds useful context that it repairs/re-syncs webhook configuration, but it does not explain side effects, what existing configuration may be overwritten, or what the result looks like. With annotations covering the safety profile, this is adequate but not rich.

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

Conciseness5/5

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

The description is front-loaded, compact, and every sentence adds useful information. It covers purpose, usage context, exclusion, and payload expectations without unnecessary repetition.

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 mutation tool with annotations and no output schema, the description gives enough information to invoke it correctly: purpose, timing, exclusion, and expected payload fields. It is only slightly incomplete because it does not describe return behavior or side effects in more detail.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description goes further by explaining that the payload is the full request body for /utils/twilio/check-number and typically includes phoneNumber or phoneNumberSid, which adds practical guidance beyond the schema's generic object definition.

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 a specific action: repair / re-sync the Twilio SMS/voice webhook configuration for a number. It also distinguishes the tool from WhatsApp Cloud API health checks. However, it does not distinguish this from the sibling sync_sms_twilio_number tool, which could otherwise seem related.

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 gives a clear usage context: use it when call/SMS routing breaks. It also includes an exclusion by stating it does not check WhatsApp Cloud API health. It does not, however, mention alternatives such as sync_sms_twilio_number, import_twilio_number, or release_twilio_number.

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

clients_readA
Read-onlyIdempotent
Inspect

Read Convocore client accounts (end-user workspaces under an agency/org). Actions: list, get, check_email. For action=list, default mode=compact (id/name/email/orgId). Use mode=full only when you need complete client objects; prefer action=get for one client. Not for organizations (use orgs_read) or CRM leads (use leads_read).

NameRequiredDescriptionDefault
modeNocompact (default): short summary fields only — token-cheap. full: complete API objects (heavy). Prefer get_* for one item.
pageNo
emailNoFor check_email.
orgIdNoOptional filter for list / check_email.
actionYes
clientIdNo
pageSizeNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, which covers the safety profile. The description adds useful behavioral context about cost: compact is token-cheap with named fields (id/name/email/orgId), while full is heavy. It doesn't describe pagination behavior, but it adds real value beyond the annotations.

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

Conciseness5/5

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

Roughly three sentences, front-loaded with the verb+resource and actions, followed by mode guidance and the sibling exclusions. Every sentence carries distinct value with no waste.

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

Completeness4/5

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

No output schema exists, so the description should describe return shape; it does so partially (compact fields named, full objects heavy). For a 7-param read tool it is nearly complete, with only pagination and clientId usage left to the schema.

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

Parameters3/5

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

Schema description coverage is only 43%, so the description must compensate. It covers mode defaults and the compact field set, plus steering from list to get for single records, but leaves page, pageSize, clientId, and the orgId filter (only in schema) largely unexplained in the description.

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

Purpose5/5

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

The description states a specific verb (Read) and resource (Convocore client accounts), clarifies the entity as end-user workspaces under an agency/org, and enumerates the three actions (list, get, check_email). It also explicitly distinguishes the tool from its nearest siblings: 'Not for organizations (use orgs_read) or CRM leads (use leads_read).'

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 when-to-use guidance: default mode=compact for list, mode=full only when complete objects are needed, and prefer action=get for a single client. It also states when NOT to use it (orgs, leads) and points to the alternatives.

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

clients_writeA
Destructive
Inspect

Create/update/delete whitelabel client accounts (people who log into the client portal). Actions: create, update, delete. clientData fields are listed and described in the schema: login (email, dashboardPassword), which agents they see (widgetIDs), portal tabs (canAccess), channels / integrations they may use, org membership, permissions and notifications. For reads use clients_read.

NameRequiredDescriptionDefault
actionYes
clientIdNoRequired for delete; recommended for update.
clientDataNoClient fields for create/update (from the main ClientModelSchema; IDs, owner and timestamps are set by the server). create needs at least name and email; update sends only the fields to change.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and non-idempotency, so the safety profile is carried structurally. The description adds that IDs/owner/timestamps are server-set and that create requires name+email, but it never explains what a delete removes (login only? conversations, leads?) — the main behavioral question for a destructive tool.

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

Conciseness5/5

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

Two dense sentences: the first states the scope and the action set, the second maps the field groups and closes with the read-tool pointer. No filler and the routing information is placed last where it is easy to find.

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 three-parameter mutation tool with annotations covering safety and no output schema, the description covers actions, required fields, field inventory, and the read alternative. The remaining gap is delete semantics and partial-update behavior details, which keep it short of 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?

Schema coverage is 67%, so the schema already documents most fields; the description adds value by grouping clientData into recognizable clusters (login, widgetIDs, canAccess, channels/integrations, org membership, permissions, notifications). It does not clarify the clientId requirement nuances or the deprecated fields, but it is useful orientation above the 3 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?

Names a specific verb set (create/update/delete) and a specific resource (whitelabel client accounts / portal logins), and explicitly distinguishes itself from clients_read. An agent can tell this is the write counterpart of the read tool 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?

Explicitly routes reads to clients_read and enumerates the three supported actions, plus states create needs at least name and email and update sends only changed fields. It does not spell out when a delete is appropriate versus deactivating via status, so it falls short of full when/when-not guidance.

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

clone_agentAInspect

Clone an existing Convocore agent with optional overrides and carryOver flags (kb, voiceConfig, uiEngineConfig). Never inherits branding or funnel recipients. Prefer this over manually recreating. Distinct from create_agent_from_template / import_agent.

NameRequiredDescriptionDefault
agentIdYesSource agent to clone.
carryOverNo
overridesNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare the mutation profile (readOnly=false, destructive=false, idempotent=false), so the bar is lower. The description still earns credit by disclosing a non-obvious behavioral rule not present in any structured field: the clone never inherits branding or funnel recipients. It does not cover auth requirements or the fact that a new agent identity is produced.

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, front-loaded with the action and its main knobs before the caveats and sibling routing. Every clause carries distinct information.

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

Completeness3/5

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

For a mutation tool with nested objects and no output schema, the description omits what a successful clone returns (presumably a new agent ID) and how the caller should reference the resulting agent afterwards. The inheritance and sibling-routing notes are good, but the post-call picture is incomplete.

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

Parameters3/5

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

Schema coverage is only 33%, but the description surfaces the nested carryOver flag names (kb, voiceConfig, uiEngineConfig) and characterizes overrides as optional, which helps with the nested-object grouping. It does not add range, default, or effect information beyond what the schema already holds — notably the differing defaults (kb=false vs voiceConfig/uiEngineConfig=true) stay 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 and resource ("Clone an existing Convocore agent") and scopes it with the two configurable dimensions (overrides, carryOver flags), naming the three flags. It also explicitly distinguishes itself from create_agent_from_template and import_agent, so the agent can separate it from the two nearest siblings.

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

Usage Guidelines4/5

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

"Prefer this over manually recreating" gives a clear preference, and "Distinct from create_agent_from_template / import_agent" rules out two alternatives by name. What's missing is the discriminating condition — when to clone versus start from a template or an import file — so the choice still requires inference.

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

code_toolsA
Destructive
Inspect

Write, check and run CODE tools: JavaScript that runs inside the agent (no server needed), with declared input and output variables. For tools that call an HTTP API use create_agent_tool. Flow: validate → run with sample inputVars → save. Actions: validate — check syntax and the input/output contract without running Needs: code. | run — run the code once with sample inputs and return outputs / logs / errors Needs: code. | ai_edit — have AI rewrite the code for a request (returns code; does not save) Needs: agentId, code, userRequest. | save — create or update the code tool on the agent Needs: agentId, tool.

NameRequiredDescriptionDefault
codeNoJavaScript source of the tool.
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
toolNoFor save: the tool definition — name, description, variablesIds / fields, and codeExecution: { enabled: true, code }. Include id to update an existing tool.
pathsNoNamed exit paths, if the tool branches.
actionYes
inputsNoDeclared inputs: [{ key, type: string|number|boolean|object, required? }].
strictNoFor validate / run: default true (outputs must match the contract).
agentIdNo
outputsNoDeclared outputs, same shape.
toolNameNo
inputVarsNoFor run: sample values by input key.
userRequestNoFor ai_edit: what to change, in plain words.
toolDescriptionNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is partly covered. The description adds useful action-level behavior: validate does not run code, ai_edit returns code without saving, run returns outputs/logs/errors, and save creates or updates the tool.

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 front-loaded and well structured around the workflow and action list. It is dense but appropriately sized for a multi-action tool, though some phrasing is run-on and could be slightly cleaner.

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 13-parameter tool with nested objects and no output schema, the description covers the essential flow, action requirements, and alternative tool. It does not fully describe return shapes for every action, but it gives enough to call 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?

The schema documents many parameters at 69% coverage, and the description adds action-specific requirements such as code for validate/run, agentId/code/userRequest for ai_edit, and agentId/tool for save. It does not explain every parameter, but it meaningfully clarifies the main action-dependent inputs.

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 gives a specific verb and resource: writing, checking, and running JavaScript code tools that execute inside the agent. It also distinguishes this from create_agent_tool for HTTP API tools, so an agent can tell the two apart without opening both 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?

It gives a clear workflow (validate → run with sample inputVars → save) and names an alternative for HTTP API tools. It also states the required inputs per action, though it does not discuss when not to use save or how this relates to update_agent_tool/delete_agent_tool siblings.

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

contact_leadsAInspect

Call or text a LIST of leads in one go (real calls / real SMS, billed). channel=call queues an outbound call to each lead; channel=sms sends each lead a message (message required unless sendMode=agent). leads are lead objects from leads_read (they must carry a phone, e.g. userPhone). Max 500 per call. Confirm the audience with the user first. For scheduled, throttled dialing use a campaign (campaigns_write).

NameRequiredDescriptionDefault
fromNoFor channel=sms: specific sender number.
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
leadsYes
agentIdYes
channelYes
messageNoFor channel=sms.
optionsNo
sendModeNoFor channel=sms.
campaignIdNo
contactMethodsPriorityNoLead fields to read the phone from, in order. Default ["userPhone", "phone", "userID"].

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare non-read-only, open-world, non-idempotent, non-destructive, so the safety profile is already carried by structured fields; the description adds real value on top with 'real calls / real SMS, billed' (cost/side-effect disclosure), the 500-lead cap, the message-required-unless-sendMode=agent rule, and the audience-confirmation requirement. It does not describe what happens on partial failure or what the response contains, which keeps 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.

Conciseness4/5

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

The audience/cost framing is front-loaded, and the destructive-scale warning (500 cap, confirm with user) sits before the alternative-tool pointer. It is a dense single paragraph, but each clause carries distinct information; only minor formatting (splitting the channel branches) would improve scannability.

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 high-blast-radius, 10-parameter, nested-object tool with no output schema, the description covers the essentials an agent needs to invoke safely: source of leads, per-channel requirements, cost, cap, and confirmation. Gaps are the undocumented options/campaignId parameters and the absence of any return-value expectation, which is a modest hole 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.

Parameters4/5

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

With 10 parameters at 50% schema coverage, the description carries meaningful extra semantics: it explains channel's two modes and their side effects, that message is required unless sendMode=agent, and that leads must be objects carrying a phone field. options, campaignId, and the interaction between from and contactMethodsPriority remain undocumented in both places.

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 (call or text) applied to a specific resource (a list of leads from leads_read) and immediately distinguishes itself from campaigns_write for scheduled/throttled dialing. The channel=call vs channel=sms behavioral split is spelled out, so an agent can tell it apart from send_sms, start_outbound_call, and campaigns_write 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?

Explicit guidance on when to use it (bulk one-shot dialing), when not to (scheduled/throttled → use a campaign), prerequisites (leads must come from leads_read and carry a phone like userPhone), and a hard constraint (max 500 per call) plus an operational rule (confirm the audience with the user first). Nothing 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.

contacts_readA
Read-onlyIdempotent
Inspect

Read contacts (identities): one person recognised across channels (WhatsApp, Instagram, web chat, calls…). A contact groups that person's conversations. Different from leads_read (the CRM lead list). Actions: list — contacts of the agent, with search | get — one contact profile with its channels and consent Needs: identityId. | timeline — every conversation of the contact across channels, in order Needs: identityId. | audit_log — merge / unmerge / consent history of the contact Needs: identityId.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
pageNo
limitNoDefault 20, max 100.
actionYes
searchNo
agentIdYes
identityIdNoContact id (UUID).
multiChannelOnlyNoFor list: only contacts seen on more than one channel.

TDQS

A4.3/5.0
Behavior4/5

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

The annotations already establish read-only, idempotent, non-destructive behavior, so the description adds useful domain context: contacts group a person's conversations, get returns channels and consent, timeline returns conversations in order, and audit_log returns merge/unmerge/consent history. It does not cover pagination behavior or rate limits, but it adds substantive behavioral detail beyond the annotations.

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

Conciseness4/5

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

The description is front-loaded with the core definition and then structured with pipe-separated action descriptions. It is dense but efficient for a multi-action tool, with no clearly wasted sentences, though the repeated 'Needs: identityId' phrasing makes it slightly compressed.

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 8-parameter, 4-action read tool with no output schema, the description covers the identity model, sibling differentiation, action meanings, and conditional ID requirements. Pagination and mode behavior are left to the schema, which is reasonable, but a little more detail on list results or pagination expectations would make it fully 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?

With 50% schema description coverage, the description adds important meaning by defining each action value and the conditional requirement for identityId on get, timeline, and audit_log, plus search for list. It leaves page, limit, mode, and multiChannelOnly to the schema, which already documents most of them, but the action and conditional-ID semantics are key additions.

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 and resource ('Read contacts (identities)') and immediately defines the domain object as one person recognised across channels. It explicitly distinguishes the tool from 'leads_read', so an agent can identify its role without opening sibling 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?

It names the key alternative ('Different from leads_read (the CRM lead list)') and gives action-level selection guidance for list, get, timeline, and audit_log. It does not explicitly state when not to use the tool or compare it with other conversation-oriented siblings, but the action routing is clear.

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

contacts_writeA
Destructive
Inspect

Merge, split, update consent of, or delete a contact. merge and delete cannot be undone automatically — confirm with the user. Actions: merge — merge two contacts that are the same person Needs: sourceIdentityId, targetIdentityId. | unmerge — split conversations out of a contact Needs: identityId, convoIds. | set_consent — record the contact marketing consent Needs: identityId, consentStatus. | delete — delete the contact record Needs: identityId.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
actionYes
agentIdYes
convoIdsNoFor unmerge: conversations to split into a new contact.
identityIdNo
consentSourceNoWhere the consent came from, e.g. "web form".
consentStatusNo
sourceIdentityIdNoFor merge: the contact that disappears.
targetIdentityIdNoFor merge: the contact that is kept.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and non-idempotent, but the description adds the important qualifier that merge and delete 'cannot be undone automatically' and instructs confirmation, plus it clarifies merge semantics (the source contact disappears, the target is kept). It doesn't explain what happens to data on unmerge or what the response contains, 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?

Front-loaded summary plus the destructiveness warning before the action list, then a compact pipe-delimited breakdown. Every clause carries either a verb, a risk, or a required parameter; nothing is 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 9-parameter destructive tool with no output schema, this covers the essential calling information: which action does what, what each action requires, and which are irreversible. It stops short of describing the result of unmerge (whether a new contact is created) or response shape, which would fully close the loop.

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 only 56% schema coverage and no conditional required fields in the schema, the description carries the critical mapping of action to required IDs (sourceIdentityId/targetIdentityId, identityId/convoIds, consentStatus), which is genuinely additive. It leaves mode, agentId, and consentSource to the schema, so it is not fully 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?

The opening sentence names four specific verbs (merge, split, update consent, delete) operating on a single resource (contact), and the per-action breakdown makes each operation unambiguous. An agent can distinguish this from contacts_read and from sibling write tools 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?

Each action is annotated with the parameters it needs, which is effectively conditional guidance, and the description explicitly says to confirm with the user for merge and delete. What is missing is routing guidance relative to alternatives, e.g. when to look up a contact via contacts_read before merging.

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

create_agentAInspect

Create a Convocore agent (advanced/raw). Prefer create_agent_from_template for website/branded agents. Always node-based: enableNodes is forced true; put the main prompt in systemPrompt (or nodes[0].instructions) — do NOT use vg_instructions (API rejects that field). Default chat model is always claude-haiku-4-5-20251001 (Claude Haiku 4.5) on vg_defaultModel + nodes[0].llmConfig.modelId. UI Engine flags optional via vg_enableUIEngine*. Lead notify: use funnelConfig (AI Funnel + lead scoring + email recipients) — do NOT create custom HTTP webhook tools for sales alerts. Sets nodes[0].kb.enabled for auto RAG with maxChunks=3 and vgOptions.maxChunkSize=512 — still bake critical facts into systemPrompt. Do not raise chunk size or chunk count unless the user asks.

NameRequiredDescriptionDefault
lightNoEnable light mode (no chat history retention for privacy)
nodesNoOptional nodes. If omitted with systemPrompt, MCP creates the start node. Main prompt MUST be nodes[0].instructions.
themeNoVisual theme (e.g., blue-light, custom-blue-dark)
titleYesThe title of the agent
disabledNoWhether the agent should be disabled
descriptionNoA brief description of the agent
voiceConfigNoAgent voiceConfig for voice-capable agents. Integrations/API keys generally live at workspace/org level; this config selects providers, models, voices, and call behavior for the agent.
enableVertexNoEnable Vertex AI for the agent
funnelConfigNoAI Funnel & Lead Scoring (built-in). Use this instead of a custom HTTP “notify sales team” webhook. enabled + steps (id/name/description/condition/points/category) + notificationRules (type score_threshold|steps_completed|data_collected, recipients emails, cooldownStrategy). Runtime scores the conversation and emails recipients when a rule fires.
systemPromptNoMain behavior prompt → written to nodes[0].instructions (enableNodes always true).
autoOpenWidgetNoAuto-open widget when agent loads
additionalConfigNoExtra agent fields: same as update_agent additionalConfig (see that tool for each field's type and meaning). Fields: roundedImageURL, branding, customThemeJSONString, chatBgURL, lang, fontFamily, rectangeImageURL, avatarImageUrl, headerImageUrl, bannerImageUrl, enableNodes, nodesSettings, vg_systemPrompt, vg_initPrompt, vg_initMessages, vg_prompt, vg_temperature, vg_defaultModel, vg_maxTokens, vg_max_messages_history, vg_enableAboutContext, ifKnowsThreshold, enableFallback, fallbackSettings, enableAudioSupport, captureIGStories, metaHumanTakeover, vg_kb_llm, vg_kbDefaultDimension, vg_kbTopChunks, vg_kbCharCount, vg_kbDocsNum, proactiveMessage, autoStartWidget, messageDelayMS, scrollAnimation, disableSmoothScroll, buttonsLayout, buttonVariant, inputVariant, ui, ADVANCED_customCSS, disableRating, chatEndMessage, aiIntroductionMessage, enableAIIntroductionMessage, privacyDisclaimer, gdprCompliance, disableModelAutoUpgrade, acceptFileUpload, disableFileUpload, enableQuickFileUpload, soundEffectUrl, soundEffectEnabled, agentPlatform, AITranslateTo, enableAITranslate, disableHumanHandoff, alwaysShowHandoff, manualControl, enableVGHandoff, fixedHandoffPopup, UIhandoffTitle, UIhandoffSubtitle, showHandoffEvenIfOffline, persistHandoffOnRefresh, blockInputDuringHandoffRequest, disableHandoffMessages, handoffNowChattingMessage, handoffBackToAiMessage, handoffCancelButtonLabel, disableHandoffStatusMessages, convoTags, topicsConfig, starred, enableGeoAnalytics, hideVoiceflowAnalytics, hideCallAnalytics, hideConversationMetrics, hideCustomAnalytics, hideVapiAnalytics, hideFunnelAnalytics, marketplace, autoTest, customButtonJSON_STRING. Do not put the main prompt here. Unknown fields are rejected up front with the valid names.
allowRemoveToolsNoDefault false: toolsIds in a nodes patch are unioned with the live list. Set true only to intentionally remove tools.
vg_enableUIEngineNoMASTER SWITCH for UI Engine. When true the agent can emit structured UI (text, choice/buttons, visual, cardV2, carousel, iFrame, and — if their flags are on — form/input, invoice, calendarBooking). Call get_ui_engine_spec for payloads. Prefer enabling this before toggling individual elements.
leadCollectionRulesNoWhen to persist a CRM lead. Default: collect when email, phone, or phone_number is present.
vg_maxImagesPerCardNoMax images per cardV2/carousel card: 1 = imageUrl only; 2–3 allow images[] gallery. Omit for platform default.
vg_enableUIEngineFormsNoAllow form + input UI Engine elements (typically web). Set true to let the agent collect structured fields. Also set vg_uiEngineChannelConfig.web.form / .input as needed.
vg_enableUIEngineInvoiceNoAllow invoice card UI Engine elements (web). Use with vg_uiEngineInvoiceConfig for click notifications.
vg_uiEngineChannelConfigNoPer-channel allowlist of which UI Engine elements the agent may show. Channels: web, whatsapp, instagram, messenger, telegram. Each channel is an object of type→boolean (choice, visual, cardV2, carousel, iFrame, form, input, invoice, calendarBooking, file, VoiceNote, locationRequest, ctaUrl). Missing type = enabled. Example: { "web": { "choice": true, "cardV2": true, "form": true, "invoice": false }, "whatsapp": { "choice": true, "cardV2": true, "form": false } }. Forms/invoice/calendar still need their global vg_enableUIEngine* flags.
vg_uiEngineInvoiceConfigNoInvoice card notification settings.
vg_uiEngineCalendarConfigNoCalendar booking widget config (Google Calendar connection + booking rules).
vg_uiEngineFormNotifyConfigNoEmail notify settings when forms/inputs are submitted.
vg_enableUIEngineCalendarBookingNoAllow interactive calendar booking widget (web). Requires Google Calendar connectionIds in vg_uiEngineCalendarConfig.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare the safety profile (not read-only, not destructive, open-world, not idempotent); the description adds the consequential behavior: enableNodes is forced true, the model is pinned to claude-haiku-4-5, nodes[0].kb.enabled with maxChunks=3 / maxChunkSize=512 gets set for auto RAG, and vg_instructions will be rejected by the API. Those are non-obvious side effects and hard failure modes disclosed before invocation.

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 purpose and the sibling alternative, and nearly every clause carries a hard constraint. It is dense to the point of run-on — several distinct admonitions are packed into em-dash chains — which slightly hurts scannability for a 23-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 23-parameter mutation tool with nested objects and no output schema, the description covers the high-risk configuration surfaces (prompt placement, model pinning, KB/RAG, UI Engine, lead funnel) and warns that additionalConfig rejects unknown fields. The remaining gaps — voice, theme, light mode — are fully documented in the schema, so nothing critical 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 earns above that by explaining parameter interactions the schema cannot express: systemPrompt is a mirror of nodes[0].instructions, funnelConfig is the supported path for lead alerts, vg_enableUIEngine is a master switch gating the per-element flags. It does not cover voiceConfig, light, theme, or allowRemoveTools, leaving those entirely to 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+resource ("Create a Convocore agent") and immediately qualifies it as "advanced/raw," which is the distinguishing axis against the sibling create_agent_from_template. An agent can tell which creation path it is on 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?

Names the alternative explicitly ("Prefer create_agent_from_template for website/branded agents") and gives the condition that selects it. It also issues negative routing guidance — do NOT use vg_instructions, do NOT create custom HTTP webhook tools for sales alerts — which are exactly the wrong-path mistakes an agent would otherwise make.

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

create_agent_from_templateAInspect

PRIMARY way to create chat+voice agents. Workspace is resolved internally from MCP configuration/workspace secret context (no workspaceId input). Uses strict template invariants: agentPlatform=vg, enableNodes=true, vg_enableUIEngine=true, vg_enableUIEngineForms=true + form notify, default funnelConfig (lead scoring + email notify), nodes[0].kb.enabled (auto RAG, maxChunks=3, vgOptions.maxChunkSize=512), nodes[0].toolsIds includes built-in web-search, chat model always claude-haiku-4-5-20251001 (Claude Haiku 4.5), standard prompt clauses. vg_* overrides blocked from additionalConfig. NON-SALES agents (registration, internal, support-only): pass leadCapture=false and appendStandardPromptClauses=false (and attachWebSearchTool=false if it must not browse) so no sales text, funnel or lead forms are added. CRITICAL: bake scraped ground-truth AND a labeled image catalog (after read_image on real photos) into systemPrompt — KB alone is not enough. Pass ownerNotifyEmails so the funnel can email sales. Do NOT invent HTTP notify-sales webhooks. Run 8–12 turn tests before declaring done. Response includes prototypeUrl / tryItUrl — ALWAYS paste that link for the user to try the agent. Pattern: https://app.convocore.ai/{eu|na}/prototype/{agentId}. NEVER invent app.convocore.ai/agents/...

NameRequiredDescriptionDefault
urlNoBackward-compatible alias for sourceUrl.
imageNoBackward-compatible alias for widgetImageUrl.
titleNoAgent title
modelIdNoOverride chat model. Default claude-haiku-4-5-20251001 (Claude Haiku 4.5); omit unless the user asks for another model.
brandingNo
languageNoBackward-compatible alias for defaultLanguage.
templateNoBackward-compatible field currently ignored.
chatBgURLNo
requestIdNoOptional idempotency key. Reusing the same requestId returns the already-created agent instead of creating a duplicate.
sourceUrlNoOptional — MCP waits for scrape (for KB / context). Not required to create the agent.
themeTypeNoWidget theme (default light unless user wants dark)
descriptionNoShort description
leadCaptureNoDefault true: installs the default lead funnel, lead collection rules and lead forms. Set false for non-sales agents (registration bots, internal assistants).
voiceConfigNoFull voice configuration. speechGen.provider MUST be `google-live` or `ultravox`. Use search_voices on those providers only.
voicePromptNoOptional Gemini Live systemInstruction text. If omitted, systemPrompt is used for voice as well.
funnelConfigNoAI Funnel & Lead Scoring (built-in). Use this instead of a custom HTTP “notify sales team” webhook. enabled + steps (id/name/description/condition/points/category) + notificationRules (type score_threshold|steps_completed|data_collected, recipients emails, cooldownStrategy). Runtime scores the conversation and emails recipients when a rule fires.
primaryColorNoHex brand colour, e.g. #226D7A (from scrape_url colour list).
systemPromptNoMain chat / node instructions → nodes[0].instructions only. Do not send vg_instructions.
enableAutoRagNoDefault true: start node auto-retrieves KB chunks.
createKbUrlDocNoIf true with sourceUrl, attach URL KB after create (errors are non-fatal).
widgetImageUrlNoWidget assistant avatar/logo URL (favicon from scrape_url is ideal).
defaultLanguageNoDefault language for the agent. Must be a single language code/name (never "multilingual"). Default: "en".
roundedImageURLNoBackward-compatible alias for image.
additionalConfigNoExtra agent fields, same as update_agent additionalConfig; merged last with safeguards (keys starting with vg_ and core template keys are ignored). Fields: roundedImageURL, branding, customThemeJSONString, chatBgURL, lang, fontFamily, rectangeImageURL, avatarImageUrl, headerImageUrl, bannerImageUrl, enableNodes, nodesSettings, vg_systemPrompt, vg_initPrompt, vg_initMessages, vg_prompt, vg_temperature, vg_defaultModel, vg_maxTokens, vg_max_messages_history, vg_enableAboutContext, ifKnowsThreshold, enableFallback, fallbackSettings, enableAudioSupport, captureIGStories, metaHumanTakeover, vg_kb_llm, vg_kbDefaultDimension, vg_kbTopChunks, vg_kbCharCount, vg_kbDocsNum, proactiveMessage, autoStartWidget, messageDelayMS, scrollAnimation, disableSmoothScroll, buttonsLayout, buttonVariant, inputVariant, ui, ADVANCED_customCSS, disableRating, chatEndMessage, aiIntroductionMessage, enableAIIntroductionMessage, privacyDisclaimer, gdprCompliance, disableModelAutoUpgrade, acceptFileUpload, disableFileUpload, enableQuickFileUpload, soundEffectUrl, soundEffectEnabled, agentPlatform, AITranslateTo, enableAITranslate, disableHumanHandoff, alwaysShowHandoff, manualControl, enableVGHandoff, fixedHandoffPopup, UIhandoffTitle, UIhandoffSubtitle, showHandoffEvenIfOffline, persistHandoffOnRefresh, blockInputDuringHandoffRequest, disableHandoffMessages, handoffNowChattingMessage, handoffBackToAiMessage, handoffCancelButtonLabel, disableHandoffStatusMessages, convoTags, topicsConfig, starred, enableGeoAnalytics, hideVoiceflowAnalytics, hideCallAnalytics, hideConversationMetrics, hideCustomAnalytics, hideVapiAnalytics, hideFunnelAnalytics, marketplace, autoTest, customButtonJSON_STRING.
proactiveMessageNoWidget greeting bubble
ownerNotifyEmailsNoSales/owner emails. Used for form notify AND funnelConfig.notificationRules. Required for email alerts on hot leads. Do NOT create a custom HTTP webhook for this.
attachWebSearchToolNoDefault true: attaches built-in web-search to the start node. Set false for agents that must not search the web.
leadCollectionRulesNoWhen to persist a CRM lead. Default: collect when email, phone, or phone_number is present.
appendStandardPromptClausesNoDefault true: appends anti-repetition, lead-capture, knowledge-source, web-search, pricing and photo clauses to systemPrompt. Set false to store systemPrompt exactly as given (use for non-sales agents).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare openWorldHint=true and destructive=false, but the description adds substantial behavior: workspace resolution, the strict template invariants, that vg_* overrides are blocked from additionalConfig, the fixed model, and that the response includes prototypeUrl/tryItUrl with a URL pattern. This is rich context beyond annotations, though it doesn't state auth/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.

Conciseness3/5

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

Front-loaded with the key purpose, but the paragraph is dense and sprawling, bundling invariants, defaults, testing guidance, and URL rules into one long block. Every sentence is substantive but the lack of structure makes it hard to scan.

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 29-param creation tool with no output schema, the description covers the important gaps: where the workspace comes from, what the response returns (prototypeUrl/tryItUrl) and its URL pattern, and defaults for the key toggles. An agent can invoke this correctly from the definition alone.

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 93%, but the description adds real meaning: default behaviors for leadCapture, appendStandardPromptClauses, attachWebSearchTool, ownerNotifyEmails usage, and the fixed chat model. It goes beyond restating schema, though not every one of the 29 params is addressed in prose.

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?

Opens with a specific verb+resource+scope: 'PRIMARY way to create chat+voice agents.' The word 'PRIMARY' implicitly distinguishes it from the sibling create_agent, and the following sentence pins down that workspace is resolved internally, clarifying the creation model.

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 when to use the non-sales path (leadCapture=false, appendStandardPromptClauses=false, attachWebSearchTool=false) with reasoning, and warns against inventing HTTP notify-sales webhooks. It also routes the agent to read_image for the image catalog and mandates tests before declaring done.

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

create_agent_toolAInspect

Add an HTTP/API tool to a Convocore agent. Requires tool.name + tool.description. INPUTS — either (a) tool.variablesIds: ids of existing agent variables (create_agent_variable first), or (b) tool.fields[]: each entry needs key (the argument name — NOT "name"), type (string|number|boolean), in (body|query|header|path), plus description and required. REQUEST — simple tools: method + serverUrl (inputs are sent by their "in" location). Exact request shape: tool.httpRequest = { enabled: true, method, url, headers, query, bodyType: "json", bodyTemplate, bodyTemplateMode: "exact" }. In bodyTemplate/headers/query/url reference a variable with {{var:VARIABLE_ID}}; a value that is only that token keeps its number/boolean type. Fixed values are written literally. SECRETS — store an API key as an environment variable (create_agent_variable with isEnv: true; the value lives in defaultValue) and reference it with {{var:ID}}. Env variables must NOT be listed in variablesIds: they are resolved automatically and never shown to the model. An unfilled optional input sends its defaultValue; an input with no value and no default blocks the call with "Unresolved request values". By default the new tool is attached to the start node (nodes[].toolsIds) so the model can call it; pass attachToStartNode: false to skip. Verify with test_agent_tool_request.

NameRequiredDescriptionDefault
toolYesTool definition: name, description, method, serverUrl, serverUrlSecret, variablesIds[] or fields[] ({key,type,in,description,required}), httpRequest{enabled,method,url,headers,query,bodyType,bodyTemplate,bodyTemplateMode}, channels[], etc.
agentIdYes
attachToStartNodeNoDefault true: adds the new tool id to the start node toolsIds so the agent can call it. A tool that is not in any node toolsIds is never offered to the model.

TDQS

A5/5.0
Behavior5/5

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

Annotations already declare this as a non-read-only, open-world, non-idempotent mutation, but the description adds substantial behavioral context: exact httpRequest shape, {{var:ID}} interpolation rules, handling of secrets and environment variables, defaultValue behavior, and the 'Unresolved request values' blocking error. It does not contradict annotations.

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

Conciseness5/5

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

The description is long but appropriately sized for a complex creation tool with nested request construction. It is front-loaded with purpose and requirements, then organized into INPUTS, REQUEST, SECRETS, and verification guidance; every section earns its place.

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

Completeness5/5

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

Despite the complex nested schema and no output schema, the description covers invocation prerequisites, request construction, secret handling, default behavior, attachment behavior, and verification. It gives an agent everything needed to call the tool correctly.

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

Parameters5/5

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

Schema coverage is only 67% and the tool has nested objects, but the description compensates thoroughly. It explains tool.fields entries (key, type, in, description, required), variablesIds versus fields, httpRequest fields, bodyTemplate mode, variable references, and attachToStartNode semantics far 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 uses a specific verb and resource: 'Add an HTTP/API tool to a Convocore agent.' It also distinguishes this from sibling tools by naming create_agent_variable as a prerequisite for variables and test_agent_tool_request for verification. 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?

It explicitly states the prerequisite (tool.name + tool.description), the two input modes (variablesIds or fields), and the need to create variables first. It also names the verification tool and explains the default start-node attachment behavior, giving clear when-and-how guidance.

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

create_agent_variableAInspect

Add a variable to a Convocore agent. Typical fields: key, type, defaultValue, description, in (body|query|header|path), required, isEnv, isGlobal. AI inputs: the model fills them; list their ids in a tool variablesIds. An optional input that is not filled sends its defaultValue. Environment variables (isEnv: true) hold fixed config/secrets: the value is stored in defaultValue, is never shown to the model, and is referenced in a tool request as {{var:VARIABLE_ID}} — do not add them to variablesIds. To keep a secret out of this chat, create it with a placeholder defaultValue and have the owner enter the real value in the dashboard: open the tool editor, type { in a request field (or use Variables), open the variable, keep ENV on and fill "Value". Responses mask env values.

NameRequiredDescriptionDefault
agentIdYes
variableYes

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the annotations, the description discloses important behavior: optional inputs send defaultValue, environment variables are stored in defaultValue and never shown to the model, env values are referenced as {{var:VARIABLE_ID}}, and responses mask env values. These details materially help an agent understand side effects and secret handling for a mutating tool.

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 purpose is front-loaded and the later sentences cover genuinely complex behavior around defaults and environment variables. The description is somewhat dense and long for a two-parameter tool, but each section adds operational value rather than repeating structured fields.

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 non-readonly create tool with no output schema and a largely undocumented nested object parameter, the description provides enough context to call it correctly in common cases, including secret handling and response masking. It does not cover permissions, error behavior, or full variable-type constraints, so a small gap remains.

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% and the variable parameter is a nested object with no property documentation, so the description carries most of the burden. It compensates well by listing typical fields such as key, type, defaultValue, description, in, required, isEnv, and isGlobal, and by explaining defaultValue and isEnv semantics. It still leaves agentId and some type/value constraints implicit, so it is not 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?

The description opens with a specific verb and resource: "Add a variable to a Convocore agent." This clearly distinguishes creation from sibling tools such as get_agent_variable, update_agent_variable, and delete_agent_variable. The additional field examples reinforce what is being created.

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 useful operational guidance for environment variables and secret handling, including a dashboard workflow for keeping secrets out of chat. However, it does not explicitly say when to use create_agent_variable versus update_agent_variable or other sibling tools, nor does it state prerequisites or exclusions. Usage is therefore implied rather than fully specified.

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

create_conversationBInspect

Create a new conversation for an agent

NameRequiredDescriptionDefault
agentIdYesThe agent ID
conversationYesConversation object (minimum: { ts: timestamp })

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already disclose that this is a non-read-only, open-world, non-idempotent, non-destructive mutation. The description adds only "new" and "for an agent" without explaining side effects, duplicate-conversation behavior, or required permissions.

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?

It is a single front-loaded sentence with no wasted words. Its brevity is appropriate structurally, though it leaves important invocation context to other fields.

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 schema and annotations cover required parameters and safety flags, but the description omits when to create a conversation, what the conversation object should contain, and what the call returns. For a mutation tool with a nested object parameter, that leaves meaningful 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 description coverage is 100%, so the schema already defines agentId and the conversation object. The description does not add syntax, constraints, or meaning beyond the schema baseline.

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 verb and resource: "Create a new conversation." It is clearly a creation tool among CRUD conversation siblings, but it does not explicitly differentiate itself from tools like list_conversations or update_conversation beyond the verb.

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?

It gives no guidance on when to use this tool versus alternatives or what prerequisites are required. The phrase "for an agent" hints at agentId usage but does not establish context or exclusions.

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

create_kb_docAInspect

Add one knowledge base source (VG agents). For many page URLs use create_kb_from_urls instead. For websites: sourceType=url with urls[] + scrapeContent=true (KB router scrapes). For whole-site: sourceType=sitemap + sitemapUrl + maxPages + scrapeContent=true. sourceType=doc only for raw text you already have — do not paste web-fetched HTML here.

NameRequiredDescriptionDefault
nameYesDocument name
tagsNoTags for organization
urlsNoArray of URLs (for sourceType: url). Prefer create_kb_from_urls for many pages.
agentIdYesThe agent ID
contentNoDocument content (required for sourceType: doc)
maxPagesNoMax pages from sitemap
metadataNoAdditional metadata
sitemapUrlNoSitemap URL (for sourceType: sitemap)
sourceTypeYesdoc = text; url = KB router scrape urls[]; sitemap = crawl sitemap
refreshRateNoAuto re-crawl for URL/sitemap (API: 3d | 7d | never). Default never.
scrapeContentNoLet KB router scrape URLs/sitemap (set true for url/sitemap)

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare the safety profile (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false). Beyond that, the description discloses that the KB router itself performs scraping for url/sitemap sources, which is genuinely behavioral context an agent would not get from annotations. It omits failure modes, quota limits (get_kb_quota exists as a sibling) and whether repeated calls create duplicates.

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 purpose, then alternative, then one compact recipe per sourceType. Telegraphic phrasing, but every clause carries a distinct decision rule and there is 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?

For an 11-parameter mutation with no output schema, the description covers the hard part — selecting the right sourceType and correct field combination. Minor gaps remain: nothing about what is returned (created doc id), whether the call blocks on scraping, or quota/limit constraints.

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 100% schema coverage, per-parameter meanings are already documented, so the baseline is 3. The description goes further by specifying cross-parameter dependencies — which fields are required together for each sourceType and that scrapeContent must be true for url/sitemap — information the flat schema cannot express.

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?

Opens with a specific verb and resource: 'Add one knowledge base source (VG agents).' It immediately scopes to a single source and names the sibling (create_kb_from_urls) it is not, so an agent can distinguish it 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?

Gives explicit routing rules: many page URLs → create_kb_from_urls; individual/website → sourceType=url with urls[] + scrapeContent=true; whole-site → sourceType=sitemap with sitemapUrl + maxPages; raw text → sourceType=doc. It also states a negative constraint ('do not paste web-fetched HTML here'), leaving nothing to inference.

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

create_kb_from_urlsAInspect

PREFERRED for adding many website pages to an agent KB. Pass up to 50 URLs; the Convocore KB router scrapes them (scrapeContent=true). Do NOT web-fetch/scrape_url then paste content into create_kb_doc — that is slow and duplicates work. mode=per_url (default): one KB doc per URL. mode=batch: one API call with urls[]. For a whole site prefer create_kb_doc sourceType=sitemap. Scraping is async — poll list_kb_docs/get_kb_doc for status.

NameRequiredDescriptionDefault
modeNoper_url (default) or batch (single source with all urls)
nameNobatch: doc name. per_url: optional name prefix
tagsNo
urlsYesPage URLs to ingest via KB router (max 50)
agentIdYesThe agent ID
metadataNo
refreshRateNoAuto re-crawl (API: 3d | 7d | never). Default never.
skipExistingNoSkip URLs already on the agent KB (default true)
scrapeContentNoKB router scrape (default true)

TDQS

A4.6/5.0
Behavior4/5

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

The description adds important behavior beyond annotations: scraping is asynchronous and callers should poll list_kb_docs/get_kb_doc. It also clarifies the KB router scrape and default scrapeContent behavior. It does not cover permission requirements, rate limits, or partial-failure behavior, but annotations already communicate mutation/open-world/non-idempotent 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?

The description is dense but front-loaded and highly efficient. Each sentence carries routing, mode, async, or anti-pattern information without 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 complex, non-idempotent, open-world ingestion tool with no output schema, the definition covers the core workflow, alternative tools, modes, and async polling. It leaves some secondary parameter behavior and failure/partial-success handling to the schema and annotations.

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 high, but the description still adds useful meaning by explaining that per_url creates one KB doc per URL while batch makes a single API call with urls[]. It reinforces the 50-URL cap and scrapeContent behavior. Remaining parameters such as tags, metadata, refreshRate, and skipExisting are covered mainly 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?

The description states a specific verb and resource: adding many website pages to an agent KB via URL ingestion. It explicitly positions itself as the preferred tool for this task and distinguishes itself from scrape_url/create_kb_doc workflows.

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 when-to-use guidance, names a clear anti-pattern (web-fetch/scrape_url then paste into create_kb_doc), and points to alternatives for whole-site ingestion (create_kb_doc sourceType=sitemap). It also explains per_url vs batch modes.

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

create_kb_imageBInspect

Upload images into the agent KB (optional autoCaption). Backup after you already called read_image and labeled the photos in the system prompt — not a substitute for looking at them.

NameRequiredDescriptionDefault
tagsNo
imagesYes
agentIdYes
autoCaptionNo
targetDocNameYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnly=false, destructive=false, openWorld=true and idempotent=false, so the safety profile is covered. The description adds workflow context (a backup step after visual inspection) but says nothing about batch limits, duplicate handling, quota consumption, or what happens on repeated calls despite idempotentHint=false.

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 with the purpose and the parenthetical option front-loaded before the workflow caveat. No filler sentences; the second clause rambles slightly but earns its place as a misuse warning.

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 non-idempotent write tool with 5 params, 0% schema coverage and no output schema, the description is far too thin — it omits how images are addressed, what targetDocName does to existing docs, and what a successful response contains.

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 0% for 5 parameters, so the description must carry parameter meaning and does not. It only nods to autoCaption; it never explains images (data vs sourceUrl, mimeType), targetDocName (append vs overwrite), tags, or agentId, leaving the agent to guess at required-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?

The description gives a specific verb and resource ("Upload images into the agent KB") and flags an optional mode (autoCaption), so an agent can tell this creates image entries in the knowledge base. It does not explicitly distinguish itself from siblings like import_file_to_kb or create_kb_doc, which are the closest overlapping 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?

It gives real sequencing guidance — call read_image and label the photos in the system prompt first — and adds an exclusion ("not a substitute for looking at them"), which prevents misuse. It still leaves open when to pick this over import_file_to_kb or bulk_create_kb_docs.

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

custom_metrics_readA
Read-onlyIdempotent
Inspect

Read the custom analytics metrics of an agent (values the AI extracts from each conversation or call, e.g. customer_satisfaction, booked_meeting). Actions: list, get (metricId), data (aggregated values for one metricKey in a time range: averages/sums for numbers, counts for boolean/enum/string), all_data (same for every metric). Time range defaults to the last 30 days; startTs/endTs are unix seconds. includeTimeSeries adds per-day points.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
endTsNoUnix seconds. Default: now.
limitNoFor list. Default 50, max 100.
actionYes
agentIdYes
startTsNoUnix seconds. Default: 30 days ago.
metricIdNoRequired for get.
metricKeyNoRequired for data (the metric key, not its id).
startAfterIdNoFor list pagination.
includeTimeSeriesNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is covered. The description adds genuinely useful behavior beyond that: default 30-day window, unix-second timestamps, and that includeTimeSeries adds per-day points. It does not mention pagination behavior or response envelope shape, but the added context is real.

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?

A single dense paragraph that front-loads the core purpose, then the action list, then time-range and time-series defaults. Every clause carries information. Slightly compressed with parenthetical nesting, but no wasted sentences.

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 10-parameter, four-action tool with no output schema, the description does most of the needed work: it defines each action, the time-window defaults, and what the aggregated payloads contain. The remaining gap is that it never sketches what 'list' or 'get' return, which matters slightly more given no output schema.

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

Parameters4/5

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

With 70% schema coverage the baseline is 3, and the description earns above that by explaining aggregation semantics per type ('averages/sums for numbers, counts for boolean/enum/string') and clarifying that 'data' takes the metric key rather than the id. It adds no detail on the uncovered parameters (includeTimeSeries flag semantics are only partly explained, startAfterId ignored).

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 ('Read the custom analytics metrics of an agent') and even defines what a custom metric is with concrete examples. It enumerates the four actions, so an agent knows the tool is a multi-action reader. It stops short of naming custom_metrics_write as the mutation counterpart, so sibling differentiation relies on the tool name 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?

Each action is scoped inline: 'list', 'get (metricId)', 'data (aggregated values for one metricKey...)', 'all_data (same for every metric)'. That gives clear conditions for choosing among the four modes. It does not explicitly state when not to use this tool or point to a sibling for metric creation/editing.

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

custom_metrics_writeA
Destructive
Inspect

Create, edit or delete a custom analytics metric on an agent. Actions: create (metric needs key + type + description; type enum also needs options), update (metricId + metric with only the fields to change; changing type can make old data inconsistent), delete (metricId; historical data stays but the metric stops being tracked). Metric: { key, type: number|boolean|enum|string, options?, description? }.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
actionYes
metricNo
agentIdYes
metricIdNoRequired for update / delete.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the destructive annotation, the description discloses important behavioral consequences: changing a metric type can make old data inconsistent, and deleting stops tracking while preserving historical data. It also clarifies enum-specific creation requirements.

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 dense and front-loaded with the overall purpose before breaking down each action. Every sentence carries actionable information, 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 destructive nested-object write tool with no output schema, the definition covers the critical create/update/delete semantics, required fields, and data-integrity caveats. Remaining details such as agentId and mode are either obvious from context or already documented in 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 low at 40%, and the description compensates by mapping action values to required fields and by explaining the metric object structure. It does not explain agentId or mode, but mode is already described in the schema and agentId is strongly implied by 'on an agent'.

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 set and resource: create, edit, or delete a custom analytics metric on an agent. It clearly distinguishes this write tool from the sibling read tool by enumerating mutating actions rather than read behavior.

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 action-specific usage conditions: create needs key + type + description and enum options, update uses metricId plus only changed fields, and delete uses metricId. It does not explicitly route readers to custom_metrics_read or state when not to use this tool, so it stops short of the top score.

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

delete_agentB
Destructive
Inspect

Delete a Convocore agent permanently

NameRequiredDescriptionDefault
agentIdYesThe unique identifier of the agent to delete

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true. The description adds useful irreversibility context with 'permanently,' but does not disclose cascading effects, required permissions, or whether associated data is removed.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no wasted language. For a simple one-parameter destructive tool, the size and structure are appropriate.

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 low complexity, complete parameter schema, and strong destructive annotations, the description is largely sufficient. The main remaining gap is that it does not explain what happens to related resources or whether confirmation is required.

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 fully documents the single agentId parameter at 100% description coverage. The description does not add any parameter-specific meaning beyond what the schema already provides, so the baseline score 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 description uses a specific verb and resource: delete an agent, and adds the important qualifier 'permanently.' It distinguishes the target from siblings such as delete_agent_tool by naming a Convocore agent, though it does not explicitly route among related agent tools.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus update_agent, clone_agent, or delete_agent_tool. Usage is only implied by the verb 'Delete,' with no preconditions, alternatives, or warnings 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.

delete_agent_toolA
DestructiveIdempotent
Inspect

Permanently delete a Convocore agent HTTP tool by toolId. Does not delete MCP tools.

NameRequiredDescriptionDefault
toolIdYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is structured data. The description adds the scope exclusion (MCP tools unaffected) and reinforces irreversibility with "Permanently," but says nothing about cascade effects on agents that reference the tool or any auth requirement — comparable to the calibration case where a scoping constraint under annotations earned a 3.

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 short sentences, zero filler; the destructive action and its scope are front-loaded and the exclusion is the natural second beat.

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 destructive delete with full annotation coverage and no output schema, the definition covers what the tool does, what it targets, and what it excludes. The remaining hole — side effects on agents referencing the deleted tool — is the only thing an agent might reasonably want before calling.

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 carries the burden, and it only tells us toolId identifies the agent HTTP tool. It gives no format detail (UUID vs slug vs name) or validation behavior, which is the one gap an agent could hit at call time; for a single obvious required parameter this is adequate but not compensating.

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 ("Permanently delete a Convocore agent HTTP tool") plus the identifying key (toolId), and draws a boundary ("Does not delete MCP tools") that separates it from MCP-related deletion surfaces. It never names the closest siblings (get_agent_tool, update_agent_tool, create_agent_tool), but the HTTP-vs-MCP distinction is enough to select correctly.

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 negative case is implied via "Does not delete MCP tools," which signals when not to use it. There is no positive when-to-use guidance, no prerequisite or permission note, and no pointer to the alternative tool for MCP deletion, so the agent must infer the rest.

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

delete_agent_variableB
DestructiveIdempotent
Inspect

Permanently delete a Convocore agent variable by variableId.

NameRequiredDescriptionDefault
variableIdYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The word 'Permanently' reinforces irreversibility, but the description says nothing about cascade effects on agent prompts that reference the variable, behavior when the variableId does not exist, or what is returned.

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 front-loaded sentence with the destructive qualifier first and the resource second. Nothing is wasted or buried.

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 delete with rich annotations covering destructiveness and idempotency and no output schema, the description supplies the essential scope. Only error/not-found behavior and the source of variableId remain unstated, which are minor for this tool shape.

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 0%, so the description must carry the param burden, but 'by variableId' only restates the parameter name and type already in the schema. It gives no format, no hint on where the ID comes from (e.g., list_agent_variables), and no note that it is required.

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 ('permanently delete'), a specific resource ('Convocore agent variable'), and the lookup key ('by variableId'). It is clearly distinguishable from delete_agent, delete_kb_doc, and delete_agent_tool by resource, though it does not explicitly name those siblings.

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 versus update_agent_variable (to clear a value) or the sibling delete tools, and no prerequisites such as required permissions or confirmation steps. The agent must infer all usage conditions from the name alone.

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

delete_conversationC
Destructive
Inspect

Delete a conversation

NameRequiredDescriptionDefault
agentIdYesThe agent ID
convoIdYesThe conversation ID

TDQS

C2.3/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is known. The description adds nothing beyond that — it does not say whether deletion is permanent, whether messages/notes cascade, or whether confirmation is required, which matters for a destructive irreversible operation.

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?

The single sentence is maximally concise but suffers from under-specification rather than tight brevity. There is no wasted wording, but also almost no informational payload.

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 destructive, non-idempotent deletion with no output schema, the description should disclose permanence, cascading effects, or error behavior. None of that is present, leaving the agent with essentially only the annotations to understand consequences.

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 both required parameters (agentId, convoId) documented in the schema. The description adds no meaning 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.

Purpose2/5

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

The description 'Delete a conversation' is a verbatim restatement of the title and effectively of the tool name delete_conversation. It conveys the basic verb+resource but offers no differentiation from siblings like delete_conversation_note or delete_agent beyond the noun itself.

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 versus alternatives (e.g., deleting a whole conversation vs. individual notes, or whether to archive instead). No prerequisites or warnings stated. The agent must infer usage entirely from the name.

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

delete_conversation_noteA
DestructiveIdempotent
Inspect

Delete one note. Any user with access may delete any note; a full copy is kept in the workspace Logs with who deleted it, from which IP and when. Only call when the user asked to delete that note.

NameRequiredDescriptionDefault
noteIdYesThe note id from list_conversation_notes.
agentIdYesThe agent ID
convoIdYesThe conversation ID
authorNameNoLabel for who is acting, e.g. "Claude via MCP". Only used because API-key calls have no signed-in person; it is shown on the note and in the audit log.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already disclose destructiveHint=true and idempotentHint=true, but the description adds crucial context: any user with access may delete any note, and a full copy with deleter identity, IP, and timestamp is kept in workspace Logs. This soft-delete and audit behavior is not in the annotations and helps the agent understand consequences.

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 action first, then permission/audit context, then a usage constraint. Every sentence earns its place and the key information is front-loaded.

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

Completeness5/5

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

For a destructive tool with annotations covering safety and a fully described schema, the description adds the necessary permission scope and audit retention details. No output schema exists, but none is needed for a delete confirmation. Nothing essential 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%, so all four parameters are fully documented in the schema. The description adds no parameter-level meaning beyond what the schema provides. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose5/5

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

The description opens with a specific verb+resource: 'Delete one note.' It clearly distinguishes from delete_conversation by specifying a note, and the name/title reinforce conversation note context. An agent can immediately tell what the tool does.

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 an explicit condition: 'Only call when the user asked to delete that note.' That is a clear when-to-use rule. It does not name alternatives like update_conversation_note, but the constraint is strong enough to guide correct invocation.

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

delete_kb_docB
Destructive
Inspect

Delete a knowledge base document (VG agents only)

NameRequiredDescriptionDefault
docIdYesThe document ID
agentIdYesThe agent ID

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description's only extra fact is the VG-agent scope restriction; it says nothing about irreversibility, what happens to embeddings/indexes, or whether deletion cascades.

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?

A single compact sentence with the action front-loaded and the scope qualifier trailing. No filler, though it is sparse enough to be almost telegraphic.

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 destructive, non-idempotent operation with no output schema, the agent is left unsure about reversibility and side effects on the agent's knowledge base. Annotations cover the risk flag, but the description could have stated permanence and any prerequisites (e.g., doc must belong to the agent).

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

Parameters3/5

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

Schema description coverage is 100% with only two clearly named parameters, so the schema carries parameter meaning fully. The description adds no insight into agentId/docId relationships or formats, which is acceptable at this coverage level.

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 'Delete' plus resource 'knowledge base document', with the scope qualifier '(VG agents only)'. It is clearly distinguishable from bulk_delete_kb_docs and delete_agent, though it does not name those siblings explicitly.

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 parenthetical '(VG agents only)' gives an eligibility condition for use, but there is no guidance on when to prefer this over bulk_delete_kb_docs or how to locate a docId (e.g., via list_kb_docs/search_kb_docs). Usage is implied rather than stated.

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

disconnect_meta_pageA
Destructive
Inspect

Disconnect a Facebook page from an agent: the agent stops answering Messenger and Instagram for that page. pageId comes from get_agent_channels. Confirm with the user first. To connect a page use create_channel_connect_link.

NameRequiredDescriptionDefault
pageIdYes
agentIdYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is carried structurally. The description adds real value beyond that by spelling out the consequence (agent stops answering Messenger and Instagram for that page) and the required user confirmation. It does not clarify reversibility or what happens to existing conversations, and defers idempotency to the annotation, so it stops 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?

Three short sentences, no filler, with the effect front-loaded before prerequisites and the sibling reference last. 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 destructive mutation with rich annotations and no output schema, the description covers effect, prerequisite lookup, user confirmation, and the alternative tool. The remaining gaps are minor: no note on whether disconnection is reversible or what happens to existing Messenger/Instagram conversation history.

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% for two required parameters, so the description must compensate. It resolves the origin of pageId (get_agent_channels), which is genuinely useful, but says nothing about the agentId parameter or the identifier format for either. Half the parameters remain undocumented anywhere.

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 ('Disconnect a Facebook page from an agent') and immediately describes the concrete effect: the agent stops answering Messenger and Instagram for that page. It also names the inverse sibling (create_channel_connect_link), so an agent can distinguish it from related channel tools 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 instructs to confirm with the user first, tells where pageId comes from (get_agent_channels), and routes the opposite intent to create_channel_connect_link. This is a full when/when-not/alternative triad rather than implied usage.

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

email_channel_readA
Read-onlyIdempotent
Inspect

Read the email channel setup of the workspace: sending domains (with the DNS records to add and their verification state), inboxes (addresses agents answer) and recent email events. Actions: domains — sending domains | inboxes — inboxes and their assigned agent | recent_events — recent inbound / outbound email events

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
limitNoFor recent_events: max 100.
orgIdNoOptional organization scope.
actionYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is covered. The description adds meaningful behavioral context: what data surfaces per action (DNS records with verification state, inboxes with assigned agents, recent inbound/outbound events), though it says nothing about pagination, auth, or freshness beyond 'recent'.

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, front-loaded with the resource and scope, then the action breakdown. Every clause adds 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?

For a read-only tool with no output schema, the description covers purpose, action mapping, and returned data categories. Only minor operational details (default mode behavior, how 'recent' is bounded) are left entirely to 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 75% and the schema already explains mode, limit (max 100), and orgId. The description earns credit by mapping each action enum value to its returned content, which the bare enum alone would 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 ('Read the email channel setup of the workspace') and enumerates the three data domains it exposes. The read semantics and the corresponding email_channel_write sibling make the distinction obvious 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?

The action list tells the agent exactly which action to use for domains, inboxes, or events, which is real routing guidance. It does not state when to avoid this tool or explicitly point to email_channel_write for mutations, so it falls 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.

email_channel_writeA
Destructive
Inspect

Set up and operate the email channel. Flow: create_domain → the user adds the returned DNS records at their DNS provider → verify_domain → create_inbox (address = localPart@domain) assigned to an agent. send_human_reply sends a real email. Actions: create_domain — register a sending domain and get its DNS records Needs: domain. | refresh_domain — re-read the domain status Needs: domainId. | verify_domain — ask for DNS verification after the records were added Needs: domainId. | delete_domain — remove a sending domain (its inboxes stop working) Needs: domainId. | create_inbox — create an address on a verified domain Needs: domainId, localPart. | update_inbox — change display name, assigned agent, active flag or settings Needs: inboxId. | delete_inbox — delete an inbox Needs: inboxId. | send_human_reply — reply to an email conversation as a human, from the inbox Needs: inboxId, reply.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
orgIdNoOptional organization scope.
replyNoFor send_human_reply: { conversationId, to[], cc?[], subject, replyText, originalFrom, originalFromName?, originalDate (unix ms), originalBody, inboundMessageId?, references?[] }.
actionYes
activeNo
domainNoFor create_domain, e.g. "mail.example.com".
inboxIdNo
domainIdNo
settingsNo
localPartNoFor create_inbox: the part before @, e.g. "support".
displayNameNo
assignedAgentIdNoAgent that answers the inbox; null to unassign.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the safety bar is lower, yet the description adds concrete consequences: delete_domain means 'its inboxes stop working', and send_human_reply transmits real mail. It does not mention permission requirements or whether deletes are reversible, keeping it below 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.

Conciseness4/5

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

Front-loaded workflow sentence followed by a compact, scannable action table; almost every clause carries information. It is dense and long, but the length is justified by eight distinct actions, with only minor redundancy between the action gloss and its 'Needs' entry.

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 12-param, multi-action mutation tool with no output schema, the definition covers the workflow, the action list, required params per action, and the real-world side effects. Remaining gaps are minor: the settings object contents and the mode/orgId parameters are left to 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?

With only 50% schema description coverage across 12 parameters, the description compensates well by listing the exact params each action needs ('Needs: domainId, localPart', 'Needs: inboxId', etc.) and explaining localPart/domain formats. Some fields (settings, active, displayName, orgId, mode) are still only implicitly covered, so not a 5.

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 up and operate the email channel') and then enumerates all eight actions with a one-line purpose each (create_domain, verify_domain, create_inbox, send_human_reply, etc.). This clearly separates it from the sibling email_channel_read, and an agent can identify which action it needs 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 an explicit recommended sequence — create_domain → user adds DNS records → verify_domain → create_inbox — which is real procedural guidance, plus the caveat that send_human_reply 'sends a real email'. It does not explicitly state when to prefer email_channel_read over this tool, but the sibling naming makes that inference safe.

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

export_agentB
Read-onlyIdempotent
Inspect

Export an agent template for backup or migration. For import/export, rely on these dedicated OpenAPI routes instead of trying to manually construct the template shape.

NameRequiredDescriptionDefault
agentIdYesThe agent ID to export

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that the output is a template shape that should not be hand-constructed, which is useful context, but says nothing about what the exported template contains (tools, prompts, KB refs), whether secrets are included, or whether permissions are required.

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 short sentences with no filler, and the core action is front-loaded. The phrase "these dedicated OpenAPI routes" is a slightly vague referent that costs a bit of clarity without adding length.

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 would ideally characterize the returned template (scope, format, completeness), but it only warns against constructing the shape manually. For a simple single-parameter read tool this is adequate but leaves a real gap around return values.

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 with 100% schema description coverage ("The agent ID to export"), so the schema already carries the semantics. The description adds no format, source, or lookup guidance for agentId beyond what is structured, making 3 the correct baseline.

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 a specific verb and resource ("Export an agent template") plus the intent behind it ("backup or migration"), so the agent knows exactly what operation is performed. It does not, however, differentiate this from nearby siblings such as import_agent, clone_agent, create_agent_from_template, or agent_backups_write, which all touch agent templates.

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?

"For backup or migration" implies the scenario in which to reach for this tool, and the second sentence hints that it pairs with an import route. But no sibling is named explicitly and there is no statement of when NOT to use it versus clone_agent or agent_backups_*, leaving the agent to infer the routing decision.

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

export_all_conversationsA
Read-onlyIdempotent
Inspect

Export conversations for an agent (Postgres mirror). Requires a paid workspace (hasEverPaid === true); billed against monthly export quota. Supports cursor pagination via cursor/nextCursor/hasMore, or selected mode via convoIds. Formats: json|csv.

NameRequiredDescriptionDefault
sortNoSort order (API-defined)
toTsNoUnix timestamp upper bound (inclusive)
limitNoMax conversations in this export page
cursorNoOpaque cursor from previous export nextCursor
formatNoExport format (default: json)
fromTsNoUnix timestamp lower bound (inclusive)
agentIdYesThe agent ID
convoIdsNoIf set, export only these conversation IDs

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive), so the description wisely spends its words on what annotations can't express: the paid-workspace gate and quota consumption. Pagination contract (cursor/nextCursor/hasMore) is also disclosed, which is real behavioral context. It stops short of stating rate limits or whether the export is synchronous vs job-based.

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 dense paragraph, front-loaded with the verb and resource, then preconditions, then pagination/model, then formats. No filler sentences; each clause carries a distinct constraint.

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 names the response keys (cursor/nextCursor/hasMore) an agent must read to paginate, plus formats and the free/paid gate. It leaves open what a record contains and whether large exports are chunked beyond the page limit, but is otherwise sufficient to invoke 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 baseline is 3. The description earns above that by explaining the relationship between parameters — cursor drives nextCursor/hasMore continuation, and convoIds switches to 'selected mode' rather than combining with pagination — which is mode semantics the schema does not state.

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 ('Export conversations for an agent') and adds scope ('all', Postgres mirror). This distinguishes it from export_conversation and list_conversations implicitly, but never names the singular export sibling explicitly.

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?

Gives useful preconditions (requires paid workspace, hasEverPaid === true, quota-billed) and explains the two operating modes (paginated vs selected via convoIds). However it never routes the agent away from list_conversations or export_conversation for single-conversation cases, so selection guidance is only implied.

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

export_conversationA
Read-onlyIdempotent
Inspect

Export a single conversation. Requires a paid workspace (hasEverPaid === true); billed against monthly export quota.

NameRequiredDescriptionDefault
formatNoExport format (default: json)
agentIdYesThe agent ID
convoIdYesThe conversation ID

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotent, non-destructive), and the description adds genuinely new behavioral context: the paid-workspace requirement and that the call consumes monthly export quota. It does not describe what happens when the quota is exhausted or whether export is synchronous, which keeps it below 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?

Two short sentences with zero waste; the action is front-loaded and the prerequisite follows immediately. Nothing is repeated from the schema or annotations.

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?

There is no output schema, and for an export tool the return shape matters a great deal — file content, a download URL, or a job handle? The description also doesn't say whether export is immediate or asynchronous. The billing prerequisite is covered, but the result contract 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 the format enum with its default is documented in the schema, so the schema carries the parameter burden. The description adds no format-specific or ID-format guidance, making the baseline 3 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 and resource ('Export a single conversation'), and the word 'single' implicitly distinguishes it from the sibling export_all_conversations. It stops short of naming that sibling, so the differentiation is inferential rather than explicit.

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 a gating prerequisite (paid workspace, billed against monthly export quota), which is useful context for deciding whether to call it. However, it never explicitly says when to use this instead of export_all_conversations or how it relates to get_conversation, leaving alternative selection implied.

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

folders_readA
Read-onlyIdempotent
Inspect

Read the agent folders of the workspace (the folders that group agents on the dashboard). Actions: list (all folders with their agentIDs), get (one folder by folderId, or by exact name).

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
nameNoFor get: exact folder name, when the id is unknown.
actionYes
folderIdNoFor get.

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, idempotentHint=true and destructiveHint=false, so safety is covered by structured data. The description adds useful behavioral detail — that 'list' returns every folder with its agentIDs and that 'get' accepts either an id or an exact name — but says nothing about lookup failures when a name doesn't match or about what 'get' actually returns.

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?

One front-loaded sentence plus a compact action list; the parenthetical definition of folders is worth its space. No filler, though the action enumeration could be tightened.

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 4-parameter read tool with no output schema, the definition covers the core lookup paths but omits what 'get' returns, the compact vs full response tradeoff, and behavior when neither folderId nor name resolves. Adequate but with clear 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 75%, so most parameters are already documented, including the compact/full 'mode' toggle which the description never mentions. The description does clarify that folderId and name are alternatives for the same 'get' lookup, which adds a bit of meaning beyond the schema, but it leaves 'mode' entirely to 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 ('Read') and a precisely defined resource ('agent folders of the workspace'), including a disambiguating gloss that these are the dashboard folders grouping agents. The two supported actions are enumerated, so the agent knows the tool's exact surface 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 Guidelines3/5

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

The description enumerates the actions and the selector for 'get' (folderId or exact name), which implies usage, but it never says when to reach for this tool versus siblings such as folders_write or list_agents, nor any prerequisites.

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

folders_writeA
Destructive
Inspect

Create, edit or delete agent folders and move agents in or out. Actions: create (folder needs name; optional color, icon, starred, parentFolderID, agentIDs), update (folderId + folder with only the fields to change — use this to rename), delete (folderId; removes the folder only, agents are kept), add_agent / remove_agent (folderId + agentId).

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
actionYes
folderNo
agentIdNoRequired for add_agent / remove_agent.
folderIdNoRequired for every action except create.

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already declare destructiveHint=true and openWorldHint=true, but the description adds valuable action-specific behavior: delete removes the folder only and keeps agents, update should include only changed fields, and add_agent/remove_agent move agents in or out. It does not cover permissions, error behavior, or return values, so it is not fully exhaustive.

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

Conciseness5/5

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

The description is front-loaded with the overall purpose and then organized by action in a compact, dense sentence. Every clause carries actionable information about parameters or side effects, 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?

For a destructive, multi-action tool with a nested folder object and no output schema, the description covers invocation well by explaining each action and its required fields. It still omits return/error behavior and permission requirements, so an agent lacks some context around outcomes and authorization.

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

Parameters5/5

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

The description compensates for partial schema coverage by explaining conditional parameter requirements per action: create needs folder.name and accepts optional color/icon/starred/parentFolderID/agentIDs, update needs folderId plus a partial folder object, delete needs folderId, and add_agent/remove_agent need folderId plus agentId. This adds substantial meaning beyond the raw 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 states a specific resource, agent folders, and enumerates the exact operations: create, edit, delete, add_agent, and remove_agent. This clearly distinguishes it from the read-only sibling folders_read by making the write/move scope explicit.

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 gives per-action guidance, including required fields, the note that update should be used to rename, and the important caveat that delete removes only the folder while keeping agents. It does not explicitly state when to use folders_read instead or when not to use this tool, which keeps it from a 5.

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

generate_conversation_summariesA
Read-only
Inspect

Generate one-paragraph AI summaries for up to 25 conversations, in each conversation language. Simple form: agentId + convoIds (transcripts are loaded for you). Advanced: items [{ convoId, transcript }] with your own text. Returns the summaries only — it does not store them (use update_conversation to save one).

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
itemsNo
agentIdNoRequired with convoIds.
convoIdsNoUp to 25 conversation ids.

TDQS

A4.4/5.0
Behavior4/5

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

Adds real context beyond the annotations: the 'does not store' side-effect clarification, the 25-item cap, the transcript auto-loading, and the per-conversation-language output. It does not mention cost, latency, or what happens on an invalid convoId or >25 items, and the non-idempotent AI-generation behavior implied by idempotentHint=false isn't spelled out.

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, each doing distinct work: capability, simple path, advanced path, plus the storage caveat. The most important constraint (non-persistence) is placed last but is short enough not to be buried.

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

Completeness4/5

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

No output schema exists, and the description covers the key contract ('Returns the summaries only'), but does not indicate the response shape (e.g. array keyed by convoId, ordering, or how failures for individual ids surface). For a batch AI-job tool that is a small but real gap; everything else an agent needs to invoke it correctly is present.

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 75% and the description still adds meaning: it pairs agentId with convoIds as one mode and explains that items carry 'your own text' instead of auto-loaded transcripts, which clarifies the otherwise ambiguous two mutually exclusive param groups. The mode enum is already fully documented in the schema, so the description doesn't repeat it.

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 ('Generate one-paragraph AI summaries for up to 25 conversations, in each conversation language') and immediately distinguishes itself from the mutating siblings by noting the output is not persisted. The batch limit and per-conversation-language output are concrete and differentiating.

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 separates the two invocation paths ('Simple form: agentId + convoIds' vs 'Advanced: items [...] with your own text') and names the follow-up tool for persistence ('use update_conversation to save one'). It stops short of saying when to prefer this over simply calling get_conversation and summarizing elsewhere, but the alternative routing is largely handled.

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

generate_lead_funnelA
Read-onlyIdempotent
Inspect

Draft lead-funnel steps (qualification stages and scoring) from an agent prompt with AI. Returns the suggested steps only — save them with update_agent funnelConfig. Pass the agent prompt text; get it from get_agent if needed. Actions: generate — suggest funnel steps

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
actionYes
userNotesNoExtra guidance, e.g. what a hot lead means for this business.
agentPromptYesThe agent instructions to analyse.
existingStepsNoCurrent steps to refine instead of starting over.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive, open-world behavior. The description adds important context beyond those hints: the tool drafts suggestions with AI and does not persist them, so the agent knows a separate update_agent call is required to save.

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 short, front-loaded with the core action, and every sentence carries useful information. It moves efficiently from purpose to return behavior to parameter sourcing to action enumeration.

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, and the description compensates by stating that the tool returns suggested steps only. It covers the save path and prompt source, which are the main operational details. It could mention the existingSteps refinement path, but the remaining schema fields are documented.

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 80%, so most parameters are already documented in the schema. The description adds useful sourcing guidance for agentPrompt via get_agent, but it does not explain existingSteps, userNotes, or mode beyond what the schema already says. Baseline 3 is appropriate when the schema does most of the work.

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: drafting lead-funnel qualification stages and scoring from an agent prompt using AI. It clearly distinguishes this from update_agent, which is named as the save path, so an agent can tell what this tool does and does not do.

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

Usage Guidelines4/5

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

The description explains that the tool returns suggested steps only and that they must be saved separately with update_agent funnelConfig. It also tells the agent to pass agent prompt text and get it from get_agent if needed. It does not give explicit exclusions, but the context is clear enough to select the tool.

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

get_agentA
Read-onlyIdempotent
Inspect

Retrieve details of a specific Convocore agent. Main prompt is always nodes[0].instructions (enableNodes is true for agents created via this MCP). Legacy vg_instructions only if nodes are absent on a very old agent. ownerID is the workspaceId and is read-only. Response includes prototypeUrl / tryItUrl — share that public demo with the user (https://app.convocore.ai/{eu|na}/prototype/{agentId}). Never invent /agents/ links.

NameRequiredDescriptionDefault
agentIdYesThe unique identifier of the agent

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is covered. The description adds real context beyond that: the prompt resolution hierarchy, that ownerID is read-only and equals workspaceId, and the shape of the returned demo URLs. It does not mention error/not-found behavior for an invalid agentId.

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 purpose, then dense but useful resolution rules and anti-hallucination constraints. Every sentence carries information; the URL-format aside is slightly compressed and would read better as its own clause, but nothing is wasted.

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 does the work of explaining key return fields (instructions location, ownerID, prototypeUrl/tryItUrl) and how to present them. It is nearly complete; only error behavior and the relationship to sibling retrieval tools is left out.

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 with 100% schema description coverage, giving a baseline of 3. The description does not add anything about agentId itself (format, where to obtain it); its detail is about response fields such as ownerID rather than input 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: 'Retrieve details of a specific Convocore agent.' Sibling tools like list_agents and search_agents are never named, so the agent must infer that this is the single-record fetch rather than a listing/search tool.

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 operational guidance on how to interpret the result (read instructions from nodes[0].instructions, fall back to legacy vg_instructions, share prototypeUrl with the user, never invent /agents/ links) but never states when to choose this over list_agents, search_agents, or get_agent_usage. Usage is implied rather than scoped.

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

get_agent_audit_logA
Read-onlyIdempotent
Inspect

Read the change history of an agent: who changed what and when (newest first). Use it to explain an unexpected behaviour change or find when a setting was edited. Paginate by passing the ts of the last entry as cursorTs.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
limitNoMax 100.
agentIdYes
cursorTsNoReturn entries older than this timestamp.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotent, non-destructive). The description adds ordering semantics ('newest first') and the pagination contract for cursorTs, which go beyond annotations. It stops short of describing entry fields or rate/volume limits, so not 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 tight sentences: purpose and ordering front-loaded, then usage, then pagination mechanics. No filler or repetition of schema content.

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

Completeness4/5

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

No output schema exists, but the description conveys the essential return shape (who/what/when, newest first) and how to page through results. Minor gap: entry granularity and what fields identify the actor are not spelled out, though adequate for correct invocation.

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

Parameters4/5

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

Schema coverage is 75%, so mode and limit are documented in the schema. The description adds operational meaning to cursorTs ('passing the ts of the last entry'), turning a bare timestamp filter into a concrete pagination workflow. agentId's meaning is implied by the tool purpose.

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: 'Read the change history of an agent: who changed what and when (newest first).' This clearly distinguishes it from sibling tools like get_agent_usage, get_agent, or list_agents, none of which are audit logs.

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 two concrete use cases: 'explain an unexpected behaviour change' and 'find when a setting was edited.' That is clear context for invocation, but it doesn't name alternatives or exclusion conditions (e.g., when to use this vs. get_agent_usage or agent_backups_read).

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

get_agent_channelsA
Read-onlyIdempotent
Inspect

Check which channels are connected to an agent: WhatsApp numbers and Facebook pages (Messenger, plus Instagram when an Instagram account is linked to the page). Use it to answer "is my WhatsApp / Instagram connected?" and to confirm a connection after the user finished a connect link. Credentials are never returned. For WhatsApp reply rules use get_whatsapp_ai_rules.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
agentIdYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered structurally. The description adds a genuinely useful non-obvious trait: credentials are never returned, which tells the agent the response is sanitized. It stops short of describing pagination or response shape, so not 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 compact sentences, front-loaded with the core action and result contents, followed by usage framing and a sibling pointer. 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?

No output schema exists, so the description carries the burden of describing returns, and it does: enumerated channel types plus the note that credentials are excluded. Read-only safety is covered by annotations. Only the 'mode' compact/full behavior and agentId are left to the schema, which is acceptable.

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 only 50%: the 'mode' enum is well documented in the schema, but 'agentId' has no description anywhere. The description never mentions either parameter, so it does not compensate for the undocumented required ID beyond the implicit notion of 'an agent'. The scoping language does clarify what channels the result covers, but that is response content rather than parameter 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?

States a specific verb (check) and resource (channels connected to an agent), then enumerates the channel types returned: WhatsApp numbers, Facebook pages, and Instagram when linked. This is clearly distinguishable from siblings like create_channel_connect_link or get_whatsapp_ai_rules.

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 use cases ('is my WhatsApp / Instagram connected?' and confirming a connection after a connect link) and routes the agent away for a related-but-different need: 'For WhatsApp reply rules use get_whatsapp_ai_rules.' Both when-to-use and an alternative are spelled out.

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

get_agent_custom_cssA
Read-onlyIdempotent
Inspect

Read the agent's current customCSS field (the per-agent CSS override applied to the chat widget). Returns the raw CSS string (empty string if none set). Use this before editing so you can produce a merged result for update_agent_custom_css.

NameRequiredDescriptionDefault
agentIdYesThe agent ID whose customCSS field you want to read

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so the safety profile is covered. The description adds real value beyond that by disclosing the return shape ('raw CSS string, empty string if none set'), which the agent cannot get anywhere else since no output schema exists.

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: what it reads, what it returns, and when to use it. The core purpose is front-loaded and the caller guidance closes the description.

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

Completeness5/5

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

For a single-parameter read tool, the description covers purpose, return value semantics (including the empty-string case, which prevents an agent from misreading an empty result as an error), and workflow placement relative to the update sibling. Nothing an agent needs 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 the single agentId parameter is documented there. The description does not add format, source, or constraint detail beyond 'the agent ID whose customCSS field you want to read', so it performs at the baseline where the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource (read the agent's customCSS field) and immediately clarifies what that field is (the per-agent CSS override applied to the chat widget). That parenthetical alone distinguishes it from generic agent reads like get_agent and from the write counterpart update_agent_custom_css.

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

Usage Guidelines5/5

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

Explicitly says when to call it: 'Use this before editing so you can produce a merged result for update_agent_custom_css.' This names the alternative (the write sibling) and the sequencing condition that selects this tool, leaving nothing to inference.

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

get_agent_phoneA
Read-onlyIdempotent
Inspect

Get the phone number(s) assigned to an agent for voice calls. Check this before start_outbound_call — an agent without a number cannot call.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
agentIdYes

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, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds a real behavioral fact beyond that — the precondition relationship to outbound calling — though it says nothing about what an empty result means.

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, front-loaded with the purpose and followed by the prerequisite. Nothing is wasted and nothing is buried.

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

Completeness4/5

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

For a simple read-only lookup with no output schema, the description covers purpose and the calling precondition adequately; what it omits (return shape when no number exists, whether multiple numbers are ordered) is minor but not trivial for a prerequisite check.

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?

agentId is required and self-evident, and mode is fully documented by the schema enum description (compact vs full). With 50% coverage and no parameter detail added in the description, 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?

Names a specific verb and resource ('Get the phone number(s) assigned to an agent') and scopes it to voice calling, which separates it from get_agent and list_agents. An agent can tell exactly what this returns 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 a concrete when-to-use rule: call this before start_outbound_call, with the reason (an agent without a number cannot call). It doesn't name alternative lookups or say what to do when no number is returned, so it falls short of explicit alternatives.

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

get_agent_toolA
Read-onlyIdempotent
Inspect

Get one Convocore agent HTTP tool by toolId (includes fields, serverUrl, method). Does not call the remote URL — use test_agent_tool_request for that.

NameRequiredDescriptionDefault
toolIdYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so safety is covered. The description still adds real behavioral value by stating the tool performs no outbound HTTP call, which is exactly the ambiguity a 'get ... HTTP tool' name creates.

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; the core purpose leads and the constraint/alternative follows. Every clause carries information an agent would otherwise have to guess.

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, and the description compensates by previewing the returned shape (fields, serverUrl, method). Combined with the no-network clarification, an agent has enough to call it correctly; only toolId provenance is unaddressed.

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 single parameter toolId is typed only as a bare string. The description clarifies that toolId identifies a Convocore agent tool, but adds no format, source, or example for the value, leaving the caller to infer how to obtain one.

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 ('Get one ... agent HTTP tool') plus the lookup key ('by toolId'), and names the distinguishing content (fields, serverUrl, method). An agent can separate it from list_agent_tools and test_agent_tool_request 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 Guidelines4/5

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

Explicitly rules out the likely misinterpretation with 'Does not call the remote URL — use test_agent_tool_request for that,' naming the correct alternative and the condition that selects it. The only gap is that it never says to use list_agent_tools to discover a valid toolId.

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

get_agent_usageB
Read-onlyIdempotent
Inspect

Get agent usage statistics and credits consumed

NameRequiredDescriptionDefault
rangeNoOptional date range for usage stats
agentIdYesThe agent ID to get usage for

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds only the fact that credits consumed are returned; it says nothing about default date-range behavior, timezone/aggregation, or what happens if range is omitted.

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?

A single front-loaded sentence with no filler. It is efficient, though its brevity leaves the definition thin rather than optimally structured.

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 is simple (one required param, fully documented schema, no output schema) and annotations cover the safety profile, so the description is minimally sufficient. It still omits what the returned statistics comprise and how the optional range defaults, which an agent would need to call it confidently.

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%, including nested from/to ISO date documentation, so the schema carries parameter meaning. The description adds nothing beyond it, making baseline 3 appropriate.

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

Purpose4/5

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

The description names a specific verb and resource ('Get agent usage statistics and credits consumed'), so an agent knows exactly what data is being fetched. It does not, however, distinguish itself from the sibling get_agent_usage_bulk, leaving the single-vs-bulk choice implicit.

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?

There is no guidance on when to use this tool versus get_agent_usage_bulk, nor any stated prerequisites (e.g., whether the caller needs an agent ID they own). The agent must infer usage entirely from the name.

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

get_agent_usage_bulkB
Read-onlyIdempotent
Inspect

Fetch usage/credits for many agents in one call (fan-out). Max 20 agentIds. Optional shared date range.

NameRequiredDescriptionDefault
rangeNoOptional date range
agentIdsYesAgent IDs (1–20)

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds the batching cap semantics and that the date range is shared across all agents, but says nothing about partial-failure behavior, per-agent ordering, or whether results are aggregated — useful but modest added context.

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, front-loaded with the core action and the key constraint. Slight redundancy: 'Max 20 agentIds' duplicates the schema's '(1–20)' and '(fan-out)' is jargon that adds little.

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 never indicates what comes back — per-agent usage objects, totals, error entries for unknown IDs — nor whether the result preserves input order. For a nested-parameter read tool this leaves a real gap, though the annotations and schema cover the input side well.

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 both parameters are documented there, including 'Agent IDs (1–20)' and the ISO from/to fields. The description's 'Max 20 agentIds' and 'Optional shared date range' largely restate the schema, adding only the notion that one range applies to every agent — 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 and resource ('Fetch usage/credits for many agents') and the batching scope ('in one call (fan-out)'), which distinguishes it from the singular get_agent_usage sibling without naming it. An agent can infer the bulk-vs-single split, though explicit sibling naming would make it airtight.

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?

'For many agents in one call' implies the bulk scenario, but the description never says when to prefer this over get_agent_usage (e.g., single agent, >20 agents, need for combined totals) nor any exclusions. Usage is implied rather than stated.

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

get_agent_variableA
Read-onlyIdempotent
Inspect

Get one Convocore agent variable by variableId. The value of an environment variable (isEnv) is masked.

NameRequiredDescriptionDefault
variableIdYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds a meaningful behavioral detail beyond annotations: environment variable values are masked when isEnv applies.

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 short sentences, front-loaded with the primary action and followed by the masking exception. There is no redundant or filler text.

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

Completeness4/5

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

For a simple read-only getter with annotations covering safety and no output schema, the description provides enough to call it correctly. The main remaining gap is that it does not explain how an agent should obtain a valid variableId.

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 for the single variableId parameter. It references variableId but does not explain its format or likely source, such as list_agent_variables, leaving only minimal semantic value beyond the parameter name.

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 verb and resource: get one Convocore agent variable by variableId. It clearly distinguishes fetching a single item from the sibling list_agent_variables, though it does not explicitly name that alternative.

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: call this when you need one agent variable identified by variableId. There is no explicit guidance on when to use this versus list_agent_variables or update_agent_variable, nor any stated prerequisites.

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

get_channel_integration_specA
Read-onlyIdempotent
Inspect

Return static Convocore channel-integration schema guidance for MCP clients. Use this before configuring or explaining WhatsApp, Facebook Messenger, Instagram, or SMS routing. It clarifies canonical storage locations, safe update fields, read-only/system-managed fields, credential masking, WhatsApp coexistence/AI behavior settings, Messenger/Instagram page mapping, and why Twilio SMS tools must not be used for WhatsApp Cloud API numbers. Static knowledge — does NOT hit the API.

NameRequiredDescriptionDefault
sectionNoWhich section to return. "whatsapp" covers waNumbers, coexistence, AI reply controls, voice settings, safe patch matrix, and recommended tools. "metaPages" covers Facebook Messenger/Instagram page docs. "sms" covers Twilio SMS separation.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the read-only, idempotent, safe profile; the description adds genuinely new behavioral facts, chiefly 'Static knowledge — does NOT hit the API', which tells the agent there are no side effects or rate limits. It also previews the content categories (credential masking, system-managed fields), though it does not describe the return shape or size.

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 purpose and the 'use before' trigger are front-loaded in the first two sentences, and the trailing list of clarifications earns its space by telling the agent what topics are answerable. The middle sentence is a long comma run-on that could be trimmed, but nothing is redundant with 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?

With one optional enum parameter, no output schema, and rich annotations, the description gives enough to decide and invoke correctly, including the key 'no API call' fact. It could be stronger by indicating the shape/format of the returned guidance, which is the one thing an agent cannot infer.

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 enum's own description already explains every section value in detail, so the description adds nothing about the 'section' parameter. Baseline 3 applies: the schema carries parameter semantics entirely.

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 ('Return') plus a precisely scoped resource ('static Convocore channel-integration schema guidance for MCP clients'), and it enumerates the domains covered (WhatsApp, Messenger, Instagram, SMS). It is clearly distinguishable from siblings like whatsapp_numbers_read or meta_pages_read, which touch live data, because it states this is static schema guidance, not an API read.

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 this before configuring or explaining WhatsApp, Facebook Messenger, Instagram, or SMS routing' gives a concrete call context, and the Twilio/WhatsApp Cloud API warning steers the agent away from a wrong tool path. However, it never states when NOT to use this tool or names a specific sibling to prefer for live data.

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

get_conversationC
Read-onlyIdempotent
Inspect

Get details of a single conversation

NameRequiredDescriptionDefault
agentIdYesThe agent ID
convoIdYesThe conversation ID

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and non-destructive, so safety is covered. The description adds nothing beyond that: it doesn't say whether 'details' include messages, notes, or metadata, nor under what conditions the call fails (unknown convoId, wrong agentId, cross-workspace). For a lookup whose main risk is a wasted/incorrect call, that is a real gap.

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?

A single front-loaded sentence with no filler. It is efficient, though its brevity tips into under-specification rather than pure concision.

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?

There is no output schema, so the description is the only place an agent could learn what a 'detail' payload contains and how it differs from a list entry. It supplies none of that, leaving the tool under-described for a no-output-schema read.

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

Parameters3/5

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

Schema coverage is 100% with two fully described required parameters, so the schema carries parameter meaning. The description adds no semantics of its own, such as whether agentId must own convoId or whether the IDs are global — baseline 3 is correct.

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?

Clear specific verb (get) and resource (a single conversation), and 'single' distinguishes it from list_conversations reasonably well. However, it doesn't differentiate itself from query_conversations or get_conversations_bulk, which plausibly return similar conversation records.

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 when-to-use statement and no alternatives named, despite four sibling conversation-read tools in the list. The agent must infer that this is the by-ID lookup versus the list/query/bulk variants.

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

get_conversations_bulkA
Read-onlyIdempotent
Inspect

Fetch lean summaries for many conversation IDs in one call (fan-out GETs with concurrency). Returns {ID, summary, ts, capturedVariables, userName, origin} per convo. Max 50 IDs per call — chunk larger audits. Workflow: list_conversations with cursor to collect IDs, then this tool (do NOT loop get_conversation).

NameRequiredDescriptionDefault
agentIdYesThe agent ID
convoIdsYesConversation IDs (1–50)

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description still adds real value: the fan-out/concurrency implementation, the 50-ID ceiling, and the returned field set. It stops short of stating what happens on partial failure or invalid IDs in a batch, which matters for a 50-item fan-out.

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 it does and what it returns, then the limit, then the workflow. Dense but zero filler; each clause carries an actionable 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?

Even with no output schema, the description enumerates the return shape ({ID, summary, ts, capturedVariables, userName, origin}) and gives both the batching constraint and the surrounding workflow. An agent has everything needed to call it correctly in a bulk-audit scenario.

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 the practical bound ('Max 50 IDs per call — chunk larger audits') that the schema's '1–50' note doesn't operationalize, and characterizes the payload as lean summaries rather than full conversations.

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?

Specific verb+resource with scope: 'Fetch lean summaries for many conversation IDs in one call'. It distinguishes itself from get_conversation ('do NOT loop get_conversation') and from list_conversations (which supplies the IDs), so an agent can route correctly 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?

Gives an explicit workflow ('list_conversations with cursor to collect IDs, then this tool'), an explicit anti-pattern ('do NOT loop get_conversation'), and a hard operating limit with a remedy ('Max 50 IDs per call — chunk larger audits'). Nothing 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.

get_kb_docC
Read-onlyIdempotent
Inspect

Get a single knowledge base document

NameRequiredDescriptionDefault
docIdYesThe document ID
agentIdYesThe agent ID

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered. The description adds nothing beyond that — no note on what happens if the docId is unknown or belongs to another agent.

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?

A single front-loaded sentence with zero waste. It is terse but appropriately sized for the operation; the shortfall is informativeness, not structure.

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 fetch-by-ID tool with no output schema, the description says nothing about the returned document shape, error behavior on missing docs, or cross-agent ID handling. Annotations cover safety but not return semantics.

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

Parameters3/5

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

Schema coverage is 100%, so both agentId and docId are documented in the schema. The description adds no semantics such as whether docId is scoped per agentId or what format IDs take; 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 ('Get') and resource ('a single knowledge base document'), and the word 'single' implicitly contrasts with list_kb_docs and get_kb_docs_bulk. However it never names those siblings, so the 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 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 versus search_kb_docs, list_kb_docs, or get_kb_docs_bulk, and no prerequisites stated. The agent must guess that this is the by-ID fetch path.

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

get_kb_docs_bulkA
Read-onlyIdempotent
Inspect

Fetch many KB documents in one call (fan-out). Max 30 docIds. Default returns compact metadata + chunksPreview; set includeContent=true for full bodies.

NameRequiredDescriptionDefault
docIdsYesKB document IDs (1–30)
agentIdYesThe agent ID
includeContentNoInclude full chunks/content (default false)

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the description wisely spends its words on behavior instead: the 30-doc cap and the default compact return shape versus full bodies. It does not say what happens if some IDs are invalid or not found, which is the main remaining gap for a fan-out 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?

Two short sentences, both front-loaded: the batching purpose first, then the default-vs-opt-in payload distinction. No restatement of the name or title and nothing that could be cut.

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 correctly carries the return-shape burden by naming compact metadata, chunksPreview, and full content. Only partial-failure semantics for a 30-item fan-out are missing, a minor gap for a read-only tool.

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 the baseline is 3; the description earns above baseline by explaining what includeContent actually changes (full bodies vs. compact metadata plus chunksPreview) and by giving the hard upper bound of 30 on docIds.

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 (fetch KB documents) plus the defining scope: batch/fan-out in one call. It implicitly separates itself from get_kb_doc (single) but never names that or any other sibling, so it stops short of a clean 5.

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 phrase 'many KB documents in one call' implies when to use it, but there is no explicit guidance on when to choose it over search_kb_docs or list_kb_docs, nor any exclusion such as search-first-then-bulk.

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

get_kb_quotaA
Read-onlyIdempotent
Inspect

Get workspace KB document quota usage (GET /workspace/kb-docs/quota). Optional workspaceId; defaults to the authenticated workspace.

NameRequiredDescriptionDefault
workspaceIdNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds the non-obvious scoping behavior — workspaceId is optional and falls back to the authenticated workspace — which is real behavioral context an agent could not infer from the schema.

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, zero filler, with the primary action front-loaded and the parameter caveat following. Nothing repeats the name or title verbatim.

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 call mechanics are complete, but with no output schema the description never indicates what the quota response contains (used vs. limit vs. remaining) or whether it is per-workspace aggregated. For a read-only, single-param tool that is a modest but real gap.

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 carry the load, and it does: it identifies workspaceId as optional and explains what happens when it is omitted. That fully covers the only parameter, though it gives no hint about the expected ID format or where to obtain one.

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 ("Get workspace KB document quota usage") plus the backing endpoint, so the agent knows exactly what is being fetched. It does not, however, distinguish itself from the nearby get_kb_stats sibling, which an agent could plausibly confuse with quota reporting.

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 purpose — check KB storage/quota consumption — and the defaulting rule removes the main decision point. But there is no explicit when-to-use, no when-not-to-use, and no pointer to get_kb_stats or get_kb_docs_bulk as alternatives.

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

get_kb_statsB
Read-onlyIdempotent
Inspect

Get knowledge base statistics for an agent (VG agents only)

NameRequiredDescriptionDefault
agentIdYesThe agent ID

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds the VG-only applicability constraint, which is genuinely useful, but says nothing about what the 'statistics' consist of, despite there being 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?

One front-loaded sentence with zero waste. It is arguably too terse for a tool with no output schema, but nothing is redundant or buried.

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 is the only place a caller could learn what the returned statistics contain, and it does not say. The VG-only qualifier is a real and necessary addition, but the return shape remains opaque for a read tool whose siblings overlap.

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 with 100% schema description coverage ('The agent ID'), so the schema carries the parameter semantics. The description adds only the implicit note that the agent must be a VG agent, not any id format or lookup guidance.

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 (get knowledge base statistics) plus the scope (for an agent) and a platform restriction (VG agents only). An agent can grasp the purpose immediately, though it does not distinguish this from the nearby get_kb_quota sibling, which covers similar ground.

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 only guidance is the parenthetical '(VG agents only)' restriction. There is no statement of when to prefer this over get_kb_quota or get_kb_docs_bulk, nor any prerequisite, rate-limit, or failure context beyond the platform qualifier.

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

get_pricing_infoA
Read-onlyIdempotent
Inspect

Return Convocore pricing information so the assistant can quote plans, add-ons, voice/chat cost rules of thumb, credit conversions, and per-model token prices to the user. Use section to narrow the response: "plans", "add_ons", "credits", "rules_of_thumb", "models", "voice_providers", "faq", or "all" (default). When section="models", optionally pass modelFilter (substring match on model name or provider, e.g. "gpt", "claude") to only return matching rows. Static knowledge — does NOT hit the API and does NOT consume credits. Always remind users that prices may change and direct them to https://convocore.ai/pricing for the live numbers.

NameRequiredDescriptionDefault
sectionNoWhich slice of pricing to return. Default: "all".
modelFilterNoOptional substring match (model name or provider) when section="models". E.g. "gpt", "claude", "gemini".

TDQS

A4.3/5.0
Behavior5/5

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

Annotations declare readOnly/idempotent/non-destructive, and the description adds behavior annotations don't carry: this is static embedded knowledge, makes no API call, and consumes no credits. It additionally discloses the caveat that prices may change and routes users to the live pricing page, which is exactly the trust/compliance 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.

Conciseness4/5

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

Front-loaded with purpose, then usage, then caveat — a sensible order. Slightly padded by re-listing all eight enum values that the schema already defines, but every sentence carries actionable content.

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-optional-param, no-output-schema read tool this is largely sufficient: it describes what each section returns conceptually and how filtering narrows results. It stops short of describing the response shape (e.g. whether rows are objects or prose), which is the only real 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 both parameters are documented there, so the description is largely restating the enum list and the modelFilter substring rule. It does clarify the coupling between `modelFilter` and `section="models"`, but that is marginal value above 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?

Names a specific verb and resource ("Return Convocore pricing information") and enumerates exactly what content it covers: plans, add-ons, voice/chat cost rules of thumb, credit conversions, per-model token prices. No sibling tool competes for this purpose, so an agent can route here unambiguously.

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 how to narrow output via `section` and when to use `modelFilter` (only when section="models"). It also states the tool is static knowledge that does not hit the API or consume credits, plus a follow-up rule to point users at the live pricing URL. It lacks an explicit "use this when the user asks about cost" trigger sentence, but the context is clear.

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

get_ui_engine_specA
Read-onlyIdempotent
Inspect

Return the FULL Convocore UI Engine schema (the structured message format agents emit when vg_enableUIEngine: true). ALWAYS CALL THIS FIRST when: (a) testing a UI-Engine-enabled agent via interact_with_agent and you need to validate the output, OR (b) creating / updating an agent that should produce UI Engine output (so the system prompt teaches the LLM to emit valid text / choice / visual / cardV2 / carousel / iFrame / form / input / invoice / calendarBooking messages). Also documents agent feature flags (vg_enableUIEngineForms, vg_enableUIEngineInvoice, vg_enableUIEngineCalendarBooking, vg_uiEngineChannelConfig) used by update_agent to allow/deny which UI elements the agent may show. Returns: meta (streaming + channel-gating + agentFeatureFlags), envelopes (TurnProps / ChatMessage), messageTypes, shared types, rules, and a validationChecklist. Use section to narrow the response: "meta" | "envelopes" | "message_types" | "shared" | "rules" | "checklist" | "primer" | "all" (default). Use messageType to drill into a single message-type schema (e.g. "choice" or "form"). Static knowledge — does NOT hit the API and does NOT consume credits.

NameRequiredDescriptionDefault
sectionNoWhich slice of the spec to return. Default: "all".
messageTypeNoWhen set, return only the schema for this message type (overrides section). Use when you only need one shape.

TDQS

A4.6/5.0
Behavior4/5

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

Goes well beyond annotations by disclosing return structure (meta, envelopes, messageTypes, shared types, rules, validationChecklist), the static/no-API/no-credits nature, and the feature flags documented. There is a mild tension with openWorldHint=true since the description insists it does not hit the API, but the core safety annotations (readOnly, idempotent, non-destructive) are consistent and the cost/static disclosures are genuinely useful.

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 most important instruction ('ALWAYS CALL THIS FIRST') is front-loaded, and the sentence sequencing (when-to-call → what it documents → what it returns → how to narrow) is logical. It is dense and long, but nearly every clause is actionable rather than 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?

Despite no output schema, the description enumerates the return sections and their purposes, covers both parameters' effects, and states cost/static behavior. An agent has everything needed to call it correctly and interpret the shape.

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% and enums enumerate valid values, so the schema already carries baseline weight. The description nevertheless adds real meaning: it lists the effect of each section value, states the 'all' default, and explains that messageType overrides section — behavior the schema 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 (Return) and resource (FULL Convocore UI Engine schema) with scope clarified by referencing the feature flag vg_enableUIEngine: true. It clearly distinguishes itself from siblings like interact_with_agent and update_agent, which are referenced as consumers rather than duplicates.

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 prescribes when to call it ('ALWAYS CALL THIS FIRST when', with two concrete conditions a and b) and ties those conditions to the sibling tools interact_with_agent and update_agent. This is the strongest possible routing guidance.

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

get_voiceA
Read-onlyIdempotent
Inspect

Fetch full metadata + a preview MP3 URL for a single voice. Use after the user picks one from search_voices / list_provider_voices, or when they paste a voice ID. Read-only — does NOT consume credits.

NameRequiredDescriptionDefault
voiceIdYesProvider-specific voice ID (e.g. "21m00Tcm4TlvDq8ikWAM" for ElevenLabs Rachel).
providerYesProvider slug, e.g. "elevenlabs".

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, but the description adds context the annotations do not: that the call does NOT consume credits (a billing concern) and that the payload includes a preview MP3 URL. It stops short of describing error behavior for unknown voice IDs or whether metadata is cached/live.

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 short sentences, zero filler, with the core purpose front-loaded before the usage routing. Both sentences earn their place by carrying 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 simple 2-required-param read with no output schema, the description covers what it returns (metadata + preview MP3 URL), when to call it, and the cost profile. Missing only edge-case guidance such as behavior on an invalid voiceId or cross-provider ID mismatch.

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 schema already documents both provider and voiceId with a concrete example. The description adds no parameter-level meaning (e.g. that provider and voiceId must be a mutually consistent pair), so 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 and resource ('Fetch full metadata + a preview MP3 URL for a single voice'), and explicitly scopes it to one voice as opposed to the list/search siblings. An agent can distinguish it from search_voices and list_provider_voices 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 two concrete trigger conditions: after the user picks from search_voices / list_provider_voices, or when they paste a voice ID. It names the upstream alternatives and the condition that selects this tool, leaving nothing to inference.

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

get_website_embed_codeA
Read-onlyIdempotent
Inspect

MUST CALL whenever the user asks to deploy/embed/add their agent to a website, get the widget script, iframe code, popup chat bubble, or 'where is the code'. Returns a ready-to-paste HTML snippet with the real agent ID and region filled in (popup, full-width inline, modal, or React voice-only example). Do NOT redirect the user to the dashboard Channels/Deployment tab instead of returning this code. If agentId is unknown, call list_agents first, then call this tool.

NameRequiredDescriptionDefault
modeNopopup-bottom-right (default bubble), popup-bottom-left, full-width (sized div), modal (center overlay), voice-react (Next.js @tixae-labs/web-sdk).
agentIdYesThe Convocore agent ID to embed.
containerWidthNofull-width only, e.g. "500px".
containerHeightNofull-width only, e.g. "500px".

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered; the description adds genuinely useful behavior context — that the output is a complete, paste-ready snippet with real IDs/region substituted, and that it should not be short-circuited by pointing the user at the dashboard. It does not mention any rate limits or failure modes, but with annotations present that is a minor gap.

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 imperative 'MUST CALL' lead is front-loaded and the trigger enumeration ('widget script, iframe code, popup chat bubble, or where is the code') mirrors real user phrasing, so it earns its words. It runs slightly long with overlapping trigger phrases, but nothing is 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 read-only code-generation tool with full schema coverage and no output schema, the description covers purpose, triggers, exclusions, prerequisite lookup, and the shape of the returned snippet. An agent has everything needed to call it correctly without opening anything else.

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 enum and container params are already documented, but the description adds meaning the schema does not: the returned snippet comes with the real agent ID and region already filled in, and it tells the agent how to obtain agentId when unknown via list_agents. It stops short of explaining mode-specific behavior or how containerWidth/Height interact beyond the schema's 'full-width only' note.

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 (return a ready-to-paste HTML embed snippet) and enumerates the concrete artifacts produced (widget script, iframe, popup bubble, React voice example). It is clearly distinguishable from nearby siblings such as get_widget_css_styling_guide, which handles styling rather than embed code.

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 trigger conditions ('MUST CALL whenever the user asks to deploy/embed/add their agent to a website... where is the code'), an explicit exclusion ('Do NOT redirect the user to the dashboard Channels/Deployment tab'), and a prerequisite path ('If agentId is unknown, call list_agents first'). This is exactly the when/when-not/alternative structure the dimension rewards.

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

get_whatsapp_ai_rulesA
Read-onlyIdempotent
Inspect

Read the WhatsApp "AI rules" of a Convocore agent: the rules that decide whether the AI replies to an inbound WhatsApp message (dashboard: Channels → WhatsApp → AI rules). Returns inboundEngagement (null when never configured — then the AI replies to everything except what the legacy per-number guards block), the defaults, every WhatsApp number assigned to the agent with its phoneId and AI settings (aiPaused, newContactsOnly, coexistenceSettings), and warnings for configurations that keep the AI silent. Meta credentials are never returned. Call this before update_whatsapp_ai_rules / update_whatsapp_number_settings.

NameRequiredDescriptionDefault
agentIdYes

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already mark it as read-only, idempotent, and non-destructive, but the description adds substantial behavior: it explains the null inboundEngagement case, default reply behavior, returned number settings, warnings for silent-AI configurations, and that Meta credentials are never returned.

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 dense and front-loads the core purpose, then adds return-shape and usage details. It is longer than usual, but most sentences carry useful information; minor tightening would improve readability.

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 the returned fields, null semantics, warnings, and credential boundaries. Combined with annotations and the update prerequisites, it gives an agent enough context to call the tool correctly.

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

Parameters3/5

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

There is only one parameter, agentId, but schema description coverage is 0% and the description does not explicitly define it. The context strongly implies agentId identifies the Convocore agent whose rules are read, but the description adds little formal parameter semantics.

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: read the WhatsApp AI rules of a Convocore agent, with the exact decision domain (whether the AI replies to inbound messages) and UI location. It is clearly distinguishable from update_whatsapp_ai_rules and other sibling 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?

It gives an explicit usage rule: call this before update_whatsapp_ai_rules or update_whatsapp_number_settings. That is clear context for when to use it, though it does not spell out 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.

get_widget_css_styling_guideA
Read-onlyIdempotent
Inspect

MUST CALL FIRST whenever the user asks to style/restyle/theme the Convocore (vg) chat widget — e.g. 'change the icons to black', 'make the header purple', 'recolor the send button', 'theme the widget dark', 'change the user bubble color', 'restyle the proactive teaser'. Returns the FULL authoritative styling guide (the same SYSTEM_PROMPT used by Convocore's server-side AI CSS generator) including: (a) the global output rules (always wrap in ```css, always !important, never invent class names), (b) the CRITICAL compound-element CASCADE rule for color/icon changes (.vg-foo, .vg-foo , .vg-foo svg, .vg-foo path { color + stroke }), (c) hard constraints (don't color .vg-message-inner-container-human, don't hide the input, etc.), (d) the COMPLETE class & id map (.vg- selectors for every part of the widget — header, footer input, send button, messages, proactive bubble, notices, cards, voice mode, live agents, etc.), (e) the NextUI/Tailwind color system, and (f) ready-made selector recipes mapping plain-English asks to selectors. If you pass agentId, the agent's current customCSS is appended so the model can refine/extend it instead of duplicating rules. After calling this, generate CSS that strictly follows the guide, then call update_agent_custom_css to persist it.

NameRequiredDescriptionDefault
agentIdNoOptional. If provided, the agent's current customCSS is appended to the guide so you can extend/refine the existing rules instead of duplicating them.

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, it discloses that the response is the same SYSTEM_PROMPT used server-side, that agentId causes the agent's current customCSS to be appended, and what to do with the result. That is behavior the annotations cannot convey.

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 critical instruction ('MUST CALL FIRST') is front-loaded and the closing sentence defines the workflow. The parenthetical (a)-(f) enumeration is dense and longer than strictly necessary, but each item corresponds to guide content the agent will receive, so nearly every phrase earns its place.

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

Completeness5/5

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

No output schema exists, yet the description enumerates exactly what the return contains and how agentId modifies it, and it names the follow-up persistence tool. An agent has everything needed to call it and act on 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?

Schema coverage is 100% and the schema already describes agentId; the description reinforces its purpose (append existing customCSS so rules are extended rather than duplicated), which is the key semantic nuance. No further syntax detail is needed for a single optional string.

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 (get) and resource (widget CSS styling guide) plus the exact scope it covers, listing the guide's sections (a)-(f). The trigger examples and the explicit mention of Convocore/vg widget make it impossible to confuse with sibling tools like get_agent_custom_css or update_agent_custom_css.

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?

Opens with an explicit 'MUST CALL FIRST whenever...' condition, gives five concrete trigger phrases, and closes with the downstream step: generate CSS following the guide, then call update_agent_custom_css. Both when-to-use and the sequence relative to a sibling are spelled out.

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

import_agentAInspect

Import an agent from a template produced by export_agent / the OpenAPI export-template route. The template shape is complex; do not invent it manually unless the user provides an exact exported object.

NameRequiredDescriptionDefault
agentNameYesName for the imported agent
fromAgentIdNoOptional source agent ID to preserve import lineage/context when the backend supports it.
agentTemplateYesAgent template object from export_agent / export-template. Pass the exported template object through; do not manually invent nested template fields.

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare it is a non-read-only, non-idempotent, open-world write, so safety basics are covered. The description adds useful provenance/risk context about the complex template shape, but says nothing about what the import creates, whether an agent ID is returned, or duplicate-import behavior.

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, front-loaded with the method and source route, followed by a single risk warning. Nothing redundant.

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, so the description should say something about the result of an import (new agent ID, side effects, what lineage fromAgentId buys you). The critical caller risk (template shape) is covered, but outcome information is absent for a mutating, open-world tool.

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

Parameters3/5

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

Schema coverage is 100%, so all three parameters (agentName, fromAgentId, agentTemplate) are already documented, including the warning not to invent nested fields. The description reinforces provenance for agentTemplate but largely repeats what the schema says, 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 (import) and resource (agent) plus the required source artifact (a template produced by export_agent / the OpenAPI export-template route), which ties it to a concrete sibling. It does not differentiate from other creation paths like create_agent_from_template or clone_agent, so the boundary is only partially drawn.

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 an explicit precondition (template must come from export_agent / the export-template route) and an explicit anti-pattern (do not invent the template shape manually unless the user supplies an exact exported object). It stops short of naming when to prefer the sibling alternatives.

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

import_file_to_kbAInspect

End-to-end shortcut: read any supported file (PDF / DOCX / XLSX / CSV / TXT / MD / JSON / HTML) and create a Knowledge Base document on the target agent in one call. The file is parsed locally to text/markdown and pushed to the agent's KB via create_kb_doc with sourceType='doc'. Use pages for PDFs and sheet for spreadsheets to control what gets ingested. Images are NOT supported here (they need OCR or vision — use read_image instead).

NameRequiredDescriptionDefault
urlNo
dataNo
nameNoKB document name. Defaults to the source filename.
pathNo
tagsNoOptional tags.
pagesNoPDF only: page selection.
sheetNoSpreadsheet only: which sheet to ingest (default: first).
agentIdYesTarget agent ID.
mimeTypeNo
asMarkdownNoPrefer markdown output (default: true).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover safety (not read-only, not destructive) and open-world behavior. The description adds real context beyond them: parsing happens locally, content is delivered as text/markdown with sourceType='doc', and ingestion can be narrowed via pages/sheet. It does not warn that repeated calls will create duplicate documents (relevant given idempotentHint=false), which is the one missing behavioral note.

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 the core behavior front-loaded, followed by the format-specific parameters and then the exclusion. No filler and no repetition of the title.

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 10-param, no-output-schema ingestion tool this is nearly complete: input types, parsing behavior, destination, and the image exclusion with a routing alternative. Missing only edge detail such as size limits or what a repeat call does to the KB.

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 60%, so the schema already documents many params including pages and sheet. The description reinforces which parameters apply to which file types (pages→PDF, sheet→spreadsheet), but leaves url/data/path/mimeType/asMarkdown unexplained, so it doesn't fully compensate 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?

Specific verb + resource + scope: it names the exact operation (read a file, create a KB document on a target agent), lists the supported file types, and explicitly labels itself a shortcut over the underlying create_kb_doc. An agent can distinguish it from create_kb_doc, read_pdf, and read_image 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 Guidelines4/5

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

Explicitly states the supported formats, the PDF/spreadsheet selectors, and the negative case with a named alternative (images → read_image). No explicit mention of when to prefer it over the composite read_pdf + create_kb_doc pair, but the framing as a shortcut makes the intent clear.

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

import_twilio_numberAInspect

Import a Twilio SMS/voice number you already own into the workspace (uses your Twilio account credentials). This is NOT a WhatsApp Cloud API connection; do not use it for waNumbers/Meta WhatsApp. Pass the full request body for /utils/import-twilio-number as an object — typically includes your Twilio account SID, auth token, the phone number, optional agentId and capabilities.

NameRequiredDescriptionDefault
payloadYesFull request body object for /utils/import-twilio-number.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true, idempotentHint=false), and the description adds genuinely new context: the operation consumes the caller's Twilio account credentials and proxies a specific backend endpoint. It stops short of saying what happens if the number is already imported elsewhere or whether validation occurs first.

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, each earning its place: purpose first, exclusion second, payload guidance third. No repetition of the tool name and 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?

For a single opaque payload wrapper with no output schema, the definition tells an agent what the call does, what credentials are needed, and what to put in the body. Missing only edge-case behavior (duplicate number handling, return value), which is a modest gap rather than a blocker.

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%, but the schema description is only a generic pointer ('Full request body object for /utils/import-twilio-number'), so the description carries the real semantic load by enumerating typical payload contents (account SID, auth token, phone number, optional agentId and capabilities). It does not mark which fields beyond payload are strictly required or give field formats.

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

Purpose5/5

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

States a specific verb and resource ('Import a Twilio SMS/voice number') plus scope ('you already own into the workspace'), and explicitly contrasts itself with the WhatsApp/Meta path named via waNumbers. An agent can distinguish this from siblings like sms_numbers_write or whatsapp_numbers_write 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 Guidelines4/5

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

Gives an explicit exclusion ('This is NOT a WhatsApp Cloud API connection; do not use it for waNumbers/Meta WhatsApp') and states the precondition (you must own the number and supply Twilio credentials). It does not name the specific sibling to use for WhatsApp numbers or point at check_twilio_number/sync_sms_twilio_number as related steps, so routing is clear but not fully closed.

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

inspect_fileA
Read-onlyIdempotent
Inspect

Cheap probe of a file (path / url / base64). Returns kind, mime, size, page count (PDF), sheet names (XLSX), line count (text), or pixel dimensions (image), plus an estimated token cost. ALWAYS call this first on anything larger than a few KB — use it to decide which read_* tool to call and which slice (pages / sheet / range) to request, so you don't blow the context window.

NameRequiredDescriptionDefault
urlNohttps:// URL. Mutually exclusive with path/data.
dataNoBase64 file contents. Mutually exclusive with path/url.
pathNoLocal file path. Mutually exclusive with url/data.
mimeTypeNoOptional MIME hint (mostly for `data` mode).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, open-world, and non-destructive behavior. The description adds useful behavioral context beyond that: it is a cheap metadata probe, returns estimated token cost, and is intended to prevent context-window blowout. It does not detail URL auth or size limits, but the added cost/decision context is substantial.

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 purpose is front-loaded in the first phrase, and the second sentence gives the operational rule and rationale. It is dense but every clause earns its place by clarifying output, cost, or usage.

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

Completeness5/5

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

Covers what it returns, why it should be used before full reads, and how it helps select slices. With full schema coverage and rich annotations, the only missing details are minor (e.g., URL auth), and the description is complete enough for an agent to call it correctly.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents the path/url/data mutually exclusive modes and the optional mimeType hint. The description mentions the three input modes but adds no syntax, format, or precedence details beyond what the schema provides. 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?

States a specific action (cheap probe) and resource (file via path/url/base64), and lists the metadata it returns. It clearly distinguishes itself from the read_* sibling tools, which perform full content reads, by positioning itself as the pre-flight inspection step.

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 to ALWAYS call this first on anything larger than a few KB, and explains the decision it enables: choosing which read_* tool and which slice to request. This is strong when-to-use guidance tied directly to sibling selection.

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

integrations_readA
Read-onlyIdempotent
Inspect

See every integration of the workspace exactly like the dashboard Integrations page: Google Calendar, Outlook Calendar, Google Sheets, Airtable, Shopify, Calendly, Zoho CRM, Gmail, Outlook mail, Zoho Mail and Google Drive. Start with all_connections (every connection id, account, and which agents use it), then agent_integrations to see and debug what one agent has configured (it lists problems such as a missing calendar, a deleted connection or an inbox whose notifications stopped). resources lists what can be picked for an agent: calendars (google_calendar / outlook_calendar), spreadsheet tabs + header columns (google_sheets, pass sheetId), Airtable bases then tables + fields (pass baseId), Calendly event types, Zoho CRM modules, Shopify store check. A first connection (OAuth login) is always made by the user on the dashboard Integrations page; everything after that is done with integrations_write and integrations_test. Actions: all_connections — every connection of every integration, with the agents using each | agent_integrations — one agent's integrations, settings and detected problems Needs: agentId. | resources — calendars / sheet tabs + headers / Airtable bases, tables, fields / Calendly event types / Zoho modules / Shopify check Needs: type. | calendly_event_types — Calendly event types that can be offered by agents | outlook_connections — connected Outlook accounts | outlook_calendars — calendars of a connected Outlook account Needs: connectionId. | zoho_connections — connected Zoho CRM accounts | zoho_modules — Zoho modules (Leads, Contacts, Deals…) Needs: connectionId. | zoho_fields — fields of a Zoho module Needs: connectionId, moduleApiName. | zoho_agent_config — how an agent syncs with Zoho (lookup and field mapping) Needs: agentId. | zoho_assigned_agents — agents that use Zoho CRM

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
typeNoFor resources: which integration.
forceNoFor zoho_fields: bypass the cache.
orgIdNoOptional organization scope.
typesNoFor all_connections: only these integrations.
actionYes
baseIdNoFor resources type=airtable: base id → its tables and fields.
agentIdNo
sheetIdNoFor resources type=google_sheets: spreadsheet id → its tabs and header row.
connectionIdNoIntegration connection id (from integrations_read all_connections).
sheetTabNameNoFor resources type=google_sheets: tab whose headers to read (default first tab).
moduleApiNameNoFor zoho_fields: Zoho module API name, e.g. "Leads".
headerRowIndexNoFor resources type=google_sheets: header row number (default 1).
includeAgentUsageNoFor all_connections: include which agents use each connection (default true).

TDQS

A4.4/5.0
Behavior4/5

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

The annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description goes beyond that by disclosing troubleshooting content (agent_integrations surfaces missing calendars, deleted connections, quiet inboxes), the caching behavior around zoho_fields/force, and the compact-vs-full response payload tradeoff. It stops short of stating rate limits or return shapes, which keeps it at 4 rather than 5.

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?

It is front-loaded correctly, opening with purpose and routing, but the body is a dense wall of text that repeats itself: the 'resources' drill-down is described once in prose and again in the actions list, and the integration enumeration appears twice. Every sentence is defensible in isolation, yet the redundancy costs scan-ability for an agent parsing eleven actions.

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-action, 14-parameter dispatcher with no output schema, the definition covers what each action needs and roughly what it returns, including the debugging use case. The main remaining gap is the shape of returned connection/resource objects, but the action-by-action 'Needs:' mapping plus the mode flag gives an agent enough 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?

Schema description coverage is 86%, so the per-parameter docs already carry most of the load. The description still adds real semantic value by binding parameters to actions ('Needs: agentId', 'Needs: connectionId, moduleApiName') and by explaining the baseId → tables → fields and sheetId → tabs → headers drill-down paths, which the flat schema cannot express.

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 first sentence states a specific verb and resource ('See every integration of the workspace exactly like the dashboard Integrations page') and enumerates the eleven integrations covered, so scope is unambiguous. It also draws a hard line against the write/test siblings by noting that writes go through integrations_write and integrations_test, letting an agent separate this tool from its nearest neighbors 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?

Explicit routing is given: 'Start with all_connections ... then agent_integrations to see and debug what one agent has configured', followed by when to use resources and each of the narrower actions. It also states a precondition — the first OAuth connection is always made by the user on the dashboard — which prevents an agent from trying to create a connection here. That is an unusually complete when/when-not/alternative statement.

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

integrations_testA
Destructive
Inspect

Test an agent's integration tools with the agent's REAL runtime code and settings. inspect (no side effects): the exact tool names, descriptions and parameters the agent sees for that integration — use it to debug why the agent misuses a tool. run: executes one of those tools with the given args, exactly as if the agent called it, and returns its output or error. Safe checks first: google-calendar / outlook-calendar check-availability or lookup-events, google-sheets read / lookup, airtable read, shopify read, calendly list_event_types / check_availability. create / update / delete events, sheet writes and Airtable creates really happen — confirm with the user before running those. Actions: inspect — what the agent sees for this integration (names, descriptions, parameters) | run — run one tool with args, as the agent would

NameRequiredDescriptionDefault
argsNoFor run: the tool arguments, matching the parameters from inspect.
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
orgIdNoOptional organization scope.
actionYes
toolIdYes
agentIdYes
toolNameNoFor run: which tool from inspect (calendars expose several, e.g. one per method).

TDQS

A3.9/5.0
Behavior4/5

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

Goes beyond the destructiveHint=true annotation by partitioning the tool's behavior: inspect has no side effects, while run performs real writes (event create/update/delete, sheet writes, Airtable creates) that require user confirmation. That is meaningful disclosure of what actually gets mutated, though return-size behavior via mode and auth/prerequisite requirements are not covered.

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?

Core behavior is front-loaded and the safety warning is well placed, but the closing 'Actions: inspect — … | run — …' sentence restates what the first two sentences already said, adding bulk without new 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 does the necessary work of saying what each action yields: inspect returns the names, descriptions and params the agent sees, run returns the tool's output or error. Enough for a 7-param, side-effecting tool, with only permission/prerequisite context and mode's effect on results left implicit.

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 schema leaves `action` and `agentId` undescribed, and the description compensates by defining inspect vs run and their required context. It also explains `toolName` as the tool from inspect output and `args` as matching inspect's parameters, adding relational meaning the schema doesn't convey; mode and orgId are left to the schema.

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: testing an agent's integration tools against its real runtime code and settings, and splits that into inspect vs run with distinct semantics. It doesn't differentiate itself from the sibling test_agent_tool / test_agent_tool_request tools, so an agent can't tell from this description alone which testing tool to reach for.

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?

Explicit when-to-use: inspect to debug why an agent misuses a tool, run to reproduce the agent's exact call, plus a concrete list of safe read-only checks to start with and an instruction to confirm destructive operations with the user first. It gives no guidance on choosing between this and the sibling test_agent_tool tools.

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

integrations_writeA
Destructive
Inspect

Add, change or remove an integration on an agent, exactly like the dashboard. assign_to_agent also updates an existing setup (call it again with new settings); remove_from_agent removes it. settings by type — google_calendar / outlook_calendar: { connectionId, calendarId, calendarName?, timezone? ("Europe/London" or "GMT+1"), label?, description?, methods? (create-event, check-availability, lookup-events, update-event, delete-event), bookingMode? ("route" = caller picks one calendar, "union" = any free calendar), defaultCallerTimezone? ("" = same as calendar, "ask", or a zone), disableMeetLink? (google, in-person) } — up to 5 calendars per agent; remove one with { calendarId } or all with {}. google_sheets: { connectionId, sheetId, sheetTabName, method: "read" | "lookup" | "write", sheetName?, sheetDescription?, headerRowIndex?, headerDescriptions? {column: meaning}, identifierColumn?, identityFields? { phone, email, name, custom, customLabel } } — up to 5 sheets; remove one with { sheetId }. airtable: { connectionId, baseId, tableId?, method?, fieldDescriptions?, identifierField? }. shopify: { connectionId }. calendly: { connectionId }. zoho_crm: { config } (draft it with zoho_auto_configure; config.logTranscript keeps a note with the real messages, including human replies from WhatsApp/dashboard). gmail / outlook_mail / zoho_mail (the agent answers that inbox): { connectionId, whenToReply? (always | keywords | sentiment | manual), replyDelayMinutes?, replyRule?, humanNotifyRule?, replyLength? (short | medium | long | auto), replyTone?, keywords?, ignoreKeywords?, humanTakeoverEnabled?, humanTakeoverTimeoutMinutes?, notifyWorkspaceOwners? } — also starts inbound notifications. Get ids from integrations_read (all_connections, resources). After assigning, verify with integrations_read agent_integrations and integrations_test. Actions: assign_to_agent — add or update an integration on an agent Needs: agentId, type, settings. | remove_from_agent — remove an integration (or one calendar / sheet / inbox) from an agent Needs: agentId, type. | calendly_save_event_types — choose which Calendly event types agents may offer Needs: connectionId, selectedEventTypes. | calendly_assign_agents — give agents the Calendly booking ability Needs: connectionId, agentIds. | calendly_remove_agent — remove Calendly from an agent Needs: agentId. | google_calendar_disconnect — disconnect a Google Calendar account (confirm first; refused while agents use it unless force) Needs: connectionId. | outlook_disconnect — disconnect an Outlook account (confirm first) Needs: connectionId. | zoho_disconnect — disconnect a Zoho account (confirm first) Needs: connectionId. | zoho_auto_configure — let AI draft a Zoho sync config from the CRM fields (does not save) Needs: connectionId. | zoho_test_lookup — try a config against the CRM with a phone / email, without saving Needs: config. | zoho_save_agent_config — save the Zoho sync config on an agent Needs: agentId, config. | zoho_remove_agent — remove Zoho CRM from an agent Needs: agentId.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
typeNoFor assign_to_agent / remove_from_agent.
emailNoFor zoho_test_lookup: an email to look the person up by.
forceNoFor google_calendar_disconnect: disconnect even if agents still use the connection.
orgIdNoOptional organization scope.
phoneNoFor zoho_test_lookup: a phone number to look the person up by.
actionYes
configNoZoho agent sync config (as returned by zoho_agent_config / zoho_auto_configure). To turn the message log on or off, read the current config, flip logTranscript, and save the whole config back.
customNoFor zoho_test_lookup: extra lookup values.
agentIdNoFor assign_to_agent / remove_from_agent / calendly_remove_agent / zoho_save_agent_config / zoho_remove_agent: the agent.
agentIdsNoFor calendly_assign_agents.
settingsNoFor assign_to_agent / remove_from_agent: the shape for the chosen type (assign) — each option is titled with its type.
connectionIdNoIntegration connection id (from integrations_read all_connections).
instructionsNoFor zoho_auto_configure: what the sync should do, in plain words.
moduleApiNamesNoFor zoho_auto_configure: up to 5 modules.
selectedEventTypesNoFor calendly_save_event_types: event type objects from integrations_read.

TDQS

A4.4/5.0
Behavior4/5

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

Beyond the destructive=true/openWorld=true annotations, it discloses meaningful behavior: disconnects are refused while agents use the connection unless force, zoho_auto_configure and zoho_test_lookup explicitly do not save, assigning a mail inbox also starts inbound notifications, and remove with {} clears all. It does not state that assign overwrites existing settings wholesale, which is why this is a 4 rather than 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.

Conciseness3/5

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

Purpose and workflow are front-loaded, which is good, but the middle is a single sprawling sentence enumerating per-type settings that largely restates the 94%-covered schema. Density at that coverage level buys less than it costs in readability.

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 16-parameter, nested oneOf dispatcher with no output schema, the description covers selection (action), prerequisites (id sourcing), verification (integrations_test/agent_integrations), and safety (confirm-before-disconnect). Missing only a note on what the call returns, which is a modest gap.

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 94%, so the baseline is 3, but the description adds real semantics the schema lacks: where to source ids, per-type settings expectations (up to 5 calendars/sheets, bookingMode route vs union, timezone formats), and the draft-then-save flow for Zoho configs. Some of the inline settings enumeration duplicates schema text.

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?

Opens with a specific verb triplet and resource: 'Add, change or remove an integration on an agent, exactly like the dashboard.' It also names its sibling read/verify tools (integrations_read, integrations_test), so the agent can distinguish it from adjacent tools without inspecting schemas.

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?

States the prerequisite workflow explicitly ('Get ids from integrations_read (all_connections, resources)' and 'After assigning, verify with integrations_read agent_integrations and integrations_test'), and each action carries its own 'Needs:' prerequisite list plus guidance like 'confirm first' for disconnects.

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

interact_with_agentAInspect

Run ONE agent turn over the Convocore /interact WebSocket and return the streamed result aggregated into a single response. Opens a WSS connection to wss://-gcp-api.vg-stuff.com/interact, sends one InteractObject (agentId + convoId + bucket + prompt + optional context), collects every chunk (text + UI-engine + actions + metadata + sync_chat_history) until the server closes (code 1000) or the timeout fires, then returns: { assistantText, uiEngineEnabled, uiEngineSnapshot, uiEngineSummary, actions, metadata, turns, closeCode, durationMs, timedOut, chunkCount, chunks? }.

USAGE:

  • Use the SAME convoId across turns to keep history; use a fresh one to start a new conversation.

  • prompt: "start" triggers the agent's initial greeting (no user message added).

  • prompt: "@cancel:<reason>" cancels an in-flight turn (rarely useful from a single MCP call).

  • prompt: "@rewind:<nodeId>" rewinds a node-based agent.

  • For images, set messageType="visual" and pass visualPayload.

  • bucket is auto-derived from CONVOCORE_API_REGION; only override if you really mean to talk to the other region.

  • Set raw: true to include every streamed chunk (debug frames, chunkIndex, every UI Engine snapshot, etc.) when you need the full trace. Default keeps the response token-cheap.

  • TESTING: set isTest: true for test chats. Pass toolTest: { toolId, toolName, mode: validate|generate-and-test } to exercise one HTTP tool (or use dedicated test_agent_tool). Pass variablesOverrides / initNodesOptions to trial variables without permanently changing them.

  • For a direct HTTP dry-run of a tool's serverUrl use test_agent_tool_request. For multi-turn suites use run_agent_auto_test.

INTERPRETING THE RESPONSE:

  • When uiEngineEnabled: false, the agent streamed plain Markdown — read assistantText.

  • When uiEngineEnabled: true, the agent streamed UI Engine snapshots — read uiEngineSnapshot (parsed final TurnProps) and uiEngineSummary (compact per-message summary). assistantText may be empty in this mode.

  • To force plain text on a UI-Engine-enabled agent for one turn, pass disableUiEngine: true.

UI ENGINE — TWO LAYERS YOU MUST KEEP STRAIGHT:

LAYER 1 — AGENT LLM OUTPUT CONTRACT (what the tested agent is INSTRUCTED to emit):

  • The agent's system prompt forces its LLM to output ONE JSON ARRAY of message objects: [ { "type": "text"|"choice"|"visual"|"cardV2"|"carousel"|"iFrame"|"form"|"input", "payload": {...} }, ... ]

  • The very first character MUST be "[" and the very last MUST be "]". No prose, no ```json fences, no leading/trailing newlines.

  • Preferred message order in the array: text intro -> card / carousel / visual -> iFrame (if video URL exists) -> choice buttons (CTAs).

  • Buttons / image URLs / iFrame URLs MUST come from KB or tool output. NEVER invent URLs. If KB has nothing, omit the button or fall back to text.

  • select / radio fields MUST include a non-empty options[] of { value, label }. If real options are unknown, use type "text" or "textarea" instead.

  • form / input messages WEB CHANNELS ONLY (web-chat / text). On voice / telephony / WhatsApp / SMS / messaging the server strips them.

  • WhatsApp extra rule: only use visual / cardV2 / carousel when you have a verified image URL from KB or a tool — otherwise use text only.

LAYER 2 — WIRE FORMAT (what arrives over the /interact WebSocket):

  • When chunk.ui_engine === true, chunk.chunk is a JSON-stringified TurnProps SNAPSHOT of the bot turn so far.

  • SNAPSHOTS ARE OVERWRITING — replace the in-progress turn with the latest parse, never concatenate.

  • Parsed shape: { from: "bot", ts, modelId?, messages: ChatMessage[] }.

  • Each ChatMessage wraps the agent's array entry: { from: "bot", type, ts, mid?, item: { type, payload } }. So agent emits [{ type, payload }, ...] -> wire wraps each as { ..., item: { type, payload } } inside messages[].

PAYLOAD SHAPES (item.payload): text -> { message } (Markdown supported). choice -> { buttons: [{ name, request: { type: "open_url"|"text", payload: { url|message } } }] }. visual -> { image } (URL ending in .png/.jpg/.jpeg/.webp/.gif/.svg/.avif/.bmp). cardV2 -> { title, imageUrl?, description?: { text }, buttons?: UiEngineButton[] }. carousel -> { cards: CardPayload[] }. iFrame -> { layout: "vertical"|"horizontal", url } (vertical = video embeds, horizontal = general web). form -> { title?, description?, fields: UiEngineInputField[], submitButton?, onSubmit: { type: "submit_form", message? } }. Web channels only. input -> { field: UiEngineInputField, submitOnEnter?, onSubmit: { type: "submit_input", message? } }. Web channels only. UiEngineInputField.type: text|email|password|number|tel|url|textarea|select|checkbox|radio|date|time|datetime-local|file.

WHEN ui_engine === false (or omitted): chunk.chunk is plain Markdown text — append to the in-progress assistant message. TO FORCE PLAIN TEXT on a UI-Engine-enabled agent for one turn: pass disableUiEngine: true on the InteractRequest.

SERVER SANITIZERS YOU SHOULD KNOW (so you do not get surprised when a message disappears):

  • form messages with zero valid fields are DROPPED.

  • input messages with an invalid field are DROPPED.

  • select / radio fields with empty / duplicate / missing-label options are DROPPED.

  • any field missing id or label is DROPPED.

For the FULL UI Engine schema (every payload field, validation rules, allowed enums) call get_ui_engine_spec first.

WARNING: This consumes Convocore credits exactly like a real agent turn (LLM + voice + tools). It is NOT a dry-run.

NameRequiredDescriptionDefault
v2NoForce routing to the v2 (node-based) handler.
rawNoWhen true, include every raw streamed chunk in the response. Default false (token-cheap aggregated view only).
bucketNoRegion bucket. Auto-derived from CONVOCORE_API_REGION when omitted (eu-gcp -> "voiceglow-eu", na-gcp -> "(default)").
isTestNoMarks the turn as a test interaction.
promptNoUser message. Special values: "start" (initial greeting), "@cancel:<reason>", "@rewind:<nodeId>".
agentIdYesThe ID of the agent to interact with.
convoIdYesConversation ID. Reuse across turns to keep history; use a fresh ID to start a new conversation.
replyToNoReply context when the user is replying to a previous message.
toolTestNoRun a single tool in test mode.
agentDataNoOptional agent override. When provided with at least an `ID`, the server skips loading the agent doc from Firestore.
kbPreviewNoKnowledge-base preview mode (skips node routing).
sessionIdNoOptional session id; defaults to convoId server-side.
timeoutMsNoHow long to wait for the streamed turn to complete before closing the WebSocket. Default 120000 (120s), max 600000 (10min).
isLLMStudioNoMarks the turn as originating from LLM Studio.
messageTypeNoType of input. Use "visual" together with visualPayload for images.
turnsHistoryNoOptional override of conversation turns. When set, the server uses this instead of fetching from Firestore.
visualPayloadNoImage/visual content for messageType: "visual" turns.
workspaceDataNoOptional workspace override.
actionMetadataNoIncludes mid (client-supplied message id) used for de-duplication.
agentProfileIdNoInternal profile id (e.g. agency_plan_builder_v1).
lightConvoDataNoPer-conversation user/context metadata (userName, userEmail, userPhone, origin, capturedVariables, ...). Surfaced to the agent system prompt where supported.
disableUiEngineNoDisable UI-engine JSON output for this turn.
initNodesOptionsNoOptional overrides for tools / variables / messages history at session init.
variablesOverridesNoCreate or override agent variables for this interact turn only (without permanently PATCHing variables).
disableRecordHistoryNoSkip persisting this turn to Firestore.
formSubmissionMetadataNoPayload describing a UI-engine form / input submission.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only say non-readonly, open-world, non-idempotent, non-destructive; the description goes far beyond them by disclosing credit consumption, the exact close condition (code 1000 or timeout, default 120s/max 10min), which streamed artifacts are collected, and the server-side sanitizers that silently drop malformed form/input/select messages. That sanitizer list is behavior an agent genuinely cannot infer from any structured field.

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?

Front-loaded and well-sectioned, with the return shape stated up front so the agent knows what comes back. But it is very long, and much of it (per-payload-type shapes, UiEngineInputField enums, agent array contract) duplicates content that it itself redirects to get_ui_engine_spec, which bloats context for an agent that needs one call.

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 26 parameters, nested objects, and no output schema, the description supplies exactly the missing piece: an explicit enumerated return shape plus interpretation guidance for the uiEngineEnabled true/false branches. An agent has enough to call this correctly and read the result without further lookups.

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 nearly all 26 parameters already carry their own descriptions, including bucket auto-derivation and prompt special values, so the baseline applies. The description adds only marginal extra meaning, chiefly pairing messageType="visual" with visualPayload and warning that bucket overrides should be rare.

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 first sentence states a specific verb, resource, and transport: run ONE agent turn over the Convocore /interact WebSocket and return the aggregated streamed result. It explicitly frames the operation as a real agent turn that consumes credits, which separates it from the dry-run siblings without needing 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?

The USAGE block gives explicit when-to-use rules (reuse convoId for history, fresh for a new conversation), special prompt values, and names concrete alternatives for adjacent jobs: test_agent_tool for a single tool, test_agent_tool_request for an HTTP dry-run, run_agent_auto_test for multi-turn suites, get_ui_engine_spec for the full schema. Exclusions are covered by the WARNING noting this is not a dry-run.

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

lead_groups_readA
Read-onlyIdempotent
Inspect

List the lead groups of an agent with the number of leads in each. Groups are what campaigns target (campaign.leadGroupName). Optional tags only counts leads carrying at least one of the tags. To see the leads inside a group use leads_read with groupName.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
tagsNo
agentIdYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld, so the safety profile is covered; the description adds real value beyond that by explaining the tags filter is OR-semantics ('only counts leads carrying at least one of the tags') and that counts are per-group. It does not mention pagination, ordering, or the mode parameter's effect on response size beyond what the schema says.

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 what is returned, then the filter rule, then the alternative tool. No filler or repeated boilerplate.

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 does the necessary work of saying the result is groups with lead counts, and the filter semantics are covered. Missing only secondary detail such as ordering or whether empty groups are included, which an agent may want before calling.

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 33%, so the description must compensate; it does for tags by spelling out the 'at least one' matching rule, and agentId's role is clear from the first sentence. The mode parameter is left entirely to the schema, but that schema entry is self-documenting, so the gap is minor.

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 ('List the lead groups of an agent') plus the payload ('with the number of leads in each'), which lets an agent distinguish it from sibling leads_read (individual leads) and lead_groups_write. The parenthetical tying groups to campaign.leadGroupName anchors the concept in the domain model.

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 routes the drill-down case: 'To see the leads inside a group use leads_read with groupName.' That names both the alternative and the parameter to use. It does not state exclusions relative to other listing tools (e.g., campaigns_read) but the guidance present is concrete.

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

lead_groups_writeA
Destructive
Inspect

Create, fill, rename or delete a lead group. Group names are stored lowercase. Actions: create (groupName + leads: new lead objects, e.g. [{ userName, userPhone, userEmail }] — a group exists only while it has leads), assign_leads (groupName + leadIds: move EXISTING leads into the group; groupName "all" removes them from any group), rename (groupName + newGroupName: moves every lead to the new name), delete (groupName: by default the leads are kept and just ungrouped; deleteLeads=true permanently deletes every lead in the group).

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
leadsNoFor create: new leads to add to the group.
actionYes
agentIdYes
leadIdsNoFor assign_leads: ids of existing leads.
groupNameYes
deleteLeadsNoFor delete. Default false (leads are kept).
newGroupNameNoFor rename.

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the destructiveHint/openWorldHint annotations: it discloses that deleteLeads=true permanently deletes every lead while the default merely ungroups them, that rename moves every lead, that groups only exist while they have leads, and that groupName "all" removes leads from any group. These are non-obvious, high-consequence traits an agent must know.

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-loads the verb list, then gives a compact per-action clause with the parameters each needs. Dense but every clause carries operational information; the run-on formatting is the only readability cost.

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 8-parameter, no-output-schema mutation tool, the description covers all four action branches and their side effects thoroughly. Gaps are minor: agentId's meaning and any hint about the response payload are absent.

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 63%, and the description compensates by mapping leads, leadIds, groupName, newGroupName and deleteLeads to their actions, including the special "all" value and an example lead object shape. Only agentId and the mode parameter's effect are left to the schema, so it is rich but not exhaustive.

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?

Opens with a specific verb set and resource (create/fill/rename/delete a lead group), then enumerates the four supported actions with their distinct behaviors. An agent can distinguish it from lead_groups_read and leads_write without inspecting 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?

Each action is explained with the parameters it requires and what it does, which effectively tells the agent which action to pick for a given intent (e.g., moving existing leads vs creating new ones). It does not explicitly name alternatives like lead_groups_read for listing, 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.

leads_readA
Read-onlyIdempotent
Inspect

Read CRM leads for an agent. Actions: list, get, export, export_filtered. For action=list, default mode=compact (id/name/email/phone/ts — no metaData blobs). Use mode=full only when you need complete lead objects; prefer action=get for one lead. Does not create/update — use leads_write. Not for client accounts (clients_read).

NameRequiredDescriptionDefault
modeNocompact (default): short summary fields only — token-cheap. full: complete API objects (heavy). Prefer get_* for one item.
pageNo
limitNo
actionYes
cursorNo
leadIdNo
agentIdYes
filtersNoBody for export_filtered (groupName, searchTerm, etc.).
groupNameNo
timeRangeNo
searchTermNo
leadFiltersNo
searchFieldNo
propertyFilterNo
useAgentLeadsEndpointNo

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, destructiveHint=false, and idempotentHint=true, so the safety profile is covered. The description adds useful behavioral context by explaining compact mode's token-cheap fields versus full mode's heavy objects, and by clarifying that this tool does not create or update records.

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

Conciseness5/5

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

The description is front-loaded with the actions, then mode guidance, then alternative-tool routing. It is dense but every sentence carries useful information for selecting and invoking the tool.

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 covers the main read paths and key alternatives, but for a 15-parameter tool with very low schema description coverage and no output schema, it leaves important pagination, filtering, and export-specific parameters unexplained. It is adequate for basic routing but incomplete for confident invocation across all actions.

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 only 13% across 15 parameters, so the description must compensate for many undocumented inputs. It explains action and mode meaning well, but does not clarify page, limit, cursor, timeRange, searchTerm, leadFilters, searchField, propertyFilter, groupName, or useAgentLeadsEndpoint, leaving much of the parameter surface 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 states a specific read operation and enumerates the supported actions: list, get, export, and export_filtered. It also distinguishes this tool from leads_write and clients_read, so an agent can identify its purpose 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 explicitly says to use mode=full only when complete lead objects are needed, prefers action=get for a single lead, and routes writes to leads_write and client accounts to clients_read. These are clear when-to-use and when-not-to-use instructions.

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

leads_writeB
Destructive
Inspect

Create/update/delete/import CRM leads. Actions: create, update, delete, delete_many, import_bulk, magic_import, clear_all, delete_group. Destructive: clear_all deletes every lead on the agent.

NameRequiredDescriptionDefault
leadNo
leadsNo
actionYes
leadIdNo
agentIdYes
groupIdNoFor delete_group.
leadIdsNo
rawTextNoFor magic_import.
leadGroupIdNo
additionalInstructionsNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, openWorldHint=true, and idempotentHint=false. The description adds useful specific context by warning that clear_all deletes every lead on the agent, which is exactly the kind of high-risk behavior an agent needs beyond the annotation flags.

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 short and front-loaded: the core operation is stated first, followed by the action list and the critical destructive warning. Every sentence contributes useful information.

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

Completeness2/5

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

This is a complex 10-parameter mutation tool with nested objects, no output schema, and low schema description coverage. The description covers the action set and clear_all risk but leaves too much unexplained about parameter usage and bulk/import semantics for an agent to invoke it confidently in all action modes.

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 only 20% across 10 parameters, and the description primarily repeats the action enum rather than explaining how parameters map to actions. It does not clarify lead vs. leads, leadId vs. leadIds, groupId for delete_group, rawText for magic_import, or additionalInstructions.

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 specific write verbs and the resource ('CRM leads'), and enumerates all supported actions. It clearly implies a write/management tool, though it does not explicitly route readers to the sibling leads_read tool.

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?

Listing the available actions gives implied usage guidance, and the destructive warning helps caution around clear_all. However, it does not state when to use this tool versus leads_read, lead_groups_write, or other lead-related siblings, nor does it describe prerequisites.

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

list_agentsA
Read-onlyIdempotent
Inspect

List accessible agents. Default mode="compact" returns only short fields (id, title, description, theme, flags, timestamps) so responses stay token-cheap — use this to find recent agents. mode="full" returns complete agent documents (nodes/prompts/voice/etc.) and is heavy; prefer get_agent for one agent, or search_agents for filtered lookup. Compact defaults limit=25 when omitted.

NameRequiredDescriptionDefault
modeNocompact (default): short summary fields only. full: entire agent objects from the API (very large).
limitNoMax agents when supported. Compact defaults to 25. Full mode: always pass a small limit.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds genuinely new behavioral context: token cost of each mode, that full mode is heavy, and that compact silently defaults limit=25 when omitted. That default-on-omission detail is exactly the kind of silent behavior 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 tight sentences, front-loaded with the core action, then mode behavior, then sibling routing and the default-limit caveat. No wasted prose.

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 compensates by enumerating the compact return fields and warning about full-mode payload size. Nothing an agent needs to call 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?

Schema coverage is 100%, so baseline is 3; the description earns extra credit by listing the exact compact fields (id, title, description, theme, flags, timestamps) and restating the limit=25 default. It mostly reinforces the schema rather than adding new mechanics, so not a 5.

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 ("List accessible agents") and immediately enumerates the two modes and what each returns. It explicitly names siblings (get_agent, search_agents) and the conditions that select them, so an agent can distinguish this from related tools 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 routing: use compact "to find recent agents," prefer get_agent for a single agent, and search_agents for filtered lookup. Both when-to-use and when-not-to-use are stated with named alternatives.

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

list_agent_toolsA
Read-onlyIdempotent
Inspect

List HTTP/API tools saved on a Convocore agent (serverUrl integrations). These are NOT MCP tools. A saved tool is only callable when its id is also in a node toolsIds (see get_agent). For MCP catalog discovery use search_mcp_tools. To test a tool use test_agent_tool or test_agent_tool_request.

NameRequiredDescriptionDefault
agentIdYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely non-schema context: these are serverUrl integrations, not MCP tools, and a saved tool is only invocable when its id appears in a node's toolsIds. It omits any hint about response shape or pagination, keeping it below 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 short sentences, zero filler, and the core purpose plus the 'NOT MCP tools' disambiguation are front-loaded before the routing advice.

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-parameter read tool with full annotation coverage and no output schema, the description supplies the critical distinctions (MCP vs saved HTTP tools, callability precondition, sibling routing). Only minor gaps remain: no note on what the listing returns or on agentId sourcing.

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% and the single required parameter (agentId) is undocumented in the schema. The description implies agent scoping ('saved on a Convocore agent') but never states the identifier's form or where to obtain it (e.g., from list_agents), so it only partially 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?

States a specific verb+resource ('List HTTP/API tools saved on a Convocore agent') and explicitly disclaims a common confusion: 'These are NOT MCP tools.' An agent can distinguish this from get_agent, get_agent_tool, and search_mcp_tools 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?

Names explicit alternatives and the conditions that select them: MCP catalog discovery goes to search_mcp_tools, testing goes to test_agent_tool / test_agent_tool_request. It also clarifies a callability precondition (id must be in a node toolsIds), which prevents misuse.

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

list_agent_variablesA
Read-onlyIdempotent
Inspect

List variables on a Convocore agent (env/global/system keys used in prompts and tools). Not MCP variables. Values of environment variables (isEnv) are masked. To trial overrides in a chat turn use interact_with_agent with variablesOverrides / initNodesOptions.

NameRequiredDescriptionDefault
agentIdYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint, idempotent, non-destructive), but the description adds a genuinely useful behavior: values where isEnv is true are masked. That is non-obvious and prevents an agent from expecting real secrets. It stops short of describing ordering or response shape, which keeps it below 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 tight sentences, front-loaded with the purpose, then scope exclusion, masking caveat, and alternative. No padding, and the most decision-relevant information comes first.

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-only list call, the description covers purpose, scope exclusion, masking behavior, and the alternative path. Remaining gaps are minor: agentId format and return ordering, though the absence of an output schema makes the latter a smaller omission.

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 one required parameter (agentId) with 0% schema description coverage, so the description must carry the burden. 'On a Convocore agent' implies agentId identifies the target agent, but no format, source, or constraints are given beyond that implication.

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 ('List') and resource ('variables on a Convocore agent'), then defines what those variables are (env/global/system keys used in prompts and tools). It also explicitly carves itself away from MCP variables, so an agent can tell what this tool does and does not return 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?

The 'Not MCP variables' exclusion and the pointer to interact_with_agent with variablesOverrides / initNodesOptions for trial overrides give explicit when-and-when-else routing. An agent knows both the correct scope for this tool and where to go when it wants to inject overrides instead of merely listing.

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

list_conversation_notesA
Read-onlyIdempotent
Inspect

List the human review notes on a conversation (a timeline, oldest first). Each note has id, text, createdAt (unix seconds), authorName/authorEmail and source (dashboard | api). get_conversation also returns them as reviewNotes. To find conversations by note, use query_conversations with hasNotes / noteContains.

NameRequiredDescriptionDefault
agentIdYesThe agent ID
convoIdYesThe conversation ID

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so safety is covered. The description adds useful behavioral detail beyond annotations: chronological ordering, field list, createdAt format, author fields, and the source enum values.

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 purpose, then provides compact return-shape details, then routes the agent to alternatives. Every sentence carries useful information with zero wasted space.

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's explanation of returned note fields, ordering, and source values is especially valuable. It also covers the relationship to get_conversation and query_conversations, making the definition complete for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100% for both required parameters (agentId and convoId). The description does not add meaning beyond the schema for these identifiers, so 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?

States a specific verb and resource ('List the human review notes on a conversation'), adds ordering scope ('a timeline, oldest first'), and enumerates the returned note fields. It clearly distinguishes itself from get_conversation and query_conversations by explaining the overlap and alternate lookup route.

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 the alternative for finding conversations by note content ('query_conversations with hasNotes / noteContains') and notes that get_conversation also returns review notes. It provides clear context and alternatives but does not explicitly state when not to use this tool or when to prefer get_conversation's bundled notes.

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

list_conversationsA
Read-onlyIdempotent
Inspect

List conversations for an agent (newest first). Default mode=compact (id/ts/summary/user/origin — no messages). mode=full returns raw list rows. For message bodies use get_conversation or get_conversations_bulk. Cursor pagination: hasMore + nextCursor; do NOT bump page alone. Max limit=20.

NameRequiredDescriptionDefault
modeNocompact (default): short summary fields only — token-cheap. full: complete API objects (heavy). Prefer get_* for one item.
pageNoLegacy. Only page=1 without cursor. Prefer cursor / nextCursor / hasMore.
limitNoResults per page (default: 20, max: 20)
cursorNoOpaque cursor from previous response nextCursor. Required to paginate past the first page.
agentIdYesThe agent ID to list conversations for

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: field shape in compact mode, cursor/hasMore/nextCursor pagination contract, and a hard cap of 20. It stops short of describing error conditions or ordering guarantees beyond 'newest first'.

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 core action, then mode semantics, then the alternative-tool routing, then pagination constraints. No filler and nothing buried.

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 return-shape burden and does so partially: it names the compact fields (id/ts/summary/user/origin) and the pagination envelope (hasMore/nextCursor), but leaves the 'full' mode's raw row structure undefined. Sufficient to call correctly, slightly thin on what 'full' actually returns.

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 schema already documents each parameter; the description still adds value by restating the compact/full payload difference and the pagination rule that page should not be bumped without a cursor. The max limit=20 restatement duplicates the schema's 'max: 20' but reinforces the constraint.

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 ('List conversations for an agent'), adds ordering ('newest first'), and implicitly scopes the result set. It is clearly distinguishable from siblings like get_conversation, query_conversations, and get_conversations_bulk, which the description explicitly routes toward.

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 to use get_conversation or get_conversations_bulk for message bodies, and warns 'do NOT bump page alone' in favor of cursor pagination. It also names the default mode, so the agent knows what it gets without specifying anything.

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

list_kb_docsA
Read-onlyIdempotent
Inspect

List knowledge base documents for an agent. Default mode=compact (id/name/status/urls — NO content bodies). Use mode=full only if you need every list field; prefer get_kb_doc for one document body.

NameRequiredDescriptionDefault
modeNocompact (default): short summary fields only — token-cheap. full: complete API objects (heavy). Prefer get_* for one item.
pageNoPage number (default: 1)
agentIdYesThe agent ID
pageSizeNoResults per page (default: 20)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered; the description adds the token-cost profile and the key behavioral fact that compact mode omits content bodies. It does not mention pagination totals or the size of a 'full' response, which would help an agent avoid a heavy 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?

Three short clauses, zero waste, with the default behavior front-loaded before the exception and the alternative. Every sentence earns its place.

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

Completeness4/5

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

No output schema exists, and the description does supply the compact return shape (id/name/status/urls, no bodies), which is the critical missing piece an agent needs. Pagination behavior is covered by the schema, so only minor gaps remain.

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 mode enum already documents compact vs full with the 'prefer get_* for one item' hint, so the description largely restates structured data. Baseline 3 is appropriate; page/pageSize semantics are left entirely to 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 plus scope ('for an agent'), and distinguishes itself from get_kb_doc by naming it as the per-document alternative. An agent can separate this from list_kb_docs' siblings (search_kb_docs, get_kb_docs_bulk) without reading 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 states the default behavior (compact), the condition for escalating (mode=full only if you need every list field), and the alternative for single-document retrieval (get_kb_doc). This is exactly the when/when-not/alternatives pattern.

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

list_provider_voicesA
Read-onlyIdempotent
Inspect

Browse the voice catalog for ONE specific provider with the same filter params as search_voices. Use when the user has already chosen a provider (e.g. "show me ElevenLabs male British voices"). Read-only — does NOT consume credits.

NameRequiredDescriptionDefault
limitNoPage size, 1–500. Default 100.
accentNoSubstring match (e.g. "american").
genderNomale / female / neutral.
offsetNoPagination offset. Default 0.
modelIdNoFilter to a specific TTS model id.
languageNoLanguage filter (e.g. "en", "de").
providerYesProvider slug, e.g. "elevenlabs".

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description adds useful non-obvious context that this operation does NOT consume credits, which is not in the annotations. It does not describe return format or pagination behavior, but with annotations covering safety and idempotency, this is a solid disclosure.

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

Conciseness5/5

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

The description is two tightly written sentences, front-loaded with the scope and followed by when-to-use guidance. The example earns its place by clarifying provider-scoped filtering, and there is 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 read-only list tool with full schema parameter documentation and rich annotations, the description supplies the essential missing context: provider scoping, when to use it, and credit behavior. No output schema exists, but the description does not need to explain return values beyond the catalog-browsing purpose.

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

Parameters3/5

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

Schema description coverage is 100%, so all seven parameters are already documented in the input schema. The description adds a cross-tool note that filters match search_voices and gives an example combining gender, accent, and provider, but it does not add syntax or constraints beyond the schema. Baseline 3 is appropriate when the schema carries parameter 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 uses a specific verb and resource: browsing the voice catalog scoped to ONE specific provider. It distinguishes this from search_voices by provider scope and gives a concrete example of the use case. An agent can tell exactly what this tool does and how it differs from the broader voice-search sibling.

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 usage context: use when the user has already chosen a provider, with an example. It references search_voices as the broader alternative and says this tool uses the same filter params. It stops short of explicitly saying 'use search_voices if no provider is chosen,' so it is strong but not fully explicit about exclusions.

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

list_voice_modelsA
Read-onlyIdempotent
Inspect

List the available TTS models for a given provider (e.g. "aura-2" for Deepgram, "eleven_multilingual_v2" for ElevenLabs). Use the returned modelId values with search_voices / list_provider_voices to filter the catalog. Read-only — does NOT consume credits.

NameRequiredDescriptionDefault
providerYesProvider slug, e.g. "elevenlabs", "deepgram", "cartesia", "openai", "google-cloud", "azure".

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotent/destructive, so the safety profile is covered; the description adds a genuinely non-structured fact — that the call does NOT consume credits, which matters for cost-aware agents. It does not describe the shape of the returned model list, which remains a minor gap for a tool with 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.

Conciseness5/5

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

Two tight sentences: purpose plus examples first, then the downstream usage instruction and cost note. No filler and nothing buried.

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-only lookup with full schema coverage and rich annotations, the description covers what it returns conceptually (modelIds) and how to use them. Only the exact return fields are unspecified, which is a small gap given no output schema exists.

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 single parameter is fully documented in the schema (100% coverage) with provider slugs enumerated, so the description need not repeat syntax. The description's examples are model IDs rather than provider slugs, so it illustrates the output rather than adding parameter meaning beyond the schema. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb (list) and resource (TTS models) scoped to a provider, with concrete example model IDs per vendor. It is clearly distinguishable from list_voice_providers and search_voices / list_provider_voices, which it names as downstream consumers.

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 to feed the returned modelId values into search_voices / list_provider_voices, which gives the agent a clear place in the workflow. It lacks an explicit 'do not use this if you want X' exclusion versus list_voice_providers, but the sequencing guidance is strong.

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

list_voice_providersA
Read-onlyIdempotent
Inspect

List every TTS voice provider Convocore supports (elevenlabs, deepgram, cartesia, rime-ai, openai, google-cloud, google-live (Gemini Live), ultravox, minimax, playht, azure). For each provider returns the workspace secret-key name (e.g. ELEVENLABS_API_KEY) and a requiresWorkspaceApiKey flag indicating whether the platform has a server-side fallback or the workspace must BYOK. Read-only — does NOT consume credits.

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, idempotentHint, openWorldHint, and destructiveHint=false, so safety is covered. The description still adds useful context by stating that the tool does not consume credits and by explaining that each result includes a secret-key name and a requiresWorkspaceApiKey flag.

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 compact and front-loaded: it names the resource, lists providers, explains the return fields, and closes with the read-only/credits note. No sentence 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?

For a zero-parameter, read-only listing tool with no output schema, the description is sufficient. It explains the provider list, the returned secret-key name, and the requiresWorkspaceApiKey flag, which is exactly what an agent needs to interpret results.

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 has zero parameters, so there is nothing for the description to explain about input semantics. This meets the baseline for a no-parameter tool.

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 gives a specific verb and resource ("List every TTS voice provider Convocore supports"), enumerates the providers, and explains the return shape. It is clear what the tool does, though it does not explicitly distinguish itself from nearby siblings such as list_provider_voices or search_voices.

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 call it, but there is no explicit guidance on when to prefer it over list_provider_voices, search_voices, or list_voice_models. The agent must infer the boundary from the tool name and description alone.

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

meta_pages_readA
Read-onlyIdempotent
Inspect

Diagnose a connected Facebook page (Messenger / Instagram). To list connected pages use get_agent_channels; to connect one use create_channel_connect_link. Actions: check_subscriptions — which webhook events the page is subscribed to — use when the agent does not receive Messenger / Instagram messages Needs: pageId. | get_profile — name and picture of a Messenger / Instagram user who messaged the agent Needs: userId.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
actionYes
originNoFor get_profile.
pageIdNoFacebook page id from get_agent_channels.
userIdNoFor get_profile: the Messenger / Instagram user id (conversation id).
agentIdYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly=true, idempotent=true, openWorld=true, destructive=false, so the safety profile is covered. The description adds genuine context beyond that: it defines each action's output content (subscription events, profile name/picture) and the diagnostic framing, which tells the agent this is an inspection workflow. It does not mention permissions needed on the page or failure modes, which keeps 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.

Conciseness4/5

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

The alternatives and the action breakdown are front-loaded in a short, dense block with no filler. The action entries are run together as a single stream, which slightly hurts scannability but wastes no 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?

With six parameters, no output schema, and two conditional actions, the description does the necessary work: it names each action's purpose, its required identifier, and what it returns. Remaining gaps (mode/origin behavior, agentId) are covered by the input schema, so an agent has enough to call it correctly.

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

Parameters3/5

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

Schema coverage is 67% and the schema already documents mode, origin, pageId and userId. The description's main added value is per-action parameter mapping ('Needs: pageId' vs 'Needs: userId'), clarifying which parameters are conditional on the chosen action — information the flat schema does not convey. It says nothing about agentId, origin, or mode, so the gain is partial.

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 opening sentence gives a specific verb and resource ('Diagnose a connected Facebook page (Messenger / Instagram)') and then enumerates the two concrete actions with what each returns (webhook subscription events; user name and picture). It also distinguishes this tool from get_agent_channels and create_channel_connect_link, so an agent can place it in the right workflow 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 names two explicit alternatives with their selecting conditions ('To list connected pages use get_agent_channels; to connect one use create_channel_connect_link') and gives a trigger for check_subscriptions ('use when the agent does not receive Messenger / Instagram messages'). The get_profile action has no equivalent when-to-use or when-not-to-use guidance, so routing is strong but uneven across the two actions.

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

notification_emailAInspect

Manage an email address subscription to Convocore notification emails. The address owner must confirm with a 6-digit code. Actions: request_code (email: sends the code), verify_code (email + code: returns a token), set_subscription (token + subscribed true/false), unsubscribe (token). You cannot read the code yourself — ask the user for it.

NameRequiredDescriptionDefault
codeNo6 digits from the email.
emailNo
tokenNoFrom verify_code.
actionYes
subscribedNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false and destructiveHint=false, so the safety profile is covered; the description adds the genuinely useful context that this is a two-phase email-confirmation flow where the code arrives out-of-band and must be supplied by the user. The token handoff between verify_code and the later actions is disclosed. What unsubscribe does to existing notification preferences, and any rate limits on request_code, are not stated.

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 purpose in the first sentence, followed by the confirmation requirement and a compact action-to-parameter map. Every sentence earns its place and nothing is padded. The action enumeration is slightly dense but remains scannable.

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 five-parameter, action-dispatch tool with no output schema, the description covers the full user-facing flow, the out-of-band nature of the code, and the token usage — enough to invoke it correctly. Missing are error behavior (expired/invalid code), whether request_code can be repeated, and what a successful set_subscription returns.

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 only 40% (only 'code' and 'token' are documented), so the description has to compensate — and it does, mapping every action to its required inputs: request_code(email), verify_code(email + code), set_subscription(token + subscribed), unsubscribe(token). That assigns meaning to the otherwise undocumented email, subscribed and action fields. It does not add format details for email or subscribed beyond what the enum/boolean type implies.

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 ('Manage an email address subscription to Convocore notification emails') and then enumerates the four concrete actions, so an agent knows exactly what the tool covers. It never references a sibling tool, but the notification-email scope is narrow enough that it is distinguishable from email_channel_read/write by subject matter 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?

The action list encodes the required workflow order — request_code, then verify_code to obtain a token, then set_subscription or unsubscribe with that token — which is real operational guidance, not just a field listing. The line 'You cannot read the code yourself — ask the user for it' is an explicit, actionable constraint on how to run the flow. It stops short of saying when not to use the tool or how it relates to sibling email tools.

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

orgs_readA
Read-onlyIdempotent
Inspect

Read organizations and related membership. Actions: list, search, get, list_clients, list_agents, list_members_and_teams, list_agent_org_clients. List/search actions default mode=compact (short fields). Use mode=full only when you need complete objects; prefer action=get for one org. Does NOT create/update/delete — use orgs_write. For end-user client accounts use clients_read.

NameRequiredDescriptionDefault
modeNocompact (default): short summary fields only — token-cheap. full: complete API objects (heavy). Prefer get_* for one item.
pageNo
orgIdNoRequired for get / list_* (except list_agent_org_clients).
actionYes
searchNoSearch query for action=search.
agentIdNoRequired for list_agent_org_clients.
pageSizeNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, so safety is covered; the description adds the useful token-cost tradeoff between compact and full modes. It does not describe pagination behavior (page/pageSize) or what a compact record contains, which keeps it below 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?

Four tight sentences: capability, mode guidance, single-item shortcut, then boundaries. Front-loaded with the action list and free of 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 read-only tool with no output schema and full annotation coverage, the agent knows which action to pick, what mode to request, and which sibling handles adjacent jobs. The only material gap is pagination semantics for page/pageSize, which neither schema nor description resolves.

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 moderate (57%), and the description compensates by explaining the compact-vs-full tradeoff, the default mode, and the get-vs-list preference. The schema itself documents mode, orgId, search, and agentId requirements, so only page/pageSize remain unexplained anywhere.

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 the resource (organizations and related membership) and enumerates all seven supported actions, so the scope is unambiguous. It also names the sibling it is not (orgs_write for mutations, clients_read for end-user client accounts), letting an agent route 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?

Explicit rules are given: list/search default to compact, use full only when complete objects are needed, prefer action=get for a single org. It also excludes writes and redirects to orgs_write, and redirects end-user client accounts to clients_read — both when-to-use and when-not-to-use are covered.

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

orgs_writeA
Destructive
Inspect

Create/update/delete organizations or assign/unassign an agent to an org. Actions: create, update, delete, assign_agent. For reads use orgs_write siblings orgs_read. Destructive: delete removes the org and associated clients.

NameRequiredDescriptionDefault
orgNoFor action=update: org fields to change (from the main org schema; only what you send changes).
nameNoFor create: org display name (Clients page card).
emailNoFor create: org contact email.
orgIdNoOrg id (orgs_read list / search). Required for update, delete and assign_agent.
actionYes
agentIdNoFor assign_agent: the agent to give to (or take from) the org.
assignActionNoFor assign_agent: assign gives the org access to the agent, unassign removes it.
squarePhotoURLNoFor create: org logo URL (https), shown as a round avatar.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, openWorldHint=true, and non-idempotency. The description adds meaningful context beyond that by stating delete removes the org and associated clients, which is the key side effect an agent needs before calling it.

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

Conciseness5/5

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

Three sentences, front-loaded with purpose, then actions and read alternative, then destructive impact. Nothing is repeated unnecessarily and every sentence adds useful routing or safety 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 an 8-parameter write tool with a large nested org object, the description pairs well with high schema coverage and covers action selection, read routing, and delete impact. It does not discuss permissions or response behavior, but annotations and schema carry most remaining burden.

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 88%, so the schema already documents most parameters, including the nested org fields and action-specific parameters. The description enumerates actions and mentions assign/unassign but does not add semantics beyond the schema for org, orgId, agentId, or assignAction.

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 specific verbs and resources: create/update/delete organizations and assign/unassign an agent. It also explicitly distinguishes reads by pointing to the sibling orgs_read, so an agent can tell this tool apart from the read path 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?

It clearly says to use orgs_read for reads and warns that delete is destructive. It does not spell out when to choose create vs update beyond the action names, but the action enum and schema fields make the intended usage clear.

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

patch_agent_promptAInspect

Performs string replacements in the start-node prompt (or proactiveMessage / customCSS). USE THIS instead of update_agent when the prompt is large and you only need to change a specific section. If get_agent returns empty instructions, this tool REFUSES a surgical patch — it will NOT replace the whole prompt with new_string. Workflow: get_agent → copy the exact span into old_string → new_string is the replacement. Only omit old_string when the field is truly empty and new_string is the FULL prompt. target=auto patches the start node instructions. Never writes vg_instructions (API rejects it). sync_mirrors defaults false.

NameRequiredDescriptionDefault
targetNoField to patch. auto / vg_instructions / vg_systemPrompt all write nodes[0].instructions. customCSS patches widget CSS surgically.
agentIdYesThe agent ID whose prompt/text field to patch
new_stringYesReplacement text for the matched span. Use an empty string to delete the matched text.
old_stringNoText to find. Copy from get_agent. If the field is empty, this tool refuses a surgical patch — only omit old_string when installing a FULL prompt.
replace_allNoIf false (default), fails when old_string matches more than once. If true, replaces every occurrence.
sync_mirrorsNoWhen true, also apply the same replace to other writable prompt copies. Default false. vg_instructions / vg_systemPrompt are never written.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare it is not read-only, is open-world, and is not idempotent, while the description adds important behavior: it refuses a surgical patch when instructions are empty and will not replace the whole prompt with new_string. It also states sync_mirrors defaults false, though the statement 'Never writes vg_instructions' sits awkwardly beside the schema enum entry for vg_instructions.

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 front-loaded with purpose, alternative, and workflow, and most sentences earn their place. It is slightly dense and repeats the empty-field/old_string constraint in two places, but the repetition reinforces an important failure mode rather than obscuring the core instruction.

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 non-trivial mutation tool, the description covers the key operational context: preferred alternative, source workflow, empty-field refusal, target behavior, and mirror syncing. It does not describe return values or success/failure output, but with no output schema and strong annotations that gap is 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 schema already documents all six parameters thoroughly. The description still adds useful meaning by explaining target=auto and the old_string omission rule, but most parameter-level detail remains schema-driven.

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: it performs string replacements in the start-node prompt or proactiveMessage/customCSS. It explicitly distinguishes itself from update_agent and names get_agent as the source for old_string, so an agent can identify its role without opening sibling schemas.

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

Usage Guidelines5/5

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

Provides explicit when-to-use guidance: 'USE THIS instead of update_agent when the prompt is large and you only need to change a specific section.' It also gives a workflow (get_agent → copy exact span → new_string) and the condition for omitting old_string, leaving little inference.

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

patch_kb_docAInspect

Performs string replacements in a knowledge-base document — same idea as Cursor StrReplace for files. USE THIS instead of update_kb_doc when the document body is large and you only need to change a specific section. Workflow: get_kb_doc → copy the span into old_string (include enough surrounding context to make it unique) → new_string is the replacement → this tool patches content (or name) and PATCHes the KB doc. Prefer an exact copy from get_kb_doc; minor whitespace/line-ending drift is tolerated as a fallback. Prefer this over rewriting the entire content field. Only use replace_all=true when you intentionally want every occurrence changed.

NameRequiredDescriptionDefault
docIdYesThe KB document ID
fieldNoWhich KB field to patch. Default content (document body).
agentIdYesThe agent ID
new_stringYesReplacement text for the matched span. Use an empty string to delete the matched text.
old_stringYesText to find in the KB field. Prefer an exact copy from get_kb_doc; minor whitespace/line-ending drift is tolerated. Include surrounding context so the match is unique unless replace_all is true.
replace_allNoIf false (default), fails when old_string matches more than once. If true, replaces every occurrence.

TDQS

A4.3/5.0
Behavior4/5

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

With annotations already covering safety and idempotency, the description still adds useful behavior: exact-string matching, whitespace/line-ending drift tolerance, uniqueness requirements, and replace_all semantics. It does not describe missing-match behavior or return values, but its behavioral disclosure is substantially richer than the annotations alone.

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 purpose and sibling differentiation are front-loaded, and the workflow is easy to scan. Some phrasing duplicates schema guidance, such as preferring an exact copy from get_kb_doc, but the description remains appropriately sized for a mutation 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?

The schema is fully documented and annotations cover safety traits, so the description mainly needs to explain the patch workflow and when to prefer this tool. It does that well, though it omits return behavior and what happens when old_string is not found, which would help since 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 100%, so the schema already documents all six parameters, including old_string uniqueness, new_string empty-string deletion, field enum, and replace_all behavior. The description reinforces some of this but adds little semantic information beyond what the schema already 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 states a specific verb and resource: performing string replacements in a knowledge-base document. It explicitly distinguishes the tool from update_kb_doc by explaining that patch_kb_doc is for changing a specific section rather than rewriting the whole document.

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 when-to-use guidance: use this instead of update_kb_doc when the body is large and only one section needs changing. It also provides a clear workflow via get_kb_doc, explains how to choose old_string, and warns to use replace_all=true only for intentional global replacements.

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

query_conversationsA
Read-onlyIdempotent
Inspect

MCP-side filter over conversations (NOT a SQL analytics API). Cursor-pages list_conversations then bulk-gets details when filters need summary/capturedVariables/userName. Bounded by maxScan (default 200). Use for audits like summaryContains or capturedVariableExists. True server-side filters (hasQuote, eventDateWithin) need a future backend endpoint.

NameRequiredDescriptionDefault
tsToNoUnix ts upper bound
limitNoMax matches (default 50, max 100)
originNoExact origin match
tsFromNoUnix ts lower bound
agentIdYesThe agent ID
maxScanNoMax list rows to scan (default 200, max 500)
hasNotesNoRequire / exclude human review notes
hasUserNameNoRequire / exclude userName
noteContainsNoCase-insensitive substring in any review note
summaryContainsNoCase-insensitive summary substring
capturedVariableEqualsNoRequire capturedVariables[key] === value
capturedVariableExistsNoRequire this capturedVariables key

TDQS

A4.3/5.0
Behavior5/5

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

Discloses behavior the annotations cannot: this is a client-side scan that fans out into list + bulk-get calls, and it is cost-bounded by maxScan (default 200). That explains latency and truncation risk, which is exactly the kind of non-obvious trait an agent needs before calling a 12-parameter filter 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?

Four short sentences, each carrying distinct information: what it is, how it works, how it's bounded, and when to use it versus what isn't supported. The most important disambiguation ('NOT a SQL analytics API') 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?

Good coverage for a 12-parameter filtering tool with a nested object and no output schema: mechanism, cost bound, and unsupported filters are all stated. It doesn't say what a match actually returns (full conversation objects vs. summaries) or that results may be silently truncated when maxScan is exhausted before limit is reached, but nothing essential to 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?

With 100% schema description coverage the baseline is 3, but the description adds real meaning by identifying which filters (summaryContains, capturedVariableExists, userName) trigger the expensive detail fetch versus which are cheap, and by restating the maxScan bound as a scan limit rather than just a number.

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 what the tool does concretely: an MCP-side filter over conversations, and explicitly negates the wrong mental model ('NOT a SQL analytics API'). It also names the mechanism (cursor-pages list_conversations, then bulk-gets details) which distinguishes it from the plain list_conversations sibling, though it does not name the nearest alternative (get_conversations_bulk) directly.

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 positive use case ('Use for audits like summaryContains or capturedVariableExists') and a clear negative boundary: filters like hasQuote and eventDateWithin are not supported and need a future backend endpoint. It stops short of explicitly telling the agent to use list_conversations for unfiltered listing, leaving that inference to the reader.

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

read_docxA
Read-onlyIdempotent
Inspect

Extract text from a .docx Word document (path / url / base64). Set asMarkdown=true to preserve headings, lists, links and bold/italic. Legacy .doc is NOT supported — convert to .docx first.

NameRequiredDescriptionDefault
urlNo
dataNo
pathNo
mimeTypeNo
asMarkdownNoReturn markdown instead of plain text. Default: false.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare the safe read-only, idempotent, non-destructive, open-world profile, so the description's burden is lower. It adds useful behavior: supported input channels, plain-text versus markdown output, and the hard legacy .doc limitation. It omits URL/base64 error or size limits, but those are secondary for a read 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 short sentences with the primary purpose and key option front-loaded, then the important exclusion last. No sentence is redundant or padded.

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 read tool with annotations covering safety and no output schema, the description covers extraction and markdown behavior adequately. However, it leaves the critical source-selection/requiredness rule and mimeType semantics unexplained, which is a meaningful gap for a five-parameter tool with low schema coverage.

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 only 20%, with asMarkdown being the only documented parameter, so the description must compensate. It usefully maps path/url/base64 to input sources and explains markdown preservation, but it does not clarify mimeType or the required source-combination rule despite the schema showing no required parameters.

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

Purpose5/5

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

States a specific verb ('Extract text') and resource ('.docx Word document'), lists accepted source forms, and rules out legacy .doc. This clearly distinguishes it from format-specific siblings such as read_pdf and read_spreadsheet.

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 usage context via accepted input forms and a when-not constraint: legacy .doc is explicitly unsupported and must be converted. It also explains when to set asMarkdown=true, though it does not explicitly route non-docx files to sibling readers.

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

read_imageA
Read-onlyIdempotent
Inspect

Load an image (PNG / JPEG / WebP / GIF / SVG / TIFF / BMP / HEIC) from path / url / base64 and return it as a vision-ready MCP image content block so YOU can see the pixels. REQUIRED after scraping a website: call this with url= on every high-value product/room/treatment/team photo, then write what you saw + the exact URL into the agent systemPrompt catalog. Do not skip this and dump unlabeled URLs. Auto-normalizes: rasterizes SVG, downscales anything larger than maxDimension (default 2048px), and re-encodes to PNG (or JPEG when needed for size).

NameRequiredDescriptionDefault
urlNo
dataNo
pathNo
mimeTypeNo
maxDimensionNoMax width/height in pixels (default: 2048, range: 64-4096). Larger images are downscaled.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive), so the bar is lower, and the description still adds real behavioral value: the normalization pipeline (SVG rasterization, downscaling above maxDimension, PNG/JPEG re-encoding). It omits failure modes (unreachable URL, unsupported/unreadable file, oversize base64), so not 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.

Conciseness4/5

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

Front-loaded with the core action and immediately followed by the mandatory workflow directive and the normalization behavior; nearly every clause is load-bearing. Slightly dense with the scraping-workflow instruction embedded, but 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?

No output schema exists, yet the description explains the return value (image content block the model can 'see'), all input sources, supported formats, and automatic transformations. For a 5-param, zero-required reader, 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.

Parameters3/5

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

Schema coverage is low at 20% — only maxDimension is documented in the schema. The description compensates partially by mapping the three source parameters (path/url/base64) and implying mimeType via the format list, but gives no syntax or format details for `data`/`url`/`path`, so the gap is only partly closed.

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 (load/read), the resource (image), enumerates supported formats, lists the three input sources (path/url/base64), and names the exact return shape (vision-ready MCP image content block). An agent can distinguish this from read_pdf/read_text_file/inspect_file immediately.

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 an explicit when-to-use directive ('REQUIRED after scraping a website: call this with url= on every high-value photo') plus an anti-pattern exclusion ('Do not skip this and dump unlabeled URLs'). The condition that selects this tool versus text-based readers is unambiguous.

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

read_pdfA
Read-onlyIdempotent
Inspect

Extract text from a PDF (path / url / base64). Page-aware: pass pages as a string range like "1-3,5,7-9" or an explicit array to read only the pages you need. Output is split per page with --- page N --- headers. Auto-truncates if the result would exceed the per-call token budget. Always inspect_file first to learn totalPages.

NameRequiredDescriptionDefault
urlNo
dataNo
pathNo
pagesNoOptional page selection. Defaults to all pages.
mimeTypeNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare this a safe, idempotent, non-destructive read; the description adds real behavioral detail beyond that: per-page output delimited by `--- page N ---` headers and automatic truncation against a per-call token budget. It omits error/scanned-PDF behavior, but the operational contract is substantially disclosed.

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, then the page-selection syntax, then output/limits. No restated schema or filler, and the inspect_file prerequisite is placed last where it reads as a workflow cue.

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 input sources, page selection, output format, truncation, and the inspect_file prerequisite, which is enough to call the tool correctly despite five parameters and no output schema. Missing guidance on mimeType, encoding of `data`, and failure modes such as image-only PDFs.

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 schema coverage at only 20%, the description compensates well by explaining the mutually exclusive input sources (path / url / base64) and detailing the `pages` range syntax with an example alongside the array alternative. `mimeType` and the base64 encoding of `data` are left unaddressed, keeping it short of full 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?

States a specific verb and resource ('Extract text from a PDF') and immediately enumerates the supported input forms (path / url / base64), which distinguishes it from siblings like read_docx, read_text_file, and read_spreadsheet. An agent can identify exactly what it does 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 a clear prerequisite ('Always inspect_file first to learn totalPages') and tells the agent how to scope the read via `pages` for selective extraction. It does not explicitly contrast with sibling readers such as read_docx/read_text_file, but the context for when to use this tool is clear.

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

read_spreadsheetA
Read-onlyIdempotent
Inspect

Read an Excel (.xlsx / .xlsm / .xls) or CSV file. Two-step pattern: (1) call WITHOUT sheet to list sheet names, (2) call again with sheet to read that sheet. Optional A1-style range (e.g. "A1:D50") and format ('markdown' default, or 'csv' / 'json'). headerRow=true (default) treats row 1 as keys when format='json'.

NameRequiredDescriptionDefault
urlNo
dataNo
pathNo
rangeNoOptional A1 range like "A1:D50".
sheetNoSheet name or zero-based index. Omit to just list sheets.
formatNoOutput format. Default: markdown.
maxRowsNoCap on rows returned (default: 1000, max: 50000).
mimeTypeNo
headerRowNoFor json: treat row 1 as headers (default: true).

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/openWorldHint and destructiveHint=false, so safety is covered; the description adds genuinely useful behavior beyond that — the discovery-then-read workflow, format defaults, and that headerRow only affects json output. It does not disclose how the url/data/path inputs interact (precedence, mutual exclusivity) or what errors occur on unreadable files.

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 purpose, then the operational pattern, then the optional knobs. No restatement of the title and no filler; every clause carries a decision an agent needs.

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 9-parameter tool with no output schema, the reading workflow and output-format behavior are reasonably covered. The critical gap is the unexplained url/data/path trio — an agent cannot determine whether these are alternatives or combined inputs, which is a real risk of a failed call.

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 only 56% schema coverage, the description does add meaning for `sheet` (omit to list sheets), `range` (A1-style) and `headerRow` (json keys). However, the three input-source parameters (url, data, path) and `mimeType` are undocumented in both schema and description, leaving an agent unable to tell which source to supply.

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 (read) plus the concrete resource set (.xlsx/.xlsm/.xls/CSV), which effectively distinguishes it from the sibling readers read_pdf, read_docx and read_text_file by file type. It does not name those siblings explicitly, so the differentiation is implicit rather than stated.

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 two-step pattern is spelled out precisely: call without `sheet` first to discover sheet names, then call again with `sheet` to fetch data. That is clear when-to-use guidance for the main decision point, but there is no guidance on choosing between this tool and its sibling file readers, and no exclusions.

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

read_text_fileA
Read-onlyIdempotent
Inspect

Read a plain-text file (.txt, .md, .json, .csv, .yaml, .log, code, etc.) from path / url / base64. Returns UTF-8 text plus a truncation flag and token estimate. Honors an optional maxBytes cap. For .docx use read_docx, for .pdf use read_pdf, for .xlsx use read_spreadsheet.

NameRequiredDescriptionDefault
urlNo
dataNo
pathNo
maxBytesNoOptional cap on bytes to read.
mimeTypeNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds genuine behavioral context beyond that: the return shape (UTF-8 text plus truncation flag and token estimate) and the maxBytes truncation mechanism, which an agent needs to know reads may be partial.

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: capability first, return value second, sibling routing last. Front-loaded and every clause carries information the agent uses.

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

Completeness4/5

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

For a 5-param read tool with a rich annotation block and no output schema, the description covers purpose, sources, return shape and alternatives. The residual gap is the undocumented mimeType parameter and no note on error behavior when a path or URL fails, but nothing else an agent needs to invoke it 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 coverage is only 20% (only maxBytes is documented in-schema), so the description must carry more. It does map the three input modes to path/url/data(base64) and reinforces the maxBytes cap, but it never explains mimeType or why one source should be preferred over another — meaning one of five parameters remains opaque in both places.

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 (read) and resource (plain-text file), then enumerates supported extensions and the three accepted input sources (path / url / base64). It explicitly names the siblings it is not (read_docx, read_pdf, read_spreadsheet), so an agent can route 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 Guidelines4/5

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

Explicitly directs .docx/.pdf/.xlsx requests to the three dedicated readers, which is exactly the sibling differentiation an agent needs. It does not address other plausible overlaps in the large sibling list (inspect_file, scrape_url for URL sources, import_file_to_kb), so while routing is clear, the exclusions are not exhaustive.

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

release_twilio_numberA
Destructive
Inspect

Release (delete) a Twilio SMS/voice number from the workspace. This does not remove WhatsApp Cloud API waNumbers. Pass the full request body for /utils/twilio/release-number as an object — typically includes phoneNumber or phoneNumberSid.

NameRequiredDescriptionDefault
payloadYesFull request body object for /utils/twilio/release-number.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds value only by scoping the destruction to Twilio SMS/voice numbers and excluding WhatsApp numbers; it says nothing about irreversibility consequences, required permissions, or failure modes.

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 and scope, followed by the exclusion and payload guidance. No filler and every sentence carries 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 single pass-through payload tool with no output schema and full annotation coverage, the description covers action, scope, exclusion, and typical payload fields. Minor gap: no mention of what a successful response or failure could look like, but this is a low-complexity tool.

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%, but the schema's payload description is a tautology ('Full request body object for /utils/twilio/release-number'). The description compensates by naming the typical fields (phoneNumber or phoneNumberSid), which is genuinely additive information an agent would otherwise lack.

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 ('Release (delete) a Twilio SMS/voice number from the workspace'), clarifies the parenthetical equivalence, and explicitly separates it from WhatsApp number deletion. An agent can distinguish it from import_twilio_number, check_twilio_number, and whatsapp_numbers_write without reading 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 Guidelines3/5

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

The exclusion ('does not remove WhatsApp Cloud API waNumbers') gives a useful scope boundary, implying the sibling to use for WhatsApp numbers. However, it does not name that alternative tool or state prerequisites (e.g. number must be imported/active first), so guidance is implied rather than explicit.

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

run_agent_auto_testAInspect

Start Convocore automated agent test suite (POST /auto-test/run). Modes include tools-only, with-tools, kb-only, full. Returns testId/status/score. Prefer this for broader regression; use test_agent_tool for a single tool.

NameRequiredDescriptionDefault
configNo
agentIdYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), so the description only needs to add context. It adds that the call returns testId/status/score, which hints at a started job, but never states whether the run is synchronous or async and how to poll for completion, nor what permissions/agent state are required.

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 dense sentences with the core purpose front-loaded and zero filler. The mode enumeration is slightly wasted space given it is both redundant with the enum and incomplete.

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 usefully sketches the return fields (testId/status/score). But for a tool with a nested config of six options and likely long-running behavior, it leaves out async/sync semantics and config field meaning, which are the gaps an agent would actually hit when invoking it.

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 0% and the config object holds six undocumented nested properties, so the description must carry the load. It only partially documents testMode, and even that is incomplete ("tools-only, with-tools, kb-only, full" omits prompt-only and with-kb from the enum); agentId, enableKB, maxTurns, naturalEnd, testScenario and enabledToolIds get no explanation.

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 ("Start Convocore automated agent test suite") plus the backing endpoint POST /auto-test/run, and names the sibling test_agent_tool it is distinct from. An agent can tell instantly that this runs a full suite rather than a single-tool probe.

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 an explicit routing rule: "Prefer this for broader regression; use test_agent_tool for a single tool." That is a direct this-vs-alternative selection criterion, which is exactly what an agent needs to choose between the two test tools.

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

run_commandA
Destructive
Inspect

Execute a shell command on the host machine where the MCP server is running and return stdout, stderr, and the exit code. Runs through the platform default shell (cmd.exe on Windows, /bin/sh on Unix). Use for simple system tasks like checking versions, listing files, or running short scripts. NOTE: this tool has full access to the host shell with the MCP process privileges — only run commands you trust.

NameRequiredDescriptionDefault
cwdNoOptional working directory. Defaults to the MCP server cwd.
commandYesThe shell command to execute (e.g. "node --version" or "ls -la").
timeoutSecondsNoKill the process after this many seconds. Default 30, max 600.

TDQS

A4.1/5.0
Behavior4/5

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

The annotations already declare destructive, open-world, non-read-only behavior, and the description adds important context: the shell runs with MCP process privileges and should only be used with trusted commands. It also explains the return values, though it does not detail timeout side effects or specific command restrictions.

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

Conciseness5/5

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

The description is front-loaded with the core action and return values, followed by shell context, use cases, and a security warning. Every sentence adds useful information with no redundant 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?

With no output schema, the description explains the return values (stdout, stderr, exit code). Combined with annotations covering safety traits and a fully described schema, the description gives enough context to invoke the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already documents command, cwd, and timeoutSeconds with examples and defaults. The description adds no parameter-specific meaning beyond the schema, so the baseline of 3 is appropriate.

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

Purpose4/5

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

The description uses a specific verb and resource: "Execute a shell command on the host machine" and states it returns stdout, stderr, and exit code. It is clear what the tool does, though it does not explicitly distinguish itself from file-reading or code-related sibling 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?

It gives clear usage context: "Use for simple system tasks like checking versions, listing files, or running short scripts." It does not name alternatives such as read_text_file or inspect_file, but the intended use case is reasonably clear.

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

scrape_urlA
Read-onlyIdempotent
Inspect

Validate and/or scrape HTTP(S) URLs. DEFAULT mode=check: fast ping of one or many links/images (up to 20) — returns status (200/301/404/etc), ok, content-type, final URL after redirects. Use this to verify widget images, logos, CDN assets, booking links, or any URL before putting it on an agent. mode=scrape: full Convocore crawler scrape of ONE page (waits up to ~120s) for text/colours/favicon/images when building branded agents. After scrape, CHECK image URLs then call read_image on every important photo so you know what each picture is before putting it in the agent prompt. Default useProxy=false (~1 credit). CRITICAL — proxy: ONLY if a normal (useProxy=false) scrape fails/blocks AND the user explicitly confirms. Proxy is MUCH more expensive (~60 credits/page) and CONSUMES Convocore workspace credits. Requires useProxy=true + confirmExpensiveProxy=true. Never enable proxy proactively. Do NOT use scrape for KB ingest (use create_kb_from_urls). Workspace is resolved internally — never pass workspaceId.

NameRequiredDescriptionDefault
urlNoSingle URL (optional if urls is set)
modeNocheck = HTTP status ping (default). scrape = full page scrape (one URL only).
urlsNoURLs to check (preferred for validating multiple image/page links)
useProxyNomode=scrape only. Default false. true = expensive proxy scrape (~60 credits/page). ONLY after normal scrape failed AND user confirmed the extra credit cost.
confirmExpensiveProxyNoMust be true together with useProxy=true. Confirms the user approved burning extra Convocore workspace credits for proxy scraping.

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint/openWorldHint/idempotentHint and no destructiveness, so safety is largely covered by structured data. The description does add genuinely non-obvious behavior: ~120s scrape wait, per-mode cost (~1 credit vs ~60 credits/page with proxy), credit consumption in the workspace, and the requirement to pass both useProxy and confirmExpensiveProxy. That extra cost/limit context is valuable and, combined with a true read-only profile, warrants a 3 without over-crediting repetition of the annotations.

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

Conciseness4/5

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

Front-loads the default mode and its return shape, then the scrape mode and the post-scrape workflow, then proxy rules. The proxy warning is repeated two or three times (useProxy paragraph, CRITICAL paragraph, plus the schema), which is justified by the cost risk but slightly inflates length.

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 five parameters, no output schema, and a potentially expensive procedure, the description covers the return format, timing, cost model, workspace resolution ('never pass workspaceId'), and downstream steps (check image URLs then call read_image). Nothing needed 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, but the description adds meaning beyond the schema: it frames mode=check as the default, bounds the batch at 20 URLs for check mode, explains the single-URL restriction for scrape mode, and ties useProxy to both an explicit user confirmation and the companion confirmExpensiveProxy flag. That conjunction constraint is the kind of cross-parameter relationship that schemas alone rarely 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 specific verbs and resources (validate/ping URLs vs full page scrape) and cleanly separates the two modes by outcome: status/content-type/final URL versus text/colours/favicon/images. An agent can distinguish it from siblings like create_kb_from_urls or read_image using this text alone.

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 guidance for each mode (verify widget images, logos, CDN assets, booking links; scrape when building branded agents) and explicitly names alternatives/exclusions: 'Do NOT use scrape for KB ingest (use create_kb_from_urls)' and 'call read_image on every important photo'. It also states the proxy preconditions and forbids proactive use.

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

search_agentsA
Read-onlyIdempotent
Inspect

Search/filter Convocore agents. Default mode=compact (short fields only). Use mode=full only when you need complete agent docs. Prefer list_agents (compact) for recent agents without a query.

NameRequiredDescriptionDefault
modeNocompact (default): short summary fields only — token-cheap. full: complete API objects (heavy). Prefer get_* for one item.
pageNoPage number (default: 1)
limitNoResults per page (default: 50)
searchNoSearch query to find agents
sortByNoSort by: newest, oldest, alphabetical (default: newest)
starredOnlyNoShow only starred agents (default: false)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety bar is low. The description adds real behavioral context with the cost tradeoff (compact = token-cheap, full = heavy, prefer get_* for one item). It doesn't mention result-count or pagination behavior, but the page/limit params cover that.

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, zero preamble, with the core purpose and the mode default front-loaded before the alternatives. Every sentence earns its place.

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

Completeness4/5

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

For a 6-param, all-optional read-only search with no output schema, the description plus full schema coverage is nearly complete. A brief note on what a compact result set contains (fields, pagination envelope) would close the 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% with per-param descriptions for every field including mode, sortBy, and starredOnly, so the schema carries the load. The description reinforces only the mode parameter's semantics; it adds nothing about search-query matching or sort behavior beyond the schema. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ("Search/filter Convocore agents") and immediately frames the default behavior (mode=compact returns short fields). It also names the siblings it must be distinguished from (list_agents, get_*), so an agent can route 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?

Explicit when-to-use: mode=full only when complete agent docs are needed. Explicit alternative: prefer list_agents (compact) for recent agents without a query. It also defers single-item retrieval to get_* via the schema's mode note, covering all three paths.

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

search_kb_docsA
Read-onlyIdempotent
Inspect

Semantic/vector search over an agent knowledge base (POST .../kb/search). Prefer this to list_kb_docs when looking for content by meaning. For CRUD use create_kb_doc / get_kb_doc / patch_kb_doc.

NameRequiredDescriptionDefault
vectorNo
agentIdYes
vectorDbNo
max_chunksNoHow many chunks to return. Prefer a small number. Default 3.
searchQueryNo
with_vectorNo
with_payloadNo
defaultDimensionNo
similarity_thresholdNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds the POST endpoint and the semantic-search behavior, but says nothing about result scoring, pagination, or how vector vs query search is handled.

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

Conciseness5/5

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

Three sentences, front-loaded with purpose and routing. Every sentence earns its place and there is no repetition of schema or annotations.

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?

This is a complex nine-parameter search tool with no output schema and very low schema description coverage. The description gives good routing but leaves the agent without enough information to choose the right search mode or understand the non-obvious parameters.

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 only 11% (only max_chunks is documented), and the description adds no meaningful guidance for the other eight parameters. It implies semantic/vector input but does not explain when to use searchQuery instead of vector, what vectorDb or defaultDimension do, or how similarity_threshold affects results.

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: semantic/vector search over an agent knowledge base, with the endpoint noted. It explicitly contrasts with list_kb_docs and CRUD siblings, so an agent can identify its role 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?

Gives explicit when-to-use guidance: prefer this over list_kb_docs when looking for content by meaning. It also routes CRUD operations to create_kb_doc, get_kb_doc, and patch_kb_doc.

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

search_mcp_toolsA
Read-onlyIdempotent
Inspect

Search this MCP server's tool catalog by keyword/domain before calling other tools. Use when unsure which tool to pick among orgs/clients/leads/agent_tools/variables/kb/testing. detail=names|brief|schema. Does not call the Convocore API.

NameRequiredDescriptionDefault
limitNo
queryYes
detailNo
domainNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/openWorld=false/idempotent/non-destructive, so the safety profile is covered. The description adds real value beyond them: the tool is a local catalog lookup that does not hit the Convocore backend, and the detail knob governs response verbosity. Return shape is only implied.

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, zero filler, with the purpose and the pre-call routing instruction front-loaded before the parameter hints. Every sentence contributes 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's detail=names|brief|schema line does the job of telling the agent what comes back at each verbosity. The undisclosed 'limit' parameter and missing default for detail are the only residual gaps for a 4-parameter meta tool.

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 carry the load and largely does: it explains that query is keyword/domain-based, that domain draws from the enumerated set, and that detail selects names|brief|schema payload depth. Only 'limit' is left entirely 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?

States a specific verb and resource ('Search this MCP server's tool catalog by keyword/domain') and enumerates the domain space it covers (orgs/clients/leads/agent_tools/variables/kb/testing), which makes it instantly distinguishable from every domain sibling. It stops short of a perfect 5 only because the phrase 'tool catalog' is the sole framing of scope.

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 to use it 'before calling other tools' and 'when unsure which tool to pick', which is a concrete triggering condition. The closing sentence 'Does not call the Convocore API' rules out the common misread that this is a data-query tool. No explicit when-not beyond that, so not a 5.

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

search_voicesA
Read-onlyIdempotent
Inspect

Unified voice search across one or more TTS providers. Every result is normalized to { voiceId, name, provider, previewUrl, filters: { accent, gender, useCase, language } }. Use this when the user asks for a voice by gender / language / accent without caring which provider. Read-only — does NOT consume credits.

NameRequiredDescriptionDefault
limitNoPage size, 1–500. Default 100.
accentNoSubstring match, e.g. "american", "british".
genderNomale / female / neutral. Aliases m / f / masculine / feminine accepted.
offsetNoPagination offset. Default 0.
modelIdNoFilter to a specific TTS model id when relevant.
languageNoInclusive match: "en" matches "en-US", "en-GB", "English". Use BCP-47 codes or English names.
providersNoComma-separated provider slugs to limit the search (e.g. "elevenlabs,cartesia"). Omit for all providers.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds genuinely new context that it does NOT consume credits, which matters for a metered TTS product, and it documents the normalized return shape despite having 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.

Conciseness5/5

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

Three tight sentences: what it does, what it returns, when to use it, plus a cost note. The selection cue is front-loaded and nothing 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?

For a read-only, zero-required-parameter search with a fully documented schema, this covers everything an agent needs: purpose, use case, result shape in lieu of an output schema, and billing behavior. Nothing material 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 the seven parameters are fully documented there, including aliases and match semantics. The description only restates the filter concepts (gender/language/accent) without adding format or edge-case detail, so 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 and resource (voice search) plus the scope (unified across TTS providers). The normalization shape and the note about provider-agnostic retrieval let an agent distinguish it from list_provider_voices or get_voice 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?

Gives an explicit selection cue: use when the user wants a voice by gender/language/accent and doesn't care which provider. It doesn't name the sibling alternatives (e.g. list_provider_voices for per-provider browsing) or state exclusions, so it falls just 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.

send_channel_messageAInspect

Push an agent-initiated message onto the conversation channel (WhatsApp, Messenger, Instagram, Telegram, SMS, Discord). Does NOT run the LLM — text is sent as-is. Subject to provider rules (e.g. Meta 24h window). Do NOT use update_conversation_messages for channel delivery (that only updates stored history).

NameRequiredDescriptionDefault
agentIdYes
convoIdYes
messageNoPlain text body (required unless messages is set).
optionsNo
messagesNoStructured channel messages when not using message.
sourceLabelNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare openWorldHint=true and non-idempotent, so the risk profile is partly covered; the description still adds genuinely new context by stating no LLM is invoked, the text is transmitted verbatim, and provider-side constraints such as the Meta 24h window apply. It omits what happens on a rejected send (error vs silent drop) and whether provider limits are surfaced back to the caller.

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 in descending priority: what it does, what it does not do internally, and which sibling not to use. No filler, no restatement of the title, and the most decision-relevant constraint (no LLM) 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?

Behavioral semantics for a non-idempotent, open-world delivery tool are well covered for such a short description, and no output schema exists to explain. However, with 6 parameters including an undefined nested options object and no guidance on message-vs-messages selection semantics or sourceLabel, an agent still cannot construct a non-trivial call from the description alone.

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 only 33% – agentId, convoId, options and sourceLabel carry no schema text at all, and options is a nested object with no defined shape. The description adds no parameter guidance beyond the implicit notion of a text body, so it fails to compensate 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?

Specific verb+resource ('Push an agent-initiated message onto the conversation channel') with the exact channel list enumerated, plus a clarifying negative ('Does NOT run the LLM — text is sent as-is') that pins down what kind of send this is. An agent can distinguish it from update_conversation_messages purely from the description.

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 an explicit exclusion with the sibling named ('Do NOT use update_conversation_messages for channel delivery (that only updates stored history)'), which is exactly the confusion this tool family invites. It stops short of routing the agent to the other delivery sibling send_sms or explaining when to use options/messages instead of plain text.

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

send_handoff_reminderAInspect

Re-send the human-handoff notification for a conversation that is waiting for a human (emails the team again). userId is the conversation / end-user id. Sends a real email.

NameRequiredDescriptionDefault
userIdYesConversation / end-user id waiting for a human.
agentIdYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already flag readOnlyHint=false and idempotentHint=false, and the description usefully reinforces this with 'Sends a real email' and '(emails the team again)', signalling a real external side effect with no dedupe. It does not cover rate limits, who receives the email, or failure behavior, so it is not 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 short sentences, front-loaded with the action and the precondition, and the terse 'Sends a real email.' earns its place by communicating the real-world side effect. 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 2-parameter mutation with no output schema, the description covers the precondition and the side effect but leaves agentId unexplained and says nothing about what a caller sees on success or failure. Annotations carry safety, so the gap is moderate rather than critical.

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

Parameters3/5

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

Schema coverage is 50%: userId is described in both schema and description, but agentId has no description in either place. The description adds disambiguation value for userId ('conversation / end-user id') but leaves agentId completely opaque.

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: re-sends the human-handoff notification for a conversation waiting on a human, with the parenthetical clarifying it emails the team. It is unambiguous and clearly distinct from the many CRUD siblings. It stops short of naming a sibling alternative, which keeps it at 4 rather than 5.

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 condition 'for a conversation that is waiting for a human' implies when to use it, but there is no explicit when-not guidance, no mention of when to prefer assign_conversation or send_channel_message, and no prerequisites or retry-throttling advice. Usage is inferred rather than stated.

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

send_smsAInspect

Send a REAL SMS from the agent's connected SMS number. sendMode=direct (default) sends message as written; sendMode=agent lets the agent write the text (message is then optional). mediaUrls sends MMS. Bills the workspace. For WhatsApp / Messenger / Instagram replies use send_channel_message instead.

NameRequiredDescriptionDefault
toYesRecipient, E.164.
fromNoOptional: a specific connected number. Defaults to the agent's primary SMS number.
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
agentIdYes
convoIdNoOptional custom conversation id. Defaults to the recipient digits.
messageNoText to send. Required for sendMode=direct.
optionsNoOptional per-message agent overrides.
leadInfoNoOptional details about the person (username, email, address, company, notes…) the agent can use to personalize.
sendModeNo
mediaUrlsNoUp to 10 MMS media URLs.
campaignIdNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare this is not read-only, is open-world, and is not idempotent. The description adds important context beyond annotations: it sends a real SMS, bills the workspace, supports MMS through mediaUrls, and changes requiredness of message depending on sendMode.

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 four tight sentences with the core action, mode behavior, MMS/billing note, and sibling alternative front-loaded. Every sentence provides decision-relevant information without repetition.

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 outbound messaging tool with no output schema, the description covers the essential selection and calling context: channel scope, send modes, billing, and the sibling tool for other channels. It does not describe the response or delivery confirmation, but the key operational details are present.

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 73%, so some parameters are already documented, but the description adds critical semantics for sendMode that the schema does not explain beyond the enum, and clarifies that message is optional in agent mode. It also maps mediaUrls to MMS behavior, though it does not cover parameters such as from, convoId, leadInfo, or campaignId.

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 sends a REAL SMS from the agent's connected SMS number. It also distinguishes the tool from send_channel_message for WhatsApp, Messenger, and Instagram, so an agent can identify the correct channel-specific sender.

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 explicitly names the alternative for other messaging channels and explains the sendMode choices: direct sends the message as written, while agent lets the agent generate text and makes message optional. The default is stated, leaving little inference needed.

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

sleepA
Read-onlyIdempotent
Inspect

Pause for the given number of seconds and then return. Useful when you need to wait between actions (e.g. polling a job, rate-limiting, giving an external system time to settle). Range: 0–300 seconds.

NameRequiredDescriptionDefault
secondsYesHow long to wait, in seconds (0–300).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds the genuinely useful behavioral facts: the call blocks until the interval elapses and the interval is capped at 300 seconds, which the annotations cannot convey. It does not mention any cost or concurrency implications of blocking, so a small gap remains.

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 behavior comes first, then the use cases and the bound. Nothing is redundant and nothing is buried.

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, no-output, fully annotated utility tool, the description covers behavior, use cases and limits. There is nothing else an agent needs in order to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter already documents type and the 0–300 bounds. The description only restates that same range, adding no syntax or edge-case meaning 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.

Purpose5/5

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

States a specific action and its exact effect: 'Pause for the given number of seconds and then return.' The action, the unit, and the return behavior are all explicit, so an agent knows precisely what calling it produces.

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 three concrete usage contexts (polling a job, rate-limiting, letting an external system settle), which is exactly the guidance needed to decide when to insert a wait. No sibling tool competes with this behavior, so no exclusion clause is required.

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

sms_numbers_readA
Read-onlyIdempotent
Inspect

Read the SMS numbers of an agent and search numbers that can be rented. Voice phone numbers are in get_agent_phone. Actions: list — SMS numbers connected to the agent Needs: agentId. | analytics — SMS volume and delivery analytics for the agent Needs: agentId. | rental_status — whether the agent has a rented platform number and its state Needs: agentId. | rental_available — whether number rental is offered in a country | search_available — numbers available to rent, filtered by country / area code / digits

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
limitNoFor search_available: max 50.
actionYes
agentIdNo
countryNoTwo-letter country code, default "US".
areaCodeNo
containsNoDigits the number should contain.
localityNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds value beyond that by disclosing that rental_available reports whether rental is offered per country and that search_available queries externally rentable inventory — context that explains the open-world hint. It omits any note on pagination or result size limits for search.

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 core purpose and the sibling disambiguation are front-loaded in the first two sentences, then actions are listed in a scannable pipe-delimited form with zero filler. The repeated "Needs: agentId" phrase three times is mild redundancy that could be consolidated, but nothing is padded.

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

Completeness4/5

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

For a 5-action, 8-parameter multiplexed tool with no output schema, the description covers every action and every required parameter pairing, which is the critical information for correct invocation. It does not characterize return shapes (number lists vs. analytics payloads), which is a real gap given the absence of an output schema, but not one that blocks correct selection.

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% (agentId, areaCode and locality have no schema descriptions), but the description compensates: it ties agentId to the three agent-scoped actions and describes search_available as "filtered by country / area code / digits", implicitly covering country, areaCode and contains. locality and the compact/full mode are left to the schema, which keeps it below a 5.

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 ("Read the SMS numbers of an agent and search numbers that can be rented") and immediately disambiguates from the sibling voice tool: "Voice phone numbers are in get_agent_phone." The action enumeration further pins down the full capability surface, so an agent can distinguish it from sms_numbers_write and get_agent_phone 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 Guidelines4/5

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

Each of the five actions is given a one-line meaning plus its requirement ("Needs: agentId"), which tells the caller exactly which condition selects which branch. The voice-vs-SMS pointer to get_agent_phone is an explicit alternative. It stops short of stating exclusions for the write path (sms_numbers_write) or prerequisite permissions, so it is clear but not fully exhaustive.

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

sms_numbers_writeA
Destructive
Inspect

Manage the SMS numbers of an agent. Connecting your own Twilio account and paying for a rented number are done on the dashboard (they need credentials / card details that must not go through chat). test_send sends a real SMS. Actions: remove — disconnect an SMS number from the agent Needs: phoneNumber. | assign_rental — attach an already-rented platform number to the agent Needs: phoneNumber. | release_rental — give up the rented number of the agent (it stops working; confirm first) | test_send — send a test SMS from the agent number Needs: testPhoneNumber.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
actionYes
agentIdYes
messageNoFor test_send (optional).
phoneNumberNoE.164 number, for remove and assign_rental.
testPhoneNumberNoFor test_send: E.164 recipient.

TDQS

A4.1/5.0
Behavior4/5

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

Beyond the annotations (destructiveHint=true, openWorldHint=true), the description specifies which action is destructive and why ('it stops working'), that test_send sends a real SMS, and that certain setup steps require out-of-band credentials. It leaves open whether remove is reversible and whether release_rental can be undone by re-assigning.

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?

Scoping caveats (dashboard-only setup) are front-loaded, then actions are listed in a scannable format with per-action requirements inline. No sentence is 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 4-action, 6-parameter mutation tool with no output schema, the description covers what each action does, which parameters each needs, and the destructive/real-world side effects. It omits return behavior for test_send and any error/edge conditions (e.g., number not currently attached).

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 67%, but the schema has no per-action conditionality; the description supplies it by mapping phoneNumber to remove/assign_rental and testPhoneNumber to test_send, which is real added meaning. It says nothing about `mode` or what `message` does beyond the schema's own 'For test_send (optional)' note.

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 resource (SMS numbers of an agent) and enumerates four concrete actions with a one-line definition each (remove, assign_rental, release_rental, test_send), which is far more specific than the title alone. It stops short of distinguishing itself from adjacent siblings like sms_numbers_read or release_twilio_number/import_twilio_number, which a reader must infer.

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 draws explicit when-not boundaries: connecting your own Twilio account or renting a number must happen on the dashboard because credentials/card details cannot go through chat, and release_rental carries a 'confirm first' instruction. It does not, however, route the agent to alternatives such as sms_numbers_read for listing or release_twilio_number for platform-level release.

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

start_outbound_callAInspect

Place a REAL outbound phone call now: the agent calls the "to" number from its assigned number and talks to whoever answers. Bills voice minutes. Confirm the number with the user first. For many leads at once use contact_leads or a campaign (campaigns_write).

NameRequiredDescriptionDefault
toYesNumber to call, E.164 (e.g. +15551234567).
fromNoOptional: one of the agent's numbers. Defaults to its primary number.
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
agentIdYes
optionsNoOptional per-call agent overrides (e.g. initialPrompt, variables).
leadInfoNoOptional details about the person (username, email, address, company, notes…) the agent can use to personalize.
campaignIdNoOptional: attribute the call to a campaign.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare openWorldHint=true and idempotentHint=false, but the description adds real value by disclosing that this places a REAL call that 'bills voice minutes' — a cost/side-effect fact not in the annotations. It stops short of detailing rate limits or failure behavior, so not 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 tight sentences with the core action and cost front-loaded, then safety/confirmation, then the bulk-use alternative. 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?

For a 7-param mutation with nested options/leadInfo and no output schema, the description covers the essential action, cost, confirmation, and alternative routing. It could mention what the call returns (call/conversation id) but is otherwise sufficient to invoke correctly.

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

Parameters3/5

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

Schema coverage is 86%, so the schema already documents to/from/mode/options/leadInfo/campaignId, including E.164 format and defaults. The description only reinforces the 'to' semantics from its 'calls the "to" number from its assigned number' phrasing, adding little beyond the schema — 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?

States a specific verb and resource ('Place a REAL outbound phone call') and clarifies the actor/callee mechanics ('the agent calls the "to" number... and talks to whoever answers'). This clearly distinguishes it from soft alternatives like contact_leads and campaign tools.

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 to confirm the number with the user first and routes high-volume use to contact_leads or campaigns_write. Both the when-to-use and the when-to-use-something-else are named with the alternative tool.

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

sync_sms_twilio_numberAInspect

Assign a Twilio number to an agent for SMS handling. This is SMS only; WhatsApp routing uses waNumbers/{phoneId}, origin "whatsapp", and Meta Cloud API. Pass the full request body for /utils/twilio/sync-sms as an object — typically includes phoneNumber (or sid) and agentId.

NameRequiredDescriptionDefault
payloadYesFull request body object for /utils/twilio/sync-sms.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnly=false, openWorld=true, idempotent=false, destructive=false, so the mutation profile is carried by structured data. The description adds the target endpoint path but does not say what happens when the number is already assigned elsewhere, or what a repeat sync does despite being non-idempotent.

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, front-loaded with the core action, followed by the channel exclusion and body guidance. The API-path reference is slightly jargon-heavy but earns its place by mapping to the payload contract.

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 nested-object mutation with no output schema, the description covers what the tool does, what to put in the payload, and which channel it applies to. Missing only edge-case behavior such as reassignment conflicts, which keeps it from a 5.

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 one nested opaque object parameter at 100% schema coverage, the schema only says 'Full request body object'. The description compensates by naming the expected body fields (phoneNumber or sid, plus agentId), which is genuine meaning beyond the schema.

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: 'Assign a Twilio number to an agent for SMS handling'. The SMS-vs-WhatsApp scoping distinguishes it from WhatsApp number handling, but it does not clarify its relationship to the closely named siblings import_twilio_number, release_twilio_number, or check_twilio_number.

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?

Explicitly excludes WhatsApp routing and points to the alternate path (waNumbers/{phoneId}, origin 'whatsapp'), which is useful channel-level guidance. However, it never says when to use this instead of import_twilio_number or release_twilio_number, which is the more likely point of confusion for an agent.

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

test_agent_toolAInspect

Test a Convocore agent HTTP tool via interact WebSocket toolTest mode (validate | generate-and-test). Runs through the agent runtime. For a direct HTTP dry-run against serverUrl use test_agent_tool_request. For multi-turn suites use run_agent_auto_test.

NameRequiredDescriptionDefault
modeNoDefault generate-and-test.
toolIdYes
agentIdYes
convoIdNo
messageNo
toolNameYes
timeoutMsNo

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true and idempotentHint=false, so the agent knows this makes external calls and is not a safe repeatable read. The description adds useful context that execution runs through the live agent runtime via WebSocket toolTest mode, but it never states what 'generate-and-test' actually creates or mutates (e.g. whether the tool definition is written), nor what happens on timeout. That is the key behavioral fact the annotations leave open.

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 followed by two sibling-disambiguation clauses. No filler and nothing repeated from structured fields.

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?

A 7-parameter, runtime-executing test tool with no output schema needs the description to cover parameter roles and result expectations. Routing and purpose are complete, but the description never says what validate versus generate-and-test returns or why convoId/message/timeoutMs matter, leaving real gaps for an agent configuring a call.

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 only 14% — six of seven parameters have no schema-level documentation. The description only illuminates the mode enum (validate | generate-and-test), and even then not what each mode does. It says nothing about agentId, toolId, toolName, convoId, message or timeoutMs, including the important distinction between toolId and toolName, which are both required.

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?

Names a specific verb and resource (test an agent HTTP tool) plus the exact execution path (interact WebSocket toolTest mode through the agent runtime) and the two modes. It also explicitly distinguishes itself from the two nearest siblings, so an agent can separate this from test_agent_tool_request and run_agent_auto_test 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?

Gives explicit routing rules: use test_agent_tool_request for a direct HTTP dry-run against serverUrl, and run_agent_auto_test for multi-turn suites. Both alternatives are named with the condition that selects them, which is exactly the guidance an agent needs to pick correctly among three overlapping testing tools.

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

test_agent_tool_requestA
Destructive
Inspect

Fire a real HTTP request for a saved tool, bypassing the LLM. Tools with a custom HTTP request (httpRequest.enabled) are replayed exactly as the live runtime sends them: saved bodyTemplate, fixed values, headers, query and environment variables, with fieldOverrides used as the AI-input values (keyed by variable key). Environment variable values and auth headers are masked in the returned request preview. Legacy serverUrl tools are assembled from fields[]. Side effects on the remote API are possible — use carefully.

NameRequiredDescriptionDefault
toolIdYes
timeoutMsNo
bodyOverrideNo
fieldOverridesNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, openWorldHint=true, and idempotentHint=false, so the safety profile is covered. The description adds genuinely useful context beyond that: env var and auth header values are masked in the returned request preview, fieldOverrides map to AI-input values keyed by variable key, and remote side effects are possible. It doesn't cover return format details, but the added masking and request-assembly behavior is substantive.

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 core action and safety warning are front-loaded, and the sentence about request assembly packs a lot of useful detail without much waste. Slightly dense but well-structured.

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?

There is no output schema, so the description must carry the behavioral burden, which it largely does for the request mechanism and masking. However, for a destructive, open-world tool with zero schema coverage and a nested fieldOverrides object, the missing documentation of timeoutMs and bodyOverride leaves material gaps an agent needs to call it correctly.

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

Parameters3/5

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

Schema description coverage is 0% across four parameters, so the schema provides no guidance. The description compensates for fieldOverrides (keyed by variable key, used as AI-input values) and explains toolId implicitly, but leaves timeoutMs and bodyOverride completely undocumented, leaving half the parameters 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?

States a specific verb and resource ("Fire a real HTTP request for a saved tool") and immediately distinguishes itself via "bypassing the LLM", which contrasts with the sibling test_agent_tool. An agent can tell what this does 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 Guidelines3/5

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

The description explains the mechanism and warns "use carefully" with side effects, but it never explicitly says when to pick this over test_agent_tool or test_agent_tool_request alternatives. The usage context (tools with httpRequest.enabled, legacy serverUrl tools) is implied rather than stated as selection criteria.

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

tool_sharingA
Destructive
Inspect

Copy a tool to other agents or share one tool across the workspace. A COPY is independent afterwards; a SHARED tool stays one tool used by many agents, so editing it changes all of them. Actions: copy — copy a tool to one agent Needs: toolId, targetAgentId. | copy_to_agents — copy a tool (and its variables) to many agents Needs: toolId, targetAgentIds, tool. | set_access — choose who can use the tool: private, whole workspace, chosen agents or client orgs Needs: toolId, agentId, tool, access. | publish_workspace — publish the tool to every agent of the workspace Needs: toolId, agentId, tool. | make_private — stop sharing: the tool belongs to one agent again Needs: toolId, agentId. | share — share an existing tool with the workspace or an org Needs: toolId, scope. | update_shared — edit a shared tool (affects every agent using it) Needs: toolId, tool. | unassign_shared — remove a shared tool from one agent Needs: toolId, agentId. | delete_shared — delete a shared tool for everyone (confirm first) Needs: toolId.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
toolNoFull tool definition (from get_agent_tool) where the action needs it.
orgIdNo
scopeNo
accessNo
actionYes
orgIdsNoFor set_access=clients.
toolIdNo
agentIdNoAgent that owns / uses the tool.
agentIdsNoFor set_access=agents.
variablesNoVariables the tool uses, to copy with it.
targetAgentIdNo
targetAgentIdsNoUp to 40 agents.
confirmOverwriteNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true, readOnlyHint=false, and idempotentHint=false; the description adds real value on top by explaining propagation semantics (copy is detached afterward, shared edits hit every consumer) and warning to confirm before delete_shared. It does not explain the confirmOverwrite flag or what any action returns.

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 conceptual distinction that determines correct use is front-loaded, then a dense but scannable action list. The repeated 'Needs:' phrasing is compact and consistent, though the run-on pipe formatting makes the block harder to parse than it needs to be.

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 14-parameter, nine-action mutation tool with no output schema, the description supplies what the agent most needs: what each action does, what it requires, and which ones are irreversible or propagate to other agents. Remaining omissions (mode, confirmOverwrite) are minor against the complexity covered.

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% across 14 parameters, but the description compensates substantially by listing the required parameter set for each of the nine actions — conditional requirements the flat schema cannot express. Gaps remain: 'mode', 'confirmOverwrite', and the agentIds/orgIds sub-cases of set_access are only covered (or not at all) 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 and resource up front ('Copy a tool to other agents or share one tool across the workspace') and immediately disambiguates the two modes: a COPY is independent, a SHARED tool is a single instance used by many. The nine enumerated actions make the tool's full scope legible 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?

The copy-vs-share framing plus per-action descriptions give clear guidance on which action to pick, and the consequence clause ('editing it changes all of them') tells the agent when a shared action is dangerous. It stops short of naming alternatives or exclusions, e.g. when to prefer update_shared over update_agent_tool, or that a tool definition must first come from get_agent_tool.

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

update_agentAInspect

Update an existing Convocore agent (PATCH). For large prompt edits prefer patch_agent_prompt. Main prompt: use systemPrompt → start node instructions. NEVER send vg_instructions or vg_systemPrompt. Do NOT pass nodes[] unless you are changing nodes — omit it for title/UI/funnel/model updates. Partial nodes[] are GET-merged by id; a toolsIds-only start node cannot blank instructions, and toolsIds in a patch are only ever ADDED (tools attached on the dashboard are kept). To detach tools pass allowRemoveTools=true. Lead notify: funnelConfig (steps + notificationRules.recipients). UI Engine: vg_enableUIEngine* + vg_uiEngineChannelConfig. ownerID is read-only.

NameRequiredDescriptionDefault
lightNoUpdated light mode setting
nodesNoNode patch. MCP merges onto the current graph by node id so partial updates (e.g. toolsIds) cannot blank nodes[0].instructions. Prefer systemPrompt for prompt writes.
themeNoUpdated theme
titleNoUpdated title
agentIdYesThe unique identifier of the agent to update
disabledNoUpdated disabled status
descriptionNoUpdated description
voiceConfigNoAgent voiceConfig for voice-capable agents. Integrations/API keys generally live at workspace/org level; this config selects providers, models, voices, and call behavior for the agent.
enableVertexNoUpdated Vertex AI setting
funnelConfigNoAI Funnel & Lead Scoring (built-in). Use this instead of a custom HTTP “notify sales team” webhook. enabled + steps (id/name/description/condition/points/category) + notificationRules (type score_threshold|steps_completed|data_collected, recipients emails, cooldownStrategy). Runtime scores the conversation and emails recipients when a rule fires.
systemPromptNoReplace main prompt → nodes[0].instructions (enableNodes forced true). Prefer patch_agent_prompt for surgical edits.
autoOpenWidgetNoUpdated auto-open widget setting
additionalConfigNoEvery other agent field the API accepts, typed from the main agent schema. Send only what changes: nested objects (nodesSettings, vg_kb_llm, ui…) are deep-merged into the current value, so existing settings are kept. Do not put the main prompt here (use systemPrompt / patch_agent_prompt). Unknown fields are rejected up front with the valid names.
vg_enableUIEngineNoMASTER SWITCH for UI Engine. When true the agent can emit structured UI (text, choice/buttons, visual, cardV2, carousel, iFrame, and — if their flags are on — form/input, invoice, calendarBooking). Call get_ui_engine_spec for payloads. Prefer enabling this before toggling individual elements.
leadCollectionRulesNoWhen to persist a CRM lead. Default: collect when email, phone, or phone_number is present.
vg_maxImagesPerCardNoMax images per cardV2/carousel card: 1 = imageUrl only; 2–3 allow images[] gallery. Omit for platform default.
vg_enableUIEngineFormsNoAllow form + input UI Engine elements (typically web). Set true to let the agent collect structured fields. Also set vg_uiEngineChannelConfig.web.form / .input as needed.
vg_enableUIEngineInvoiceNoAllow invoice card UI Engine elements (web). Use with vg_uiEngineInvoiceConfig for click notifications.
vg_uiEngineChannelConfigNoPer-channel allowlist of which UI Engine elements the agent may show. Channels: web, whatsapp, instagram, messenger, telegram. Each channel is an object of type→boolean (choice, visual, cardV2, carousel, iFrame, form, input, invoice, calendarBooking, file, VoiceNote, locationRequest, ctaUrl). Missing type = enabled. Example: { "web": { "choice": true, "cardV2": true, "form": true, "invoice": false }, "whatsapp": { "choice": true, "cardV2": true, "form": false } }. Forms/invoice/calendar still need their global vg_enableUIEngine* flags.
vg_uiEngineInvoiceConfigNoInvoice card notification settings.
vg_uiEngineCalendarConfigNoCalendar booking widget config (Google Calendar connection + booking rules).
vg_uiEngineFormNotifyConfigNoEmail notify settings when forms/inputs are submitted.
vg_enableUIEngineCalendarBookingNoAllow interactive calendar booking widget (web). Requires Google Calendar connectionIds in vg_uiEngineCalendarConfig.

TDQS

A4.5/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing non-obvious semantics: partial nodes[] are GET-merged by id, toolsIds are additive and dashboard tools are preserved, allowRemoveTools=true is required for detaching, and ownerID is read-only. Remaining gap is that the response shape and failure behavior aren't mentioned at all.

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 PATCH scope, then prioritizes the highest-risk gotchas (prompt routing, nodes omission, additive tools) before the niche field groups. Dense but every clause carries information; the terse vg_* shorthand assumes the reader maps it to schema fields.

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 23-parameter mutation tool with deep nested objects and no output schema, the description covers the traps that cause data loss or silent no-ops. The missing piece is any indication of what the call returns or how partial failures surface, which matters for a non-idempotent write.

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 the baseline is 3; the description adds real value by disambiguating systemPrompt (writes to nodes[0].instructions) from vg_systemPrompt (never send), by steering prompt edits to patch_agent_prompt, and by grouping UI Engine fields under vg_enableUIEngine* + vg_uiEngineChannelConfig. It does not cover most of the 23 parameters, but the ones it covers are the error-prone ones.

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 ('Update an existing Convocore agent (PATCH)') and immediately names the sibling that handles the adjacent job (patch_agent_prompt for large prompt edits). An agent can distinguish this from create_agent, patch_agent_prompt, and update_agent_custom_css 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 routing rules: prefer patch_agent_prompt for large prompt edits, do NOT pass nodes[] unless changing nodes, use funnelConfig instead of a custom webhook, and set vg_enableUIEngine first before individual element flags. These are concrete when/when-not conditions tied to alternatives in the sibling list.

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

update_agent_custom_cssA
Destructive
Inspect

Overwrite the agent's customCSS field with new CSS that styles the chat widget. IMPORTANT: this REPLACES the existing customCSS value — always pass the FULL merged CSS (existing + your new rules), not just the delta. Workflow: (1) call get_widget_css_styling_guide to load selectors + rules, (2) optionally call get_agent_custom_css to read what's already there, (3) generate the merged CSS following the guide, (4) call this tool to persist. Pass an empty string to clear all customCSS for the agent.

NameRequiredDescriptionDefault
agentIdYesThe agent ID whose customCSS field you want to overwrite
customCSSYesThe full CSS to write to the agent.customCSS field. REPLACES the existing value entirely. Use an empty string to clear.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and idempotentHint=false, but the description adds the critical non-obvious semantics: the field is fully replaced, so callers must send merged CSS, and an empty string clears the value. This is exactly the kind of context annotations cannot convey.

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 replacement warning before the workflow, then closes with the edge case. Dense but every sentence carries actionable information 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 2-parameter mutation with no output schema, the description covers prerequisites, ordering, merge semantics, and the clearing case. Nothing an agent needs 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 already document replacement and clearing behavior. The description reinforces the same points but adds no format/syntax 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.

Purpose5/5

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

States a specific verb (overwrite) and resource (agent's customCSS field) plus the downstream effect (styles the chat widget). Clearly distinguishable from sibling get_agent_custom_css, which reads rather than replaces.

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 an explicit 4-step workflow, names the prerequisite tools (get_widget_css_styling_guide, get_agent_custom_css), and states the exact condition for the empty-string case. Alternatives and ordering are spelled out rather than implied.

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

update_agent_toolB
Idempotent
Inspect

Patch an existing Convocore agent HTTP tool by toolId. Pass only fields to change inside tool{}.

NameRequiredDescriptionDefault
toolYes
toolIdYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare non-read-only, idempotent, non-destructive, open-world behavior, so safety is covered. The description adds real value by disclosing partial-update semantics (only changed fields are applied) that idempotentHint does not convey. It still says nothing about required permissions, what happens to unmentioned nested fields, or the response.

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 short sentences, no filler, with the identity and the key front-loaded before the patch instruction. Every clause earns its place.

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

Completeness2/5

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

For a mutation tool with a free-form nested object, no output schema, and 0% schema coverage, the description should explain how to learn valid tool fields (e.g., via get_agent_tool) and what a patch returns. Neither is addressed, so an agent could not reliably construct the call from this definition alone.

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 0% and 'tool' is an untyped object with no declared properties, so the schema tells the agent nothing about which fields are valid or their formats. The description only contributes partial-update semantics; it never enumerates or points to the shape of tool{}, leaving the most complex parameter opaque.

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 ('Patch') and resource ('existing Convocore agent HTTP tool') plus the key ('toolId'), which cleanly separates it from create_agent_tool, delete_agent_tool, and get_agent_tool. It does not name those siblings explicitly, so differentiation is inferred rather than stated.

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?

'Pass only fields to change inside tool{}' is genuine usage guidance for patch semantics, implying omitted fields are left untouched. But there is no explicit when-to-use vs create_agent_tool/delete_agent_tool, and no stated prerequisite such as fetching the existing tool first.

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

update_agent_variableA
Idempotent
Inspect

Patch an existing Convocore agent variable by variableId. Pass only fields to change. Never send back a masked env value as defaultValue — omit it to keep the stored value.

NameRequiredDescriptionDefault
variableYes
variableIdYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true, destructiveHint=false, readOnlyHint=false, so the safety profile is covered. The description adds genuinely non-obvious context: masked env values must not be echoed back as defaultValue, and omitting the field preserves the stored value — a real behavioral caveat beyond the annotations.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core action (patch by variableId) and immediately followed by the two operational constraints. No filler; every sentence earns its place.

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 patch tool with a nested object whose schema has 0% description coverage, the agent still doesn't know the valid field set to include in 'variable'. Annotations cover the mutation safety profile, but the description should enumerate or reference the patchable fields to be complete.

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 0% and the 'variable' parameter is an undocumented nested object, so the schema gives the agent almost nothing about which fields can be patched. The description mentions defaultValue semantics for masked env values but never enumerates the patchable fields, leaving most of the parameter shape unexplained.

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 the specific verb (Patch), resource (existing Convocore agent variable), and the key identifier (variableId). This cleanly distinguishes it from sibling get/create/delete/list_agent_variable and update_agent, so an agent can select it 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 Guidelines4/5

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

'Pass only fields to change' clearly frames this as a partial update, telling the agent to send a sparse payload rather than the full object. It doesn't explicitly name alternatives (e.g., create_agent_variable or update_agent), so it stops short of a full when/when-not comparison.

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

update_conversationAInspect

Patch fields on the light conversation document. This does NOT replace the stored turn/message history. To replace transcript turns, use update_conversation_messages.

NameRequiredDescriptionDefault
agentIdYesThe agent ID
convoIdYesThe conversation ID
conversationYesConversation fields to update

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true, so safety profile is covered. The description adds meaningful non-annotated behavior: the update is partial ('patch'), and stored turn/message history is preserved. It stops short of noting permission requirements or whether unspecified fields are left untouched, so it is good rather than 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 sentences, zero filler, and the exclusion plus the alternative are front-loaded before any secondary detail. Nothing could be removed without losing routing information.

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

Completeness3/5

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

For a mutation tool with a nested payload object and no output schema, the description covers scope and the sibling boundary but leaves the most consequential unknown — which fields the nested `conversation` object accepts — entirely undocumented anywhere.

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

Parameters3/5

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

Schema coverage is 100%, so agentId, convoId and conversation are each documented, giving a baseline of 3. However the key parameter is a nested object described only as 'Conversation fields to update' — neither the schema nor the description enumerates which fields are patchable, so the description adds nothing beyond restating patch semantics.

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 ('Patch fields') and resource ('the light conversation document'), and immediately distinguishes itself from the sibling that handles transcript replacement. An agent can tell this apart from update_conversation_messages and delete_conversation 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?

Explicitly names the condition that selects the alternative ('To replace transcript turns, use update_conversation_messages') and states the exclusion ('This does NOT replace the stored turn/message history'). This is exactly the routing guidance an agent needs for the one ambiguous overlap among its siblings.

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

update_conversation_messagesA
Destructive
Inspect

Replace the stored message turn history for a conversation using PATCH /agents/{agentId}/convos/{convoId}/messages. This overwrites voiceglow/{agentId}/convos/{convoId}/convo/JSON_STRING with the provided turns array. Set updateConversationMetadata=true (default) to also refresh messagesNum, lastMessage, firstMessageTS, lastMessageTS, and lastModified on the light conversation doc. Because this is a full replacement, confirmReplace must be true.

NameRequiredDescriptionDefault
turnsYesComplete replacement turn history. Each turn requires from + messages. This array becomes the stored transcript history.
agentIdYesThe agent ID.
convoIdYesThe conversation ID.
lgMessagesNoOptional LangGraph/langchain message array passthrough.
confirmReplaceYesMust be true because this replaces the stored conversation message history.
updateConversationMetadataNoDefault true. Refreshes messagesNum, lastMessage, firstMessageTS, lastMessageTS, and lastModified on the light conversation document.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and idempotentHint=false, but the description goes further: it names the exact storage key that gets overwritten (voiceglow/{agentId}/convos/{convoId}/convo/JSON_STRING), states that the whole transcript is replaced rather than merged, and enumerates which metadata fields are rewritten downstream. That is genuine disclosure 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.

Conciseness4/5

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

Front-loaded with the verb, the resource and the endpoint, and each following sentence covers a distinct concern (what is overwritten, downstream side effects, the required guard). The literal storage path is slightly redundant noise for an agent already given the schema, which 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 destructive mutation with no output schema, the description covers the blast radius, the safety guard, and the side-effect fields, and annotations cover reversibility and openness. No annotation contradiction; nothing an agent needs in order to call this safely 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 coverage is 100%, so the schema already documents turns, agentId, convoId, lgMessages, confirmReplace and updateConversationMetadata. The description restates the turns semantics and the metadata side effects in prose, which is a mild reinforcement but adds no new syntax or format detail beyond the schema. Baseline 3 applies.

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

Purpose5/5

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

Names a specific verb (Replace) and a specific resource (stored message turn history for a conversation), and anchors it to the exact endpoint PATCH /agents/{agentId}/convos/{convoId}/messages. This is clearly distinguishable from update_conversation, which the sibling list shows handles the conversation document rather than the transcript.

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 operative condition (full replacement of history, hence confirmReplace must be true) and calls out the default metadata-refresh behavior. It stops short of explicitly naming update_conversation or update_conversation_note as alternatives for narrower edits, so the agent must infer that partial edits belong elsewhere.

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

update_conversation_noteA
Idempotent
Inspect

Replace the text of one existing note. The previous text is kept in the workspace Logs with who edited it, from which IP and when.

NameRequiredDescriptionDefault
textYesThe new note text (max 5000 characters).
noteIdYesThe note id from list_conversation_notes.
agentIdYesThe agent ID
convoIdYesThe conversation ID
authorNameNoLabel for who is acting, e.g. "Claude via MCP". Only used because API-key calls have no signed-in person; it is shown on the note and in the audit log.

TDQS

A3.8/5.0
Behavior4/5

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

The description adds useful behavioral context beyond the annotations: the previous note text is retained in workspace Logs with editor identity, IP, and timestamp. This clarifies the audit trail and soft-replacement behavior. It does not contradict the annotations, which already cover readOnly, idempotent, and destructive hints.

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 concise sentences. The first states the action and target; the second front-loads the important audit-retention behavior. Every sentence earns its place without repetition.

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 full schema coverage, present annotations, and no output schema, the description is largely complete for an agent to call the tool correctly. It explains replacement behavior and audit logging; the main remaining gap is explicit sibling routing, which is minor here.

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 all five parameters are fully documented in the schema, including text max length, noteId source, and authorName audit purpose. The description adds only high-level replacement context, not parameter-specific detail, so the baseline of 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 description states a specific verb and resource: "Replace the text of one existing note." This clearly implies an edit operation on an existing note and implicitly distinguishes it from add/list/delete siblings, though it does not name those alternatives explicitly.

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 phrase "one existing note" implies the tool is for editing an already-created note, but there is no explicit guidance on when to use this versus add_conversation_note, delete_conversation_note, or list_conversation_notes. Usage is therefore implied rather than stated.

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

update_kb_docAInspect

Update a knowledge base document (VG agents only). For large document bodies prefer patch_kb_doc (Cursor-style exact old_string→new_string) instead of rewriting the entire content field.

NameRequiredDescriptionDefault
urlNoUpdated URL
nameNoUpdated name
tagsNoUpdated tags
docIdYesThe document ID
agentIdYesThe agent ID
contentNoUpdated content
metadataNoUpdated metadata
refreshRateNoUpdated refresh rate (API: 3d | 7d | never)

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare non-readonly, non-destructive, non-idempotent, open-world, so the safety profile is covered. The description adds the meaningful "VG agents only" eligibility constraint, but does not disclose the key behavioral question for an update tool with 8 optional fields: whether omitted fields are left untouched or cleared, and whether metadata/content are replaced wholesale.

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, zero waste, with the eligibility restriction and the sibling routing both front-loaded. Every clause carries information an agent needs to choose correctly.

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 8 parameters, nested metadata, no output schema, and destructive=false, the definition should clarify partial-vs-full update semantics and what the response confirms. The content/patch guidance is strong, but the merge behavior of metadata and the effect of omitted fields remain unaddressed.

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 real meaning beyond the schema by explaining that the content parameter is a full rewrite of the document body and that patch_kb_doc exists specifically to avoid that. The remaining parameters (metadata merge semantics, refreshRate interaction) get no extra explanation.

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 ("Update a knowledge base document") and immediately scopes it with "VG agents only." It also names the sibling patch_kb_doc and explains the differentiator (exact old_string→new_string editing), so an agent can distinguish the two 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?

Gives an explicit decision rule: for large document bodies use patch_kb_doc rather than rewriting content here. The implicit corollary (use this tool for metadata or full rewrites of small docs) is easy to derive, but there is no direct statement of when update_kb_doc is the preferred choice, and no mention of create_kb_doc vs update for new documents.

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

update_whatsapp_ai_rulesA
Idempotent
Inspect

Change the WhatsApp "AI rules" of a Convocore agent — when the AI should or should not reply to inbound WhatsApp messages. Partial update: send only the fields to change; lists (triggerPhrases, participantList, availability.days) are replaced as a whole, so read them first with get_whatsapp_ai_rules to add or remove one entry. Decision order for each inbound message: availability schedule → participant list → thread ownership → trigger phrases → aiRule. Does NOT change what the agent says (use update_agent / patch_agent_prompt) and does NOT pause a number (use update_whatsapp_number_settings aiPaused). The response carries warnings when the saved combination would keep the AI silent — relay them to the user.

NameRequiredDescriptionDefault
rulesYesFields to change. Omitted fields keep their current value.
agentIdYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare non-read-only, open-world, idempotent, non-destructive, so the safety bar is partly met; the description adds real behavioral context beyond that: list-replacement semantics, the per-message decision order, and the fact that the response carries warnings when the saved combination would silence the AI and must be relayed. No contradiction with the annotations.

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

Conciseness5/5

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

Front-loads what the tool changes, then partial-update mechanics, then decision order, then what it does not do and which tool handles that instead, ending with the response-warning caveat. Dense, no filler, and each sentence carries a distinct instruction.

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?

A mutation tool with no output schema, yet the description covers replace/merge semantics, ordering of evaluation, sibling routing, and return-side warnings. Combined with the detailed nested schema, an agent has everything needed to call it correctly and interpret side effects.

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 nested schema is already richly annotated per field, so the description's added value is mainly the merge/replace distinction and the read-before-write workflow, plus the decision-order framing that ties availability, participantList, thread ownership, triggerPhrases and aiRule together. Some of that (whole-list replacement) is repeated from the schema descriptions, so it is strong but not fully additive.

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 ('Change the WhatsApp "AI rules" of a Convocore agent') plus what those rules govern (when the AI replies to inbound WhatsApp messages). Explicitly names the adjacent capabilities it is not (prompt editing via update_agent/patch_agent_prompt, pausing via update_whatsapp_number_settings aiPaused), so it is distinguishable from 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 concrete when-to-use guidance ('partial update: send only the fields to change'), a critical precondition ('read them first with get_whatsapp_ai_rules to add or remove one entry'), and explicit exclusions with the correct alternative tool named for each. Nothing about routing between siblings 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.

update_whatsapp_number_settingsA
Idempotent
Inspect

Change the AI behaviour of ONE WhatsApp number assigned to a Convocore agent (get phoneId from get_whatsapp_ai_rules). Partial update: send only the fields to change. Use aiPaused to stop/resume all AI replies on the number, and coexistenceSettings for numbers shared with the WhatsApp Business app. Does not connect, reassign or remove numbers, and never touches Meta credentials. For reply conditions (phrases, AI rule, schedule, allow/deny list) use update_whatsapp_ai_rules.

NameRequiredDescriptionDefault
agentIdYesAgent the number is assigned to.
phoneIdYesMeta WhatsApp phone number ID (not the phone number itself).
settingsYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description still earns credit by reinforcing the non-destructive boundary ('does not connect, reassign or remove numbers, and never touches Meta credentials') and by spelling out merge semantics for a nested settings object. It stops short of stating auth/permission requirements or when changes take effect, so not 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?

Four dense sentences, front-loaded with the action and scope, then partial-update contract, then field hints, then exclusions and the sibling pointer. No restatement of the tool name or 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 nested-object mutation with no output schema, the description supplies scope, merge behaviour, exclusions and routing to the sibling, which covers what an agent needs to call it safely. Remaining gaps are the undocumented applyAiReplyRuleDuringHumanChatting flag and any statement about the response or effect timing.

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 67% and the nested sub-fields are documented inline, so the baseline is mid-range. The description adds real value beyond the schema by explaining the origin of phoneId, the operational meaning of aiPaused, and that coexistenceSettings is only for numbers shared with the WhatsApp Business app. The gap is applyAiReplyRuleDuringHumanChatting, which is undocumented in both the schema and the description.

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

Purpose5/5

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

States a specific verb (change), resource (AI behaviour of ONE WhatsApp number assigned to a Convocore agent), and scope (single number, not the org). It explicitly separates itself from update_whatsapp_ai_rules, which handles reply conditions, so an agent can pick correctly 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?

Gives an explicit lookup path for the key parameter (get phoneId from get_whatsapp_ai_rules), states the partial-update contract (send only fields to change), names the two specific use cases (aiPaused to stop/resume, coexistenceSettings for shared numbers), and lists exclusions plus the alternative tool for reply conditions.

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

usage_readA
Read-onlyIdempotent
Inspect

Read usage, credits and activity — everything the dashboard Usage and Analytics pages show — for the whole workspace and per agent. Read only. Time range: days back from now (default 30, max 400) or an explicit from / to (ISO date like 2026-10-01, or a full ISO datetime). overview: ONE call with credit balance, plan quota and limits, credits consumed in the range, tokens per model, the top agents (with names) and total activity (conversations, messages, calls, call minutes) — start here for "how is my usage". top_agents: agents ranked by credits consumed, with share of the total (topN up to 15). credits: current credit balance. quota: plan limits and current usage (conversations, messages, agents, KB…). workspace_usage: the Usage page — creditsCharged and creditsConsumed, input/output tokens per model, credits per agent with per-agent models, plus the chart list; add includeCharts for the chart data and includeLogs or logsPage for the credit usage log (what charged how much, and why). agent_usage (agentId): credits and tokens per model for one agent, plus call minutes. agent_analytics (agentId): that agent's analytics — loads, conversations, metrics, token usage, containment and human-handover stats. agents_analytics: activity totals for all agents (or agentIds), and per agent with includePerAgent (default true). clients_analytics: agency only — usage, leads and funnel per whitelabel client and per agent (clientIds to narrow). email_analytics (agentId): email channel analytics for one agent. WhatsApp and SMS analytics are in whatsapp_numbers_read / sms_numbers_read, voice calls in call_logs_read, knowledge-base quota in get_kb_quota.

NameRequiredDescriptionDefault
toNoRange end: ISO date (2026-10-31 = end of that UTC day) or datetime. Default now.
daysNoLook back this many days from now (1-400, default 30). Ignored when from is set.
fromNoRange start: ISO date (2026-10-01 = start of that UTC day) or datetime.
modeNocompact (default) = long text is cut and bulky blobs are replaced by a size marker. full = complete response.
topNNoFor overview / top_agents: how many top agents to return (1-15; default 8 for overview, 15 for top_agents).
actionYes
agentIdNoFor agent_usage / agent_analytics / email_analytics: the agent (list_agents or search_agents).
agentIdsNoFor agents_analytics: only these agents (max 500). Default all agents in the workspace.
logsPageNoFor workspace_usage: usage log page number (implies includeLogs).
clientIdsNoFor clients_analytics: only these whitelabel clients (clients_read list).
includeLogsNoFor workspace_usage: include the credit usage log (first page).
includeChartsNoFor workspace_usage: include the chart data (credits over time, usage by feature / agent, tokens).
includePerAgentNoFor agents_analytics: also return one row per agent (default true).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the bar is lower; the description still adds useful context — workspace-wide vs per-agent scope, the 400-day cap, and agency-only gating on clients_analytics. It restates 'Read only' (redundant with readOnlyHint) and says nothing about rate limits or response size beyond what the schema's mode already covers.

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 purpose, then time-range rules, then an action-by-action inventory in the same order as the enum — dense and largely waste-free. It is a single wall of prose rather than listed items, which makes a ten-action dispatcher harder to scan than it needs to be.

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 ten actions, 13 parameters and no output schema, the description carries the return-value burden and does so by naming the actual metrics per action plus availability constraints (agency only) and the pointers for analytics handled elsewhere. Practically everything needed to select an action and call it correctly is present.

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

Parameters5/5

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

Schema coverage is 92% so the baseline is 3, but the action enum has no description in the schema at all and the description supplies all of it — defining the meaning and return shape of each of the ten values. It also documents cross-parameter interactions the schema only hints at (logsPage implies includeLogs, includePerAgent defaults true, topN default differs by 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?

States a specific verb and resource ('Read usage, credits and activity') and then enumerates all ten actions with concrete payload fields ('creditsCharged and creditsConsumed, input/output tokens per model...'). It also explicitly names the boundaries against siblings (WhatsApp/SMS analytics live in whatsapp_numbers_read / sms_numbers_read, voice in call_logs_read, KB quota in get_kb_quota), so an agent can separate it from neighbours 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 Guidelines4/5

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

Strong routing guidance: 'overview ... start here for "how is my usage"' tells the agent the default entry point, and out-of-scope data is redirected to four named sibling tools. It does not, however, distinguish this tool's agent_usage action from the sibling get_agent_usage / get_agent_usage_bulk, which is the one obvious overlap left unexplained.

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

whatsapp_campaigns_readA
Read-onlyIdempotent
Inspect

List WhatsApp broadcast campaigns of an agent (template messages sent to a lead group) with sent / delivered / failed counts. Outbound CALL campaigns are in campaigns_read. Actions: list — paginated campaigns

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
pageNo
limitNoDefault 20, max 100.
actionYes
agentIdYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds useful context beyond that: the payload includes sent/delivered/failed counts, and results are paginated. It does not describe the shape of the compact vs full response, but with annotations carrying the safety burden this is above baseline.

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, zero filler, with the resource scope front-loaded and the sibling exclusion placed immediately after. The 'Actions: list' trailer is the only slightly tacked-on element but it costs little.

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 steps in to say what comes back (sent/delivered/failed counts) rather than leaving return values opaque. The main omission is any explanation of the compact/full mode choice, which affects how much data the agent actually receives.

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 40%: page, action and agentId have no field descriptions. The description partially compensates by implying agent-scoping and pagination, and the limit/mode semantics are documented in the schema itself. Mode's compact vs full trade-off is never touched in the description, leaving a real 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?

States a specific verb and resource ('List WhatsApp broadcast campaigns of an agent'), clarifies what a campaign is (template messages sent to a lead group), and names the sibling campaigns_read as the home of outbound CALL campaigns. An agent can distinguish it from that sibling 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 routes call-campaign queries to campaigns_read, which is a genuine exclusion rule, and notes the only supported action is 'list'. It stops short of saying when to prefer this over adjacent tools like whatsapp_templates_read or lead_groups_read.

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

whatsapp_campaigns_writeA
Destructive
Inspect

Create, edit, delete or send a WhatsApp broadcast campaign: an APPROVED template sent to every lead in a lead group. run sends real WhatsApp messages that Meta bills — always run with dryRun=true first and confirm the audience with the user. Campaign fields: name, leadGroupName (or "all"), phoneId (sending number), templateId, templateName, templateLanguage, templateCategory, variableMapping / headerVariableMapping (how lead fields fill {{1}}, {{2}}…), delayBetweenMessages (seconds, default 2), openTime / closeTime ("HH:mm"), timezone. Actions: create — create a campaign (stopped until run) Needs: campaign. | update — change fields of a campaign Needs: campaignId, campaign. | delete — delete a campaign Needs: campaignId. | run — send the campaign now (dryRun=true to preview) Needs: campaignId.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
actionYes
dryRunNoFor run: true = validate and count recipients without sending.
agentIdYes
campaignNoFor create (all required fields) or update (only fields to change).
campaignIdNoRequired for update, delete and run.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and openWorldHint=true, but the description adds crucial non-obvious behavior: run sends real messages that Meta bills, dryRun previews without sending, and create leaves the campaign stopped until run. The billing and approval-state consequences are exactly the kind of value that annotations cannot convey.

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-loads the definition and the dryRun warning before the field listing and action table, so the highest-risk information is seen first. The dense parenthetical field enumeration is slightly heavy but each item carries actionable detail.

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 destructive, non-idempotent mutation tool with a nested campaign object and no output schema, the description covers required fields, action prerequisites, and the safety workflow. Minor gaps remain around what run/delete return and error conditions, but nothing critical to invoking it correctly is missing.

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?

Despite only 67% schema coverage, the description enumerates the campaign fields (leadGroupName or "all", phoneId, templateId/Name/Language/Category, variableMapping, headerVariableMapping, delayBetweenMessages default 2, openTime/closeTime, timezone) with enough semantics to construct a payload. It also clarifies campaignId is required for update/delete/run and that dryRun applies to run.

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 (create, edit, delete, send) and resource (WhatsApp broadcast campaign), then defines the resource precisely as an APPROVED template sent to every lead in a lead group. This makes it clearly distinguishable from siblings like campaigns_write and whatsapp_campaigns_read.

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 concrete operational rule: always run with dryRun=true first and confirm the audience with the user before sending. Each action lists required fields, so the agent knows what to supply. It does not explicitly say when to prefer a sibling tool over this one, which keeps it from a 5.

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

whatsapp_numbers_readA
Read-onlyIdempotent
Inspect

Read details of the WhatsApp numbers connected to an agent. For a quick "is it connected" check use get_agent_channels; for reply rules use get_whatsapp_ai_rules. Actions: list — all numbers of the agent with status, mode and settings | details — live info from Meta: display name, quality rating, messaging limit tier, verification Needs: phoneId. | analytics — WhatsApp conversation and message analytics for the agent | voice_status — re-check with Meta whether WhatsApp voice calling is enabled on the number Needs: phoneId.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
actionYes
agentIdYes
phoneIdNoMeta WhatsApp phone number ID (from get_agent_channels), not the phone number.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true. The description adds genuinely new context: details and voice_status fetch live data from Meta (external, network-dependent calls), and voice_status is explicitly a re-check with Meta. It doesn't warn about rate limits or failure behavior, so not 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.

Conciseness4/5

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

Front-loaded with purpose and sibling routing before the compressed action list. The pipe-delimited action enumeration is dense but every clause carries information. Slightly run-on, with 'Needs: phoneId.' echoed twice, which is minor redundancy.

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

Completeness4/5

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

There is no output schema, so the description carries the burden of telling the agent what comes back; it does this per action (status/mode/settings, display name/quality rating/messaging limit/verification, conversation analytics, voice-calling status). That is sufficient for correct invocation, though return shape for analytics is left loose.

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%, and the description compensates well by spelling out what each action does and that phoneId is required for details and voice_status. It also indirectly clarifies agentId as scoping to one agent. It adds little about the mode parameter beyond what the schema already documents, and never explicitly says phoneId is ignored for list/analytics.

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?

Opens with a specific verb and resource ("Read details of the WhatsApp numbers connected to an agent") and then enumerates the four supported actions with what each returns. It explicitly names the sibling tools it is not (get_agent_channels, get_whatsapp_ai_rules), so an agent can pick it out of a very crowded sibling list.

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 explicit routing advice: use get_agent_channels for a quick 'is it connected' check and get_whatsapp_ai_rules for reply rules. Each action also states its scope (list/details/analytics/voice_status) and which requires phoneId, which is strong per-action usage guidance. It stops short of saying when to use this versus the mutation sibling whatsapp_numbers_write or update_whatsapp_number_settings.

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

whatsapp_numbers_writeA
Destructive
Inspect

Manage a connected WhatsApp number. To CONNECT a new number use create_channel_connect_link (the user must log in with Meta). Confirm with the user before remove. Actions: remove — disconnect the number from the agent (the AI stops answering it) | reassign — move the number to another agent of the workspace Needs: newAgentId. | update_display_name — request a new display name on the WhatsApp business profile Needs: displayName. | set_voice_calling — turn inbound WhatsApp voice calling on or off for the number Needs: enabled.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
actionYes
agentIdYes
enabledNoFor set_voice_calling.
phoneIdYesMeta WhatsApp phone number ID (from get_agent_channels), not the phone number.
newAgentIdNoFor reassign: the agent that should answer this number.
displayNameNoFor update_display_name: new WhatsApp display name (Meta reviews it).

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint, openWorldHint, and non-idempotency, and the description adds action-specific behavior: removing stops the AI answering, update_display_name is reviewed by Meta, and reassign moves the number within the workspace. It does not cover auth requirements or response behavior, so it is strong but not exhaustive.

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 front-loaded and dense, with no wasted sentences. The pipe-delimited action list is efficient but slightly harder to scan than separate lines, which keeps it from a 5.

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 destructive mutation tool with no output schema, the description covers the key actions, their effects, and required inputs. It could say more about success responses or permission requirements, but nothing essential for invoking 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?

With 71% schema coverage, the schema already documents most parameters, and the description adds important action-to-parameter mappings for newAgentId, displayName, and enabled. It does not describe agentId or fully explain phoneId beyond the schema, but it adds meaningful semantics.

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 the resource (a connected WhatsApp number), enumerates the exact operations (remove, reassign, update_display_name, set_voice_calling), and explicitly distinguishes connection from the sibling tool create_channel_connect_link. An agent can identify the tool's scope 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 a clear alternative for connecting a new number and a precondition to confirm before remove. It does not explicitly route the agent to whatsapp_numbers_read for listing or update_whatsapp_number_settings for other settings, but usage is clear from the action list.

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

whatsapp_templates_readA
Read-onlyIdempotent
Inspect

List the WhatsApp message templates of a number (name, language, category, approval status, components). Templates are required to message a customer outside the 24-hour window and for broadcast campaigns. Actions: list — all templates of the WhatsApp Business account

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
actionYes
agentIdYes
phoneIdYesMeta WhatsApp phone number ID (from get_agent_channels), not the phone number.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds useful domain context about what templates are for, but says nothing about volume, pagination, or approval-status semantics that a caller might need; the compact/full output trade-off lives only in the 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 sentences, front-loaded with the verb and resource, then the business context. Minor waste: 'Actions: list — all templates...' largely restates the opening sentence since only one action exists.

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 read-only listing tool with no output schema, the description does the right work by naming the five fields returned, and annotations carry the safety profile. The only real gap is the unexplained agentId parameter, which is a small but real omission.

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 50%. The description explains the sole 'action' value ('list — all templates of the WhatsApp Business account'), and phoneId/mode are documented in the schema. However, agentId is undocumented in both places, so the description does not fully compensate for the coverage gap.

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 (list) plus resource (WhatsApp message templates of a number) and it enumerates the returned fields (name, language, category, approval status, components). The 'read' vs 'write' split against whatsapp_templates_write is implied by the name and the single 'list' action, but never stated explicitly.

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?

It gives domain context that templates are needed to message outside the 24-hour window and for broadcast campaigns, which hints at why an agent would call it. It never states when to prefer this over siblings like whatsapp_templates_write, whatsapp_numbers_read, or whatsapp_campaigns_read, so routing 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.

whatsapp_templates_writeA
Destructive
Inspect

Create, edit or delete WhatsApp message templates. New and edited templates go to Meta for review before they can be used. Placeholders are {{1}}, {{2}}… in order. Actions: create — submit a new template; give bodyText or components Needs: name, category, language. | update — replace the components (and optionally category) of an existing template Needs: templateId, components. | delete — delete a template by name (all languages unless templateId is given) Needs: name.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
nameNoFor create: lowercase letters, digits and underscores. For delete: the template name.
actionYes
agentIdYes
phoneIdYesMeta WhatsApp phone number ID (from get_agent_channels), not the phone number.
bodyTextNoFor create: body text of a simple text-only template.
categoryNo
languageNoFor create: language code, e.g. "en_US", "ar".
componentsNoMeta template components (HEADER / BODY / FOOTER / BUTTONS) for create or update, when more than a plain body is needed.
templateIdNoFor update (required) and delete (optional).

TDQS

A4.3/5.0
Behavior4/5

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

Goes beyond the destructive/openWorld annotations by disclosing the Meta review gate before a template can be used and the important destruction scope: delete by name removes all languages unless templateId is given. It does not mention return payloads or failure modes (e.g. rejected review, duplicate name), so not 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.

Conciseness4/5

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

Front-loaded purpose sentence then a compact action-indexed block with no filler. The pipe-delimited action lines are dense and slightly run-on, but every clause carries 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 10-parameter mutating tool with no output schema, the description covers the risky parts: review workflow, placeholder format, and language-wide deletion. It leaves out what a successful create returns and how to check review status, gaps an agent would still have to discover.

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 schema documents most fields (70% coverage) but cannot express conditionality, and the description supplies that: name is create/delete only, templateId is required for update and optional for delete, components replace on update, bodyText is the simple-text shortcut. Placeholder syntax {{1}}, {{2}} is added context not present 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 set (create/edit/delete) and resource (WhatsApp message templates) in the first sentence, and the action list enumerates exactly the three supported operations. An agent can separate this from whatsapp_templates_read purely from the description.

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?

Per-action 'Needs:' lines tell the agent exactly which parameters each branch requires, which is genuine decision guidance rather than a restatement. It stops short of naming the read sibling or stating when not to use this tool, so it is clear context without explicit exclusions.

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

workspace_readA
Read-onlyIdempotent
Inspect

Read workspace-level data: activity and channel webhook logs (to debug "the bot did not reply"), credit balance and plan quota. Actions: logs — recent logs, filterable | log — one log entry in full Needs: logId. | log_timeline — every step of one inbound message, from webhook to reply Needs: traceId. | credits — credit balance | quota — plan limits and current usage

NameRequiredDescriptionDefault
kindNoFor logs: webhook = channel webhooks, event = workspace activity.
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
pageNo
limitNoDefault 10, max 100.
logIdNoFor log.
actionYes
searchNo
statusNo
agentIdNoFor logs: only this agent.
channelNoFor logs, e.g. whatsapp, instagram, messenger.
traceIdNoFor log_timeline (from a log entry).

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive behavior, and openWorldHint. The description adds useful prerequisites for log and log_timeline, but it does not discuss pagination, output size behavior, or other operational constraints beyond what annotations and schema already imply.

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 front-loaded with the overall purpose and then enumerates actions compactly using pipes. It is dense but efficient for a multi-action tool, with only minor awkwardness in the action-list formatting.

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 absence of an output schema, the description still names what each action returns at a high level: recent logs, one full log entry, a message timeline, credit balance, and plan quota. It leaves some filter and pagination details to the schema, but it is complete enough for action selection and basic invocation.

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

Parameters3/5

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

The description helps map actions to required parameters, notably logId for log and traceId for log_timeline. With 64% schema description coverage, it adds some meaning beyond the schema, but it does not explain page, search, status, or the full set of filters for logs.

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 verb, resource, and action set: read workspace-level activity/webhook logs, credit balance, and quota. It is clear what the tool does, but it does not explicitly distinguish itself from adjacent read tools such as usage_read or get_agent_audit_log.

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?

It gives a useful usage context for logs—debugging why 'the bot did not reply'—and maps each action to its purpose. However, it does not say when to choose this tool over similar siblings or when not to use it.

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

workspace_writeA
Destructive
Inspect

Change workspace settings: name, photo and team members; form-submission notification emails on/off; the workspace's own AI provider keys. Actions: update_team_profile — change workspace name / photo / team (read the current team on the dashboard first: the list replaces the old one) | set_form_submit_emails — turn the workspace-wide "New form submitted" / rating notification emails on or off (default on); per-agent override is vg_uiEngineFormNotifyConfig.enabled Needs: formSubmitEmailsEnabled. | set_provider_keys — store the workspace own AI provider API keys. Keys typed in chat pass through this conversation: prefer the dashboard, and never repeat a key back Needs: keys.

NameRequiredDescriptionDefault
keysNoFor set_provider_keys: e.g. { openai_api_key, anthropic_api_key, google_genai_api_key, groq_api_key, deepseek_api_key, xai_api_key, elevenlabs_api_key, deepgram_api_key, cartesia_api_key, azure_api_key, azure_region, langsmith_api_key }.
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
actionYes
usersPermsNoPer-member role and permissions: [{ email, role: admin|member, permissions[] }].
workspaceNameNo
workspaceEmailsNoTeam member emails (the full list — omitted members lose access).
workspacePhotoURLNo
formSubmitEmailsEnabledNoFor set_form_submit_emails: false silences every "New form submitted" / rating email for all agents in the workspace. Default (unset) is on.

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, and the description adds genuinely new risk context: the team email list fully replaces the prior one (members omitted lose access), notification emails default to on, and API keys typed in chat pass through the conversation and must never be echoed back. That security warning is exactly the kind of disclosure structured fields 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.

Conciseness4/5

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

Front-loaded with the resource and its fields, then pipe-delimited per-action blocks that keep each action self-contained. The prose is dense and slightly run-on (the per-agent override hint is tacked on without framing), but no sentence is 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?

No output schema exists, and for a destructive multi-action mutation the description covers the replacement semantics, default states, and key-handling cautions an agent needs. The one gap is the undocumented 'mode' parameter and no note on what a successful response looks like.

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 63%, and the description compensates by explaining what each action consumes (keys for set_provider_keys, formSubmitEmailsEnabled for set_form_submit_emails, name/photo/team for update_team_profile) plus the destructive semantics of workspaceEmails. It does not explain the 'mode' parameter, which is left entirely to the schema.

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?

Opens with a specific verb+resource ('Change workspace settings') and enumerates the three concrete sub-actions (update_team_profile, set_form_submit_emails, set_provider_keys) with the fields each touches. An agent can tell this is the workspace-mutation tool, though it never names workspace_read or orgs_write/agency_write as the read/sibling alternatives.

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 per-action operating guidance: read the current team on the dashboard before update_team_profile because the list replaces the old one, and prefer the dashboard over chat for provider keys. Missing an explicit statement of when to use this tool versus workspace_read or orgs_write, but the intra-tool routing is clear.

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

zoho_crm_records_readA
Read-onlyIdempotent
Inspect

Browse and search records in the connected Zoho CRM: leads, contacts, deals, accounts or any custom module. list pages through a module (perPage up to 200; pass info.nextPageToken as pageToken past 2000 records). search uses Zoho criteria, e.g. "(Lead_Status:equals:New)" or "((Lead_Source:equals:Chat)and(Created_Time:greater_than:2026-10-01T00:00:00+00:00))"; operators: equals, not_equal, starts_with, in, greater_than, less_than, between. query runs COQL for anything else, e.g. "select Last_Name, Email, Lead_Status from Leads where Lead_Status = 'New' order by Created_Time desc limit 200" (a where clause is required; limit max 2000, use "limit 200, 200" to page). Use integrations_read zoho_fields for the field API names and picklist values. Actions: list — one page of records of a module, newest first if sortBy=Created_Time sortOrder=desc Needs: moduleApiName. | search — records matching criteria / word / email / phone Needs: moduleApiName. | query — COQL SELECT for filters, sorting and counts search cannot do Needs: query. | get — one full record Needs: moduleApiName, recordId.

NameRequiredDescriptionDefault
cvidNoFor list: id of a Zoho custom view to list from.
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
pageNoFor list / search: page number (default 1).
wordNoFor search: free-text search.
emailNoFor search: exact email.
orgIdNoOptional organization scope.
phoneNoFor search: phone number.
queryNoFor query: a COQL SELECT statement.
actionYes
fieldsNoField API names to return (max 50). Default for list: up to 50 standard then custom fields.
sortByNoFor list.
perPageNoFor list / search: records per page, max 200 (default 50).
criteriaNoFor search: Zoho criteria expression.
recordIdNoFor get: the Zoho record id.
pageTokenNoFor list: info.nextPageToken from the previous page (needed past 2000 records).
sortOrderNoFor list.
connectionIdNoZoho connection id. Optional when the workspace has only one Zoho account.
moduleApiNameNoZoho module API name: Leads, Contacts, Accounts, Deals, or a custom module (see integrations_read zoho_modules).

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, openWorld, so the safety profile is covered. The description adds operational behavior beyond that: perPage cap of 200, the 2000-record pageToken boundary, COQL limit max 2000 with 'limit 200, 200' paging, and the requirement that a where clause is mandatory. Return-shape behavior is only partly covered (the mode parameter carries that), which keeps it just below 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.

Conciseness4/5

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

Front-loaded with purpose and paging rules, and the pipe-separated action summary is skimmable. The criteria/COQL examples are dense and make the sentence long, but every clause (operators, limit cap, field lookup pointer) carries actionable information, so nothing is truly 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?

Against 18 parameters, no output schema, and a multi-action surface, the description covers action selection, required params per action, pagination, query syntax, and field discovery. An agent can invoke any of the four actions without further documentation.

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

Parameters5/5

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

Schema coverage is already 94%, yet the description still adds syntax and defaults the schema does not: Zoho criteria grammar with two concrete examples, the full operator list, a COQL example, and the default/limit semantics for perPage and fields. This meaningfully exceeds the baseline-3 expectation for high-coverage schemas.

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 (browse/search/read) and resource (Zoho CRM records across leads, contacts, deals, accounts, custom modules), then enumerates all four actions with their required parameters. Sibling zoho_crm_records_write is implicitly distinguished by the read-only scope and the annotations confirm it.

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 routes between actions: list for paging, search for criteria/word/email/phone, query for 'anything else search cannot do' such as sorting and counts, get for a single full record. It also redirects field-name lookup to integrations_read zoho_fields, which is exactly the cross-tool guidance an agent needs.

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

zoho_crm_records_writeA
Destructive
Inspect

Create, update, upsert or delete records in the connected Zoho CRM (leads, contacts, deals, accounts, custom modules), up to 100 per call, and add notes. Records use Zoho field API names, e.g. { "Last_Name": "Smith", "Email": "a@b.com", "Lead_Status": "New" }; picklist values must match exactly (integrations_read zoho_fields). The result has one entry per record (success, id, or the Zoho error code and field), so partial failures are visible. delete moves records to the Zoho recycle bin; confirm with the user before deleting or bulk-updating. Actions: create — create records Needs: records. | update — update records by id (only the fields given change) Needs: records. | upsert — insert or update by duplicateCheckFields; each result says insert or update Needs: records. | delete — delete records (confirm first) Needs: recordIds. | add_note — attach a note to a record Needs: recordId, title, content.

NameRequiredDescriptionDefault
modeNocompact (default) = light mode: long text is cut and bulky blobs are replaced by a size marker. full = complete API response.
orgIdNoOptional organization scope.
titleNoFor add_note.
actionYes
contentNoFor add_note.
recordsNoFor create / update / upsert: up to 100 records. update needs "id" on each record.
recordIdNoFor add_note: the record to attach the note to.
recordIdsNoFor delete: up to 100 record ids.
connectionIdNoZoho connection id. Optional when the workspace has only one Zoho account.
moduleApiNameYesZoho module API name: Leads, Contacts, Accounts, Deals, or a custom module (see integrations_read zoho_modules).
triggerWorkflowNoRun the Zoho workflow rules on this change (default true).
duplicateCheckFieldsNoFor upsert: fields that identify an existing record, e.g. ["Email"]. Default: the module's own duplicate check.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only say destructive and non-idempotent; the description adds what actually matters: the 100-record cap, recycle-bin semantics for delete, that update changes only supplied fields, that upsert reports insert vs update per record, and that partial failures surface as per-record errors. That is real operational context an agent cannot get from the annotations.

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

Conciseness4/5

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

Front-loaded with verbs, resource, batch cap and the field-name convention before the per-action breakdown, and every clause carries information. It is fairly long and the trailing 'Needs:' list partly restates what the schema already marks as required, which is the only slack.

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 12-parameter multi-action mutation tool with no output schema, the description covers return shape (one entry per record with success/id/error code), batch limits, and destructive-action caution. Gaps are minor — nothing about the mode parameter's effect on returned text or about what connectionId/orgId scoping means operationally.

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 92%, so the baseline is 3; the description earns more by supplying the calling convention the schema lacks — Zoho field API names, an example record shape, exact-match picklist requirement, and the semantics of duplicateCheckFields. It leaves mode, connectionId, triggerWorkflow and orgId entirely to 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?

Uses a specific set of verbs (create/update/upsert/delete/add note) against a named resource (Zoho CRM records across leads, contacts, deals, accounts, custom modules). The write scope is unmistakable and cleanly contrasts with the sibling zoho_crm_records_read.

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-action block states exactly which inputs each action needs (records vs recordIds vs recordId/title/content), and it calls out prerequisites like confirming with the user before delete or bulk update and consulting integrations_read zoho_fields for picklist values. It stops short of naming the read sibling as the alternative for retrieval, so routing is implied rather than spelled out.

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. 145 tool updatesv2.6.17
    • First observedadd_conversation_note
    • First observedagency_branding
    • First observedagency_read
    • First observedagency_write
    • First observedagent_backups_read
    • First observedagent_backups_write
    • First observedagent_gallery_templates
    • First observedassign_conversation
    • First observedbulk_create_kb_docs
    • First observedbulk_delete_kb_docs
    • First observedcall_logs_read
    • First observedcall_logs_write
    • First observedcampaigns_read
    • First observedcampaigns_write
    • First observedcheck_twilio_number
    • First observedclients_read
    • First observedclients_write
    • First observedclone_agent
    • First observedcode_tools
    • First observedcontact_leads
    • First observedcontacts_read
    • First observedcontacts_write
    • First observedcreate_agent
    • First observedcreate_agent_from_template
    • First observedcreate_agent_tool
    • First observedcreate_agent_variable
    • First observedcreate_channel_connect_link
    • First observedcreate_conversation
    • First observedcreate_kb_doc
    • First observedcreate_kb_from_urls
    • First observedcreate_kb_image
    • First observedcustom_metrics_read
    • First observedcustom_metrics_write
    • First observeddelete_agent
    • First observeddelete_agent_tool
    • First observeddelete_agent_variable
    • First observeddelete_conversation
    • First observeddelete_conversation_note
    • First observeddelete_kb_doc
    • First observeddisconnect_meta_page
    • First observedemail_channel_read
    • First observedemail_channel_write
    • First observedexport_agent
    • First observedexport_all_conversations
    • First observedexport_conversation
    • First observedfolders_read
    • First observedfolders_write
    • First observedgenerate_conversation_summaries
    • First observedgenerate_lead_funnel
    • First observedget_agent
    • First observedget_agent_audit_log
    • First observedget_agent_channels
    • First observedget_agent_custom_css
    • First observedget_agent_phone
    • First observedget_agent_tool
    • First observedget_agent_usage
    • First observedget_agent_usage_bulk
    • First observedget_agent_variable
    • First observedget_channel_integration_spec
    • First observedget_connect_link_status
    • First observedget_conversation
    • First observedget_conversations_bulk
    • First observedget_kb_doc
    • First observedget_kb_docs_bulk
    • First observedget_kb_quota
    • First observedget_kb_stats
    • First observedget_pricing_info
    • First observedget_ui_engine_spec
    • First observedget_voice
    • First observedget_website_embed_code
    • First observedget_whatsapp_ai_rules
    • First observedget_widget_css_styling_guide
    • First observedimport_agent
    • First observedimport_file_to_kb
    • First observedimport_twilio_number
    • First observedinspect_file
    • First observedintegrations_read
    • First observedintegrations_test
    • First observedintegrations_write
    • First observedinteract_with_agent
    • First observedlead_groups_read
    • First observedlead_groups_write
    • First observedleads_read
    • First observedleads_write
    • First observedlist_agent_tools
    • First observedlist_agent_variables
    • First observedlist_agents
    • First observedlist_conversation_notes
    • First observedlist_conversations
    • First observedlist_kb_docs
    • First observedlist_provider_voices
    • First observedlist_voice_models
    • First observedlist_voice_providers
    • First observedmeta_pages_read
    • First observednotification_email
    • First observedorgs_read
    • First observedorgs_write
    • First observedpatch_agent_prompt
    • First observedpatch_kb_doc
    • First observedquery_conversations
    • First observedread_docx
    • First observedread_image
    • First observedread_pdf
    • First observedread_spreadsheet
    • First observedread_text_file
    • First observedrelease_twilio_number
    • First observedrun_agent_auto_test
    • First observedrun_command
    • First observedscrape_url
    • First observedsearch_agents
    • First observedsearch_kb_docs
    • First observedsearch_mcp_tools
    • First observedsearch_voices
    • First observedsend_channel_message
    • First observedsend_handoff_reminder
    • First observedsend_sms
    • First observedsleep
    • First observedsms_numbers_read
    • First observedsms_numbers_write
    • First observedstart_outbound_call
    • First observedsync_sms_twilio_number
    • First observedtest_agent_tool
    • First observedtest_agent_tool_request
    • First observedtool_sharing
    • First observedupdate_agent
    • First observedupdate_agent_custom_css
    • First observedupdate_agent_tool
    • First observedupdate_agent_variable
    • First observedupdate_conversation
    • First observedupdate_conversation_messages
    • First observedupdate_conversation_note
    • First observedupdate_kb_doc
    • First observedupdate_whatsapp_ai_rules
    • First observedupdate_whatsapp_number_settings
    • First observedusage_read
    • First observedwhatsapp_campaigns_read
    • First observedwhatsapp_campaigns_write
    • First observedwhatsapp_numbers_read
    • First observedwhatsapp_numbers_write
    • First observedwhatsapp_templates_read
    • First observedwhatsapp_templates_write
    • First observedworkspace_read
    • First observedworkspace_write
    • First observedzoho_crm_records_read
    • First observedzoho_crm_records_write

TDQS

B3.2/5.0

Scored across 145 tools

Disambiguation3/5

The descriptions are unusually explicit and often cross-reference the correct alternative, which helps distinguish many tools. However, the set contains several overlapping families: five ways to create an agent, many conversation retrieval/query/export tools, multiple KB ingestion tools, and duplicated usage/credit reporting paths. These overlaps make misselection likely at 145 tools even though the boundaries are documented.

Naming Consistency3/5

Most names are readable snake_case, but the server mixes several conventions: verb_noun CRUD (list_agents, create_kb_doc, delete_conversation) with resource_read/resource_write action buckets (orgs_read, leads_write, campaigns_read) and noun-only tools like code_tools and tool_sharing. The patterns are systematic by domain, but they are not uniform across the whole tool set.

Tool Count1/5

At 145 tools, the surface is far beyond a well-scoped 3-15 tool range and well into the extreme 50+ category. While Convocore is a broad platform, the sheer number of tools creates a heavy selection and maintenance burden.

Completeness4/5

The server covers lifecycle operations across agents, conversations, knowledge base, channels, integrations, CRM, campaigns, usage, and workspace settings. There are minor gaps, such as voice phone-number assignment largely being dashboard-only and domain verification being dashboard-only, but most core workflows have create/read/update/delete coverage.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers