Skip to main content
Glama
LibreDesk MCP

LibreDesk MCP

by Passe12345

libredesk-mcp

A Model Context Protocol server for Libredesk — the open-source omnichannel customer support desk.

Fork of metanmai/libredesk-mcp (MIT). The upstream history and the MIT LICENSE are kept. This fork refreshes the bundled spec to the current Libredesk API (v2.9.x) and keeps a drift check against Libredesk's routes.

Exposes the Libredesk REST API as MCP tools, one per operation of the bundled OpenAPI spec (the count is printed at startup). Writes are enabled by default; set LIBREDESK_MCP_READ_ONLY=true to register only GET operations (see Hardening).

Currently 97 operations: 81 from the published docs spec plus 16 from a hand-written overlay for v2.9.2 routes the docs lack (54 GET tools in read-only mode). Libredesk reference version: v2.9.2.

Tools

One tool per operation, grouped by API tag. Tools marked * are writes: they do not exist when LIBREDESK_MCP_READ_ONLY=true. The names come from the operationIds, so they can change when the spec is refreshed; update_ai_provider of v0.1.0 no longer exists upstream.

  • Agents — get_agents_compact (agent IDs for assignment, no admin permission needed), get_agents, create_agent *, get_current_agent, update_agent_availability *, delete_agent *, get_agent, update_agent *, revoke_api_key *, generate_api_key *

  • AI completions — ai_completion *, get_ai_prompts

  • Automations — get_automation_rules, get_automation_rule, create_automation_rule *, update_automation_rule *, toggle_automation_rule *, delete_automation_rule * (all need the "Manage automations" permission; reordering rules and the execution mode stay in the web UI)

  • Contact notes — get_contact_notes, create_contact_note *, delete_contact_note *

  • Contacts — get_contacts, create_contact *, get_contact, update_contact *, delete_contact *, block_contact *, export_contact, update_contact_custom_attributes *

  • Conversations — create_conversation *, get_all_conversations, get_assigned_conversations, get_unassigned_conversations, send_message *, get_message, delete_message *, retry_message *, get_conversation, update_team_assignee *, remove_team_assignee *, update_user_assignee *, remove_user_assignee *, update_conversation_assignee_last_seen *, get_messages, get_conversation_participants, update_conversation_priority *, update_conversation_status *, update_conversationtags *, get_view_conversations, get_team_unassigned_conversations, update_conversation_custom_attributes *, download_conversation_transcript, mark_conversation_as_unread *, get_mentioned_conversations, get_contact_page_visits, get_sidebar_counts, get_all_drafts, upsert_conversation_draft *, delete_conversation_draft *, apply_macro *

  • Custom attributes — get_custom_attributes

  • Health — health_check

  • Help center — get_public_help_center_article, public_help_center_search, get_public_help_center_tree

  • Inboxes — get_inboxes, get_inbox

  • Macros — get_macros, get_macros_compact, search_macros, get_macro (the macro to pass to apply_macro, listed under Conversations)

  • Media — media_upload *, serve_media

  • Reports — overview_charts, overview_counts, overview_csat, overview_message_volume, overview_sla, overview_tag_distribution

  • Search — search_contacts, search_conversations, search_messages, paginated_search_conversations, paginated_search_messages

  • Views — get_all_shared_views, get_shared_view, create_shared_view *, update_shared_view *, delete_shared_view * (all need the "Manage shared views" permission; a view cannot filter on the subject or content, only on status, priority, assignee, team, inbox, dates, SLA and tags)

  • Status and priority — get_priorities, get_statuses, create_status *, delete_status *, update_status *

  • Tags — get_tags, create_tag *, update_tag *, delete_tag *

  • Teams — get_teams_compact (team IDs for assignment, no admin permission needed), get_teams, create_team *, delete_team *, get_team, update_team *

Related MCP server: @indica-facil/mcp-chatwoot

Setup

1. Create an agent and an API key in Libredesk

Create a dedicated agent for the MCP (do not reuse a person's key or another integration's key), give it a role limited to what you need, then generate its API key: you get an api_key and an api_secret.

Suggested role for reading and triaging tickets (Admin > Teammates > Roles). Tick nothing in the Admin section:

Section

Permissions

Conversation

View conversation, View all conversations, View all unassigned conversations, View conversation messages

Conversation (to act on tickets)

Send private notes, Change conversation status, Change conversation priority, Add or remove conversation tags, Assign conversations to users / teams

Contact

View all contacts, View contact details, View contact notes

For read-only use keep only the "View" permissions and start the server with LIBREDESK_MCP_READ_ONLY=true. Do not grant "Send messages in conversations" unless the model should be able to reply to customers. Tools that need an Admin permission (agents, teams, inbox details, macro management, reports, tags and statuses management) answer 403 with such a role (to find who to assign a ticket to, use get_agents_compact and get_teams_compact, which need no Admin permission; update_user_assignee and update_team_assignee need the two "Assign conversations to ..." permissions); the role, not this server, is what limits the key.

2. Install a pinned local copy

Run a pinned local copy rather than npx -y: npx -y executes whatever the registry serves at that moment, and this fork is "private": true and never published. Clone it, install without lifecycle scripts, build once, and point your MCP host at the built file:

git clone <this repository> libredesk-mcp && cd libredesk-mcp
npm ci --ignore-scripts
npm run build

Note the absolute path of dist/index.js (pwd inside the clone, then append /dist/index.js). Rebuild with npm run build after every change: the host runs dist/index.js, not the sources.

3. Claude Code (CLI)

Register the built file at user scope, so the key lives in ~/.claude.json and never in a repository (--scope project would write it into a versioned .mcp.json):

claude mcp add-json libredesk --scope user '{
  "command": "node",
  "args": ["/absolute/path/to/libredesk-mcp/dist/index.js"],
  "env": {
    "LIBREDESK_URL": "https://libredesk.example.com",
    "LIBREDESK_API_KEY": "<api key of the MCP agent>",
    "LIBREDESK_API_SECRET": "<api secret of the MCP agent>"
  }
}'

Add "LIBREDESK_MCP_READ_ONLY": "true" to env for the read-only tool set. Restart your Claude Code session, then check:

claude mcp list              # libredesk should show as ✓ Connected
claude mcp get libredesk     # shows the stored configuration
claude mcp remove libredesk --scope user

To rotate the key, regenerate it on the agent in Libredesk, remove the server and add it again.

4. Claude Desktop

Edit the Claude Desktop configuration file (in the app: Settings > Developer > Edit Config), or open it directly:

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

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

Add the server under mcpServers (keep any servers already there):

{
  "mcpServers": {
    "libredesk": {
      "command": "/absolute/path/to/node",
      "args": ["/absolute/path/to/libredesk-mcp/dist/index.js"],
      "env": {
        "LIBREDESK_URL": "https://libredesk.example.com",
        "LIBREDESK_API_KEY": "<api key of the MCP agent>",
        "LIBREDESK_API_SECRET": "<api secret of the MCP agent>"
      }
    }
  }
}
  • Use the absolute path of node (which node on macOS, where node on Windows). A desktop app does not inherit your shell's PATH, so a bare node often fails, notably with nvm.

  • On Windows, double the backslashes in JSON paths (C:\\Users\\me\\libredesk-mcp\\dist\\index.js).

  • Quit Claude Desktop completely (Cmd+Q on macOS, not just closing the window) and reopen it. The Libredesk tools then appear in the tools menu of a conversation.

  • If the server does not start, read the log of the MCP server (macOS: ~/Library/Logs/Claude/mcp-server-libredesk.log). The server prints a readiness line on startup, e.g. ready — 91 tools loaded (writes enabled; uploads disabled).

  • The config file holds the key in clear text: keep it out of backups and screenshots you share.

5. Other MCP clients

Any host that starts a stdio MCP server accepts the same command / args / env block as in the Claude Desktop example (Cursor, Windsurf, etc.).

Network access

The server calls LIBREDESK_URL directly from the machine that runs it. If your instance sits behind an IP allow-list, a firewall or a CDN rule, that machine must be allowed in, otherwise every tool answers with an HTTP error such as 403.

Environment variables

Variable

Required

Description

LIBREDESK_URL

yes

Base URL of your Libredesk instance, no trailing slash. e.g. http://localhost:9000

LIBREDESK_API_KEY

yes

Agent API key from the Libredesk admin UI

LIBREDESK_API_SECRET

yes

Agent API secret paired with the key

LIBREDESK_MCP_READ_ONLY

no

Only the exact value true drops the write operations (POST/PUT/PATCH/DELETE), leaving the GET tools. Unset, writes are registered.

LIBREDESK_MCP_UPLOAD_DIR

no

Directory file uploads may read from. Unset, any tool argument that carries a file path is refused.

Authentication uses Libredesk's token scheme: Authorization: token <api_key>:<api_secret>.

Hardening

  • Opt-in read-only mode. With LIBREDESK_MCP_READ_ONLY=true the server lists and accepts only GET tools; write tools do not exist for the model. Writes are on by default, so give the key an agent role as narrow as you need: the flag limits what the model can call, the role limits what the key can do. Ticket content is untrusted input (prompt injection), which is the main reason to prefer read-only when you only need to read.

  • No arbitrary file reads. Multipart fields typed as binary (avatar and media uploads) used to read any local path the model supplied. They are now refused unless LIBREDESK_MCP_UPLOAD_DIR is set, and then only a regular file whose real path (after symlinks) lies inside that directory is read; relative paths are resolved against it.

  • No credentials in tool output. Libredesk returns an agent's API key in clear (GET /agents/me, agent lists), and tool output ends up in the model's context and in transcripts. Every api_key and api_secret value of a response is replaced by [redacted by libredesk-mcp], at any depth. The one exception is generate_api_key, whose purpose is to return the new credentials. Request parameters and the Authorization header are unaffected.

  • Updates replace, deletes are final. update_automation_rule and update_shared_view overwrite every field with the body (nothing is merged): read the record first and resend all of it. update_automation_rule also stores enabled, and an omitted enabled disables the rule. delete_automation_rule and delete_shared_view cannot be undone; prefer toggle_automation_rule to stop a rule.

  • Automation rules are persistent. create_automation_rule stores a rule that is enabled immediately and keeps acting on every matching conversation, long after the chat that created it. Libredesk does not validate the rule content, so a malformed rule is stored and never matches: read it back with get_automation_rule. Rule actions include send_reply (emails the customer) and trigger_webhook (calls an external URL): do not let the model use them on its own. Grant "Manage automations" to the MCP agent's role only while you need it, and prefer LIBREDESK_MCP_READ_ONLY=true otherwise, which keeps just the two read tools.

  • Not publishable by accident. package.json has "private": true.

How it works

On startup the server reads a bundled copy of Libredesk's OpenAPI spec (src/openapi.json, provenance in docs/SPEC_SOURCE.md) merged with src/openapi.overlay.json (see docs/SPEC_NOTES.md), keeps the operations allowed by the mode, walks each of them and registers it as an MCP tool with:

  • tool name — derived from the operation's operationId by stripping the handle prefix, splitting camelCase into snake_case, and lowercasing. Consecutive capitals are treated as acronyms (e.g. handleGetAIPrompts → get_ai_prompts, handleGenerateAPIKey → generate_api_key).

  • description — built from the operation summary, description, HTTP method/path, and tags.

  • inputSchema — flattened from path parameters, query parameters, and the request body's JSON schema (with $refs resolved against components.schemas).

When a tool is called, the server substitutes path params, builds the query string, sets the auth header, sends the request, and returns the response body verbatim (pretty-printed JSON when applicable) along with the HTTP status line. Errors from Libredesk are returned as-is so you can see why a request was rejected.

Develop

npm ci --ignore-scripts
npm run build       # tsc + copy openapi.json and openapi.overlay.json into dist/
npm test            # vitest, offline
npm start           # node dist/index.js

Refresh the bundled OpenAPI spec and check it against Libredesk's routes:

npm run fetch-spec            # downloads the docs spec, records date and SHA-256 in docs/SPEC_SOURCE.md
npm run build && npm test
npm run check-drift           # compares spec + overlay with cmd/handlers.go of the latest release (needs `gh`)
npm run check-drift -- v2.9.2 # or with a given tag

check-drift exits 1 when a spec or overlay operation has no matching route, or when an overlay operation has since appeared in the docs spec (remove it from the overlay then). It also lists, for information, in-scope routes that no tool covers; the out-of-scope prefixes are kept at the top of scripts/check-drift.mjs.

License

MIT

Available Tools

104 tools
ai_completionC

A I Completion POST /api/v1/ai/completion Tags: AI completions

NameRequiredDescriptionDefault
contentYes(body) Content for AI completion
prompt_keyYes(body) AI prompt identifier

TDQS

C2.2/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden. However, the description does not disclose whether this tool has side effects (e.g., creates a record), is idempotent, or requires specific authentication. The behavioral traits are completely opaque.

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

Conciseness2/5

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

The description is extremely short (three lines) but fails to convey essential information. It is under-specified rather than concise; every line is present but not meaningful.

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

Completeness2/5

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

With no output schema, no annotations, and a minimal description, the tool definition is incomplete. An agent cannot determine what the tool returns, whether it is safe to invoke, or how to interpret the response.

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

Parameters3/5

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

The input schema describes both parameters with brief descriptions ('(body) AI prompt identifier', '(body) Content for AI completion'), achieving 100% coverage. The tool description adds no additional context, but the schema itself is sufficient for understanding parameter purpose. Baseline 3 is appropriate.

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 repeats the tool name ('A I Completion') and includes the HTTP method and path, but does not state what the tool actually does (e.g., 'Generate an AI completion using a prompt'). It is vague and fails to distinguish from other tools like 'send_message' or 'get_ai_prompts'.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool vs alternatives, such as 'get_ai_prompts' or 'send_message'. There is no mention of prerequisites like having a valid prompt_key or how the content is used.

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

apply_macroA

Apply Macro To Conversation Applies a list of macro actions to a conversation and increments the macro's usage count. The body is a JSON array of actions (not an object), at most one action per type. Allowed action types: assign_team, assign_user, set_status, set_priority, add_tags, set_tags, remove_tags; send_reply and send_private_note are refused (403). The caller needs the permission matching each action type. Answers 200 when every action succeeded, 207 when only some did, and 500 when none did. The success body is {"message": ...}, not the usual status/data envelope. POST /api/v1/conversations/{uuid}/macros/{id}/apply Tags: Conversations

NameRequiredDescriptionDefault
idYesMacro ID (path parameter)
bodyYesRequest body
uuidYesConversation UUID (path parameter)

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations at all, the description carries the full burden and does so: it discloses the usage-count side effect, the at-most-one-action-per-type limit, the 403 refusal path for two action types, the 200/207/500 partial-success semantics, and warns that the success body is `{"message": ...}` rather than the usual envelope. That is substantially more than the schema reveals.

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, then constraints, then response codes, then the endpoint. Dense but every sentence carries information; the repeated title line and trailing endpoint/tags are mildly redundant but not wasteful.

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 an unannotated mutation tool with no output schema, the definition covers side effects, permissions, partial-failure semantics, and the non-standard response body — everything an agent needs to call it and interpret the result correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it stresses the body is an array of actions rather than an object, reiterates the one-action-per-type constraint, and explains that the action values are coerced to strings for numeric IDs — useful for avoiding type errors. It is largely reinforcing schema content rather than adding new parameter detail.

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 ('applies a list of macro actions to a conversation') plus the side effect of incrementing the macro's usage count, and names the concrete endpoint. An agent can distinguish this from read-only siblings like get_macro 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 supplies real invocation constraints — allowed action types, refusal of send_reply/send_private_note with 403, and per-action permission requirements — but never says when to reach for this tool versus the macro read tool or other conversation-mutation tools. Usage is implied by the constraints rather than stated.

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

block_contactB

Block or Unblock Contact Requires the contacts:block permission. PUT /api/v1/contacts/{id}/block Tags: Contacts

NameRequiredDescriptionDefault
idYes(path parameter)
enabledYes(body) Set to `false` to block, `true` to unblock

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose the required permission scope and the mutation endpoint, which is genuinely useful. It does not state whether the operation is idempotent, what side effects blocking has on the contact (e.g., messaging/consent), or whether the change is reversible.

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 short and front-loaded: purpose first, then permission, then endpoint. The trailing 'Tags: Contacts' line is API-doc filler that adds no decision value, keeping it from a 5.

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 two-parameter toggle with fully documented schema and no output schema, the description covers purpose, auth scope, and endpoint. It is still missing the behavioral consequences of blocking, which matter for an agent deciding to invoke a state-changing contact operation.

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 explains that `enabled=false` blocks and `true` unblocks, so the description adds nothing beyond it. The path template in the description loosely maps `id` to a path parameter, but the schema already labels it as such, making this a baseline case.

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 pair and resource ('Block or Unblock Contact') plus the concrete endpoint PUT /api/v1/contacts/{id}/block, so an agent knows exactly what the tool does. It is clearly distinct from siblings like delete_contact or update_contact by virtue of the 'block' verb, though it never explicitly contrasts with them.

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 only implied by the verb and the stated prerequisite ('Requires the `contacts:block` permission'). There is no guidance on when to choose this over delete_contact/update_contact, nor any warning about when blocking is inappropriate.

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

create_agentB

Create Agent Requires the users:manage permission. POST /api/v1/agents Tags: Agents

NameRequiredDescriptionDefault
emailYes(body) Agent's email address
rolesYes(body) Names of the roles assigned to the agent
teamsNo(body) Names of the teams to assign the agent to. On update, the agent is removed from teams not listed.
enabledNo(body) Whether agent is enabled. Used only on update.
last_nameNo(body) Agent's last name
first_nameYes(body) Agent's first name
new_passwordNo(body) Agent's new password. Optional, used only on update.
send_welcome_emailNo(body) Only used during agent creation to send welcome email
availability_statusNo(body) Agent's availability status. Used only on update.

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations at all, the description has to cover behavior itself. It does disclose one valuable fact beyond the schema: the tool requires the `users:manage` permission. But it says nothing about side effects (welcome email, notifications), what happens on duplicate email, whether the creation is reversible, or what the response contains — a significant gap for a creation tool on a user-account resource.

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 very short and front-loads the verb and permission, with no filler prose. The 'POST /api/v1/agents' and 'Tags: Agents' lines are near-redundant with the name but efficient and harmless.

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 9-parameter mutation tool with no annotations and no output schema, the description is far too thin: it doesn't explain what is returned, how errors are surfaced, or how the create-only parameters interact. The permission note helps but leaves the agent guessing about most of the tool's contract.

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 explains all 9 fields, including which are update-only. The description adds no parameter-level meaning, which is acceptable at this coverage level but is not worth more than 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 title line 'Create Agent' gives a specific verb plus resource, and the POST /api/v1/agents line confirms a creation endpoint. It doesn't explicitly contrast with siblings like update_agent or delete_agent, but the verb makes the distinction self-evident in context.

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 gives no when-to-use guidance, no prerequisites beyond a permission, and no alternatives — it never says to use update_agent when the agent already exists or what to do on duplicate email. The agent has to infer the conditions for calling this from the name alone.

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

create_automation_ruleA

Create Automation Rule Creates an automation rule. Requires the automations:manage permission. The rule is ENABLED as soon as it is created (the table default) and starts applying to the next matching conversation; use toggle_automation_rule to disable it. The server does not validate the content of rules: a malformed rule is stored and then silently never matches, so read it back with get_automation_rule. Example, assign every new conversation whose subject contains a text to agent 5: type new_conversation, events [], rules [{"group_operator":"AND","groups":[{"logical_op":"AND","rules":[{"field":"subject","field_type":"conversation","operator":"contains","value":"Company switched from","case_sensitive_match":false}]}],"actions":[{"type":"assign_user","value":["5"]}]}]. POST /api/v1/automations/rules Tags: Automations

NameRequiredDescriptionDefault
nameYes(body)
typeYes(body) new_conversation: on every new conversation. conversation_update: on the listed events. time_trigger: periodic, on the hours_since_* conditions
rulesYes(body) A JSON array of rule blocks, not a string
eventsNo(body) Only for conversation_update; leave empty for the other types
enabledNo(body) Only read by update_automation_rule, which stores it (false when omitted). Ignored on create: a created rule is always enabled
descriptionNo(body)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so well: it discloses the permission gate, that the rule is ENABLED immediately on creation and will fire on the next matching conversation, and — critically — that the server performs no validation of `rules`, so a malformed rule is stored and silently never matches. It stops short of describing the response payload or any rate limits, but the dangerous behaviors are surfaced.

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 escalating to permissions, side effects, and a caveat, which is the right order for an agent. The single long inline JSON example is dense but earns its space given the nesting of `rules`; the trailing 'POST /api/v1/automations/rules' and 'Tags:' lines are framing noise rather than agent-relevant content.

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 six-parameter mutation tool with a deeply nested rules object, no output schema, and no annotations, the description covers the permission requirement, the default-enabled side effect, the silent-failure validation gap, a recovery path, and a concrete example. Nothing an agent needs in order to call this correctly and safely 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 already 100%, so the baseline is 3; the description exceeds it by supplying a complete worked example of the deeply nested `rules` structure (group_operator, groups, field_type, operator, actions), which is far more usable than the schema's field-level prose. It also clarifies the create-time behavior of `enabled` implicitly through the 'always enabled' statement.

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 ('Creates an automation rule') in the first line, and names the sibling that handles the opposite concern ('use `toggle_automation_rule` to disable it'). An agent can distinguish this from update_automation_rule or get_automation_rule 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 clear preconditions (`automations:manage` permission), says when to route elsewhere for disabling, and prescribes a follow-up read via `get_automation_rule`. It does not explicitly say when to prefer update_automation_rule over creating a new rule, which is the one obvious omission.

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

create_contactB

Create Contact Creates a contact. Either email or phone_number is required. Requires the contacts:write permission. POST /api/v1/contacts Tags: Contacts

NameRequiredDescriptionDefault
emailNo(body) Contact's email address. Must not belong to another contact. Required when `phone_number` is empty.
countryNo(body) Contact's country as an ISO 3166-1 alpha-2 code
last_nameNo(body) Contact's last name
first_nameYes(body) Contact's first name
phone_numberNo(body) Contact's phone number. Required when `email` is empty.
phone_number_country_codeNo(body) ISO country code of the phone number

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations present, the description carries the full burden; it does add the meaningful auth requirement (`contacts:write` permission), which is genuine behavioral context. It omits what happens on duplicate email/phone conflicts, whether the call is idempotent, and what the response contains beyond the raw endpoint path.

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 body is short and the key constraint plus permission are front-loaded after a one-line purpose. The repeated header ('Create Contact' then 'Creates a contact') and the 'Tags: Contacts' / raw endpoint lines add minor noise without much selection value.

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 six-parameter mutation tool with no annotations and no output schema, the description covers the essential permission gate and required-field rule but leaves the agent guessing about the return payload (e.g., created contact ID) and conflict/error behavior.

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 each of the six fields is already documented, including the email/phone cross-requirement. The description's restatement of that constraint adds emphasis but no new parameter semantics, 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 uses a specific verb and resource ('Creates a contact') and names the endpoint, so the operation is unambiguous. It does not, however, distinguish itself from siblings like update_contact or create_contact_note beyond the obvious verb difference.

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 precondition that either `email` or `phone_number` must be supplied is useful selection criteria, but there is no explicit when-to-use versus when-not-to-use guidance or named alternative (e.g., update_contact for existing records). Usage is only implied by the verb 'create'.

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

create_contact_noteB

Create Contact Note Requires the contact_notes:write permission. POST /api/v1/contacts/{id}/notes Tags: Contact notes

NameRequiredDescriptionDefault
idYes(path parameter)
noteYes(body) Note content

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does supply the required `contact_notes:write` permission and the HTTP endpoint, which are genuinely useful behavioral facts. However, it says nothing about what the call returns, whether duplicate notes are permitted, how the note is attributed, or failure modes for a missing contact id.

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?

Four short lines, front-loaded with the action, followed by the permission and endpoint. The only mild redundancy is restating the tool name as the first line, but nothing here is wasted.

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?

This is a simple two-parameter create tool with fully documented parameters and no output schema, so the description covers the essentials (action, auth, endpoint). It stops short of explaining the response or edge cases, which would be needed to reach a 4 or 5 for a mutation tool with zero annotation coverage.

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 `id` (path parameter) and `note` (body content) documented in the schema itself. The description adds no syntax, format, or length information beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The description gives a clear verb+resource ('Create Contact Note') and reinforces it with the concrete endpoint POST /api/v1/contacts/{id}/notes, so the agent knows exactly what is created and under which parent resource. It does not explicitly differentiate from siblings such as create_contact or get_contact_notes, leaving that inference to the model.

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 when-to-use guidance, no prerequisites beyond the permission string, and no mention of alternatives such as get_contact_notes or delete_contact_note. The agent must infer that this is the write counterpart to those read/delete tools.

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

create_conversationC

Create Conversation Requires the conversations:write permission. POST /api/v1/conversations Tags: Conversations

NameRequiredDescriptionDefault
ccNo(body) CC recipients of the first message
bccNo(body) BCC recipients of the first message
contentYes(body) Initial message content (Accepts HTML as well)
subjectNo(body) Conversation subject
team_idNo(body) Team ID to be assigned when conversation is created
agent_idNo(body) Agent ID to be assigned when conversation is created
inbox_idYes(body) ID of an enabled email inbox for the conversation
initiatorYes(body) Who initiated the conversation. 'contact' means the first message is treated as an incoming message from the contact; 'agent' means the first message is an outgoing reply from the agent. Automation rules are only evaluated for contact-initiated conversations (incoming messages); agent-initiated conversations skip automation rule evaluation.
last_nameNo(body) Contact's last name
send_fromNo(body) Agent-initiated only. Address to send the first message from: the inbox address or one of its verified aliases. Defaults to the inbox address.
source_idNo(body) Contact-initiated only. RFC 5322 Message-ID of the original inbound email. It is stored on the first message so replies thread on it.
first_nameYes(body) Contact's first name
attachmentsNo(body) IDs of media uploaded by the caller with `POST /api/v1/media`. Media uploaded by another user is rejected with 403.
contact_emailYes(body) Contact's email address
reuse_contactNo(body) When true, a matching existing contact is used as-is. When false and the caller has the `contacts:write` permission, the matched contact's name and email are updated and its external ID is filled in. Callers without `contacts:write` always reuse the contact as-is.
external_user_idNo(body) External identifier for the contact in your own system
custom_attributesNo(body) Custom attributes to set on the conversation. Keys that are not defined conversation custom attributes are ignored.

TDQS

C2.3/5.0
Behavior2/5

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

With no annotations at all, the description carries the full burden, and what it contributes is useful but thin: the required scope and the HTTP endpoint. It does not disclose the consequential behavior an agent needs before calling a 17-parameter mutation — that an actual outbound message may be dispatched, that a contact may be created or updated, or that automation rules fire conditionally on the `initiator` value.

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 short and front-loaded, so there is little waste in length, but the four lines are mostly metadata scaffolding: the tag line and the raw endpoint path consume space that could have carried behavioral substance. Brevity here reflects under-specification rather than disciplined economy.

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 high-complexity, 17-parameter, side-effecting tool with no annotations and no output schema, the description is far too thin. An agent cannot learn from it what the call actually produces or triggers, and must reconstruct that entirely from parameter docs.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 17 parameters including the nuanced `initiator` and `reuse_contact` semantics. The description adds nothing about parameters beyond what the schema states, so the baseline 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 only purpose statement is "Create Conversation", which is a verbatim restatement of the tool name and title. The POST path and tag add no semantic insight into what a created conversation actually contains (an initial message plus a possibly new/matched contact), and nothing distinguishes it from siblings like create_contact or create_contact_note.

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 versus alternatives, nor any exclusions. The `conversations:write` permission note is a prerequisite, not usage guidance, and the absence of a stated condition for when a new conversation should be created leaves the agent to infer everything from the schema.

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

create_shared_viewA

Create Shared View Creates a shared view: a saved filter on the conversation list that appears in the sidebar of every agent (visibility all) or of the members of one team (visibility team with team_id). Requires the shared_views:manage permission. The filters are validated: an unknown field is refused. Editing and deleting a view stay in the web UI. Example, the open conversations carrying tag 3: {"name":"Compromise alerts","visibility":"all","filters":{"logic":"AND","rules":[{"model":"conversations","field":"tags","operator":"contains","value":"[3]"},{"model":"conversations","field":"status_id","operator":"not equals","value":"4"}]}}. POST /api/v1/shared-views Tags: Views

NameRequiredDescriptionDefault
nameYes(body)
filtersYes(body) Either a group (logic + rules, nested one level at most) or a condition (model, field, operator, value). Allowed model.field pairs: conversations.status_id, priority_id, assigned_team_id, assigned_user_id, inbox_id, last_message_at, last_interaction_at, last_interaction_sender, created_at, waiting_since, next_sla_deadline_at, snoozed_until, sla_policy_id, tags; conversation_statuses.id, name; users.email, external_user_id; inboxes.channel. There is no subject or content field: a view cannot filter on text
team_idNo(body) Required when visibility is team
visibilityYes(body) all: every agent. team: the members of team_id

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are supplied, so the description must carry the whole behavioral burden. It discloses the permission requirement, the fact that filters are validated and unknown fields are refused, and the visibility semantics, which is good. It does not say what the tool returns (for example, a view ID) or whether name collisions fail, so the disclosure is incomplete for a mutation tool.

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

Conciseness4/5

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

The description is front-loaded with the definition, then permissions, validation, and a worked example. It is dense but every sentence carries information. The inline JSON example makes the paragraph long, though it is justified by the nested 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 tool with nested filter objects, no output schema, and no annotations, the definition covers permissions, validation rules, scoping, and a concrete example. The only real gap is the return value, which matters if the agent must reference the new view afterward.

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 goes beyond the schema by working through a full example payload that shows the nested rules structure, the tags 'contains' value format as a text array, and how status and tag conditions combine, which is real added meaning for a complex nested parameter.

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 concrete verb and resource ('Creates a shared view') and immediately defines what a shared view is: a saved filter on the conversation list, scoped to every agent or to one team. It also draws a boundary by noting that editing and deleting happen in the web UI, so this tool cannot be confused with update_shared_view or delete_shared_view.

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 states the prerequisite (`shared_views:manage` permission) and where the tool's scope ends (editing and deleting are web-UI only). It does not name a read tool such as get_all_shared_views, but it gives a clear context for use and an explicit exclusion.

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

create_statusB

Create Conversation Status Requires the status:manage permission. POST /api/v1/statuses Tags: Status and priority

NameRequiredDescriptionDefault
nameYes(body)
categoryYes(body) Category this status maps to.

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations supplied, the description carries the full burden, and it does disclose one genuinely useful behavioral fact: the required 'status:manage' scope, which tells the agent this is an authorized mutation. However, it says nothing about what happens on a duplicate name, whether the new status is immediately visible to existing conversations, or whether creation is reversible — meaningful gaps for an unannotated write tool.

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

Conciseness4/5

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

The definition is four short lines and front-loads the action, permission requirement, and endpoint, which is efficient. The trailing 'Tags: Status and priority' line is categorization metadata of little value to an agent deciding how to call the tool, but it costs only a few words.

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

Completeness3/5

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

For a two-parameter mutation with no annotations and no output schema, the definition covers purpose, endpoint, and authorization, which is the minimum an agent needs to attempt the call. It stops short of describing failure modes (duplicate names, invalid category) or what the response contains, which leaves real ambiguity for a write operation.

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 is the primary source of parameter meaning and the baseline of 3 applies. The description adds no additional semantics for 'name' or 'category' beyond what the schema and its enum already convey, and the schema's own 'name' description is effectively empty ('(body) ').

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 Conversation Status') and adds the endpoint POST /api/v1/statuses, so an agent knows exactly what object is being created. It is distinguishable from delete_status and update_status by the verb alone, though it never explicitly contrasts itself with the similarly named update_conversation_status.

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 create a new status versus updating an existing one (update_status / update_conversation_status), nor any note on preconditions such as name uniqueness or a status cap. The only context given is a permission prerequisite ('Requires the status:manage permission'), which is access control rather than usage guidance.

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

create_tagC

Create Tag Requires the tags:manage permission. POST /api/v1/tags Tags: Tags

NameRequiredDescriptionDefault
nameYes(body) Tag name. Must not be empty.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. It does contribute one valuable fact — the `tags:manage` permission requirement — but says nothing about duplicate-name behavior, whether the operation is idempotent, or what the response contains. The 'POST /api/v1/tags' line and the 'Tags: Tags' line are raw spec artifacts that add no behavioral insight.

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 text is short, but it is not well-curated: the bare endpoint path and the trailing 'Tags: Tags' label are noise, and the permission note is buried rather than front-loaded. The useful content is one sentence's worth.

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 one-parameter creation tool with no output schema, the definition covers purpose and authorization, which is most of what matters. It still leaves open whether the tag is global or workspace-scoped and how a duplicate name is handled, which an agent would 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 coverage is 100% and the single `name` parameter is already fully documented in the schema as non-empty, so the description adds nothing here. Baseline 3 applies 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.

Purpose4/5

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

"Create Tag" states a specific verb and resource, so the agent knows immediately this creates a new tag. There is no differentiation from siblings such as update_tag or delete_tag beyond the name itself, but the core purpose is unambiguous.

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 never says when to use this versus update_tag or overview_tag_distribution, nor does it mention preconditions such as checking whether the tag already exists. Usage must be inferred 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.

create_teamC

Create Team Requires the teams:manage permission. POST /api/v1/teams Tags: Teams

NameRequiredDescriptionDefault
nameYes(body)
emojiNo(body)
timezoneNo(body)
sla_policy_idNo(body)
business_hours_idNo(body)
conversation_assignment_typeYes(body)
max_auto_assigned_conversationsNo(body)

TDQS

C2.5/5.0
Behavior2/5

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

With no annotations supplied, the description carries the full disclosure burden, and it contributes only the `teams:manage` permission requirement and the REST endpoint. It says nothing about side effects, whether the team starts empty, validation failures, or what is returned on success.

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 short and front-loaded, but much of the content is infrastructure noise ("POST /api/v1/teams", "Tags: Teams") that does not help an agent decide or invoke correctly. The one genuinely useful line, the permission requirement, is buried mid-block.

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 7-parameter mutation with two required fields, an enum, and no output schema or annotations, the description is far too thin. An agent has no way to know what a successful response looks like, what defaults apply to timezone/SLA/business hours, or how assignment behavior is configured.

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 nominally 100%, so the baseline is 3; however, the actual parameter descriptions are empty placeholders like "(body)", so the schema itself adds little. The description does not clarify required fields such as name or the meaning of the "Round robin"/"Manual" conversation_assignment_type enum.

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

Purpose3/5

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

The description says "Create Team," which does identify the verb and resource, but it is essentially a restatement of the tool name plus an endpoint line. It gives no indication of what kind of team object is created or how it differs from siblings like update_team or create_agent.

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 when-to-use guidance, no prerequisites beyond the permission string, and no mention of alternatives such as update_team or the related assignee tools. An agent must infer the usage context 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_agentA

Delete Agent Signs the agent out of all sessions and unassigns their open conversations. Requires the users:manage permission. DELETE /api/v1/agents/{id} Tags: Agents

NameRequiredDescriptionDefault
idYes(path parameter)

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses that deletion signs the agent out of all sessions and unassigns their open conversations, and names the required permission scope. It stops short of stating whether the deletion is irreversible, soft-delete, or what happens to historical conversation data.

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 action, then consequences, then permission requirement. The repeated title line and "Tags: Agents" boilerplate add minor noise, but the core sentences are tight and non-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 single-parameter destructive tool with no output schema, the description covers purpose, side effects, and auth needs, which is enough to call it correctly. Only the reversibility/aftermath of the deletion is left unstated.

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?

Only one parameter (id), and schema description coverage is 100%, so the schema already documents it. The description adds no further meaning about the id beyond the path template already implied by the endpoint line.

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 concrete verb and resource ("Delete Agent") plus the exact endpoint DELETE /api/v1/agents/{id}, which unambiguously separates it from siblings like update_agent, get_agent, and get_agents.

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

Usage Guidelines3/5

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

Provides a prerequisite (requires the `users:manage` permission) but gives no explicit when-to-use or when-not-to-use guidance, e.g. whether a softer alternative such as update_agent or deactivating availability should be preferred before permanent deletion.

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

delete_automation_ruleA

Delete Automation Rule Permanently deletes a rule. It cannot be undone, and conversations it already acted on keep their changes. To stop a rule without losing it, use toggle_automation_rule. Requires the automations:manage permission. DELETE /api/v1/automations/rules/{id} Tags: Automations

NameRequiredDescriptionDefault
idYesAutomation rule ID (path parameter)

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations present, the description carries the full burden and does so well: it discloses irreversibility ("cannot be undone"), a non-obvious side effect (conversations it already acted on keep their changes), and the required permission scope. These are exactly the behavioral facts an agent needs before a destructive call.

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

Conciseness4/5

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

The destructive warning and the alternative are front-loaded ahead of boilerplate, which is the right ordering. Minor waste exists in the leading line restating the tool name and trailing metadata ("Tags: Automations") that adds nothing for an agent.

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 destructive tool with no annotations and no output schema, the description covers every decision-relevant fact: permanence, residual effects, permission requirement, and the safe alternative. 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% for the single `id` parameter, which the schema already labels as an automation rule ID path parameter. The description reinforces this with the `DELETE /api/v1/automations/rules/{id}` route, confirming how the ID is bound, though it adds no new constraints or ID format details.

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

Purpose5/5

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

The description states a specific verb and resource ("Permanently deletes a rule") plus the scope of the effect, making it immediately distinguishable from the non-destructive sibling `toggle_automation_rule`. An agent can select it without opening the schema.

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

Usage Guidelines5/5

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

It gives an explicit when-not and names the alternative: "To stop a rule without losing it, use `toggle_automation_rule`." Combined with the permission prerequisite (`automations:manage`), the routing decision is fully determined.

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

delete_contactA

Delete Contact Permanently deletes the contact along with their conversations, messages and notes. Requires the contacts:delete permission. DELETE /api/v1/contacts/{id} Tags: Contacts

NameRequiredDescriptionDefault
idYes(path parameter)

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations supplied, the description carries the full burden and does well: it discloses irreversibility ('permanently'), the cascading destruction of related conversations, messages and notes, and the required `contacts:delete` permission scope, plus the underlying DELETE endpoint. It omits what happens on a missing/foreign id and what the response body 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.

Conciseness4/5

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

The destructive scope is front-loaded in the first sentence and there is no fluff, but the leading 'Delete Contact' restates the tool name and the trailing 'Tags: Contacts' is boilerplate that earns no space.

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

Completeness4/5

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

For an irreversible one-parameter mutation with no annotations and no output schema, the description covers the essentials an agent needs: permanence, cascade effects, and the permission required. Only the return behavior and failure modes are left unstated, which is a modest 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% for the single `id` path parameter, so the schema already documents it; the description's endpoint line merely reinforces that it is a path parameter. No additional meaning (id format, source of the id) is added beyond structured data.

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

Purpose5/5

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

States a specific verb and resource ('Permanently deletes the contact') and immediately scopes the blast radius to the contact's conversations, messages and notes, which implicitly separates it from narrow siblings like delete_contact_note or delete_message.

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 only implied — the description never says when to reach for this versus a narrower delete sibling or an alternative like block_contact, though it does state the prerequisite permission. An agent can infer the destructive-delete context but gets no explicit routing guidance.

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

delete_contact_noteA

Delete Contact Note Deletes a contact note. Agents without the Admin role can delete only their own notes. Requires the contact_notes:delete permission. DELETE /api/v1/contacts/{id}/notes/{note_id} Tags: Contact notes

NameRequiredDescriptionDefault
idYesThe unique identifier for the contact. (path parameter)
note_idYesThe unique identifier for the note associated with the contact. (path parameter)

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose the key traits: it is a destructive delete, it requires a named permission scope, and non-Admin callers are restricted to their own notes. It does not say whether deletion is reversible or how missing/inaccessible notes are reported, 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.

Conciseness3/5

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

The definition restates itself (title line "Delete Contact Note" immediately followed by "Deletes a contact note.") and the trailing "Tags: Contact notes" adds nothing for an agent. The substantive constraints are present but not front-loaded ahead of the redundancy.

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

Completeness4/5

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

For a two-parameter destructive endpoint with no output schema, the description covers purpose, auth scope, role restriction, and the exact path, which is close to everything an agent needs to call it correctly. Reversibility and failure behavior are the only notable omissions.

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 path parameters are already fully documented in the schema. The endpoint template shows where id and note_id sit in the path but adds no format or constraint meaning beyond that, warranting the 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?

States a specific verb and resource ("Deletes a contact note") and reinforces it with the concrete endpoint DELETE /api/v1/contacts/{id}/notes/{note_id}, which distinguishes it from deleting a whole contact. It never explicitly contrasts itself with the sibling delete_contact, so it stops short of a 5.

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

Usage Guidelines3/5

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

The permission (contact_notes:delete) and role scoping (non-Admin agents may only delete their own notes) implicitly tell the agent when the call will succeed, but there is no explicit statement of when to choose this over alternatives or when not to call it.

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

delete_conversation_draftA

Delete Conversation Draft Deletes the caller's draft for a conversation. Without type, drafts of every type are deleted. The handler does not check conversation access: it only touches the caller's own drafts. DELETE /api/v1/conversations/{uuid}/draft Tags: Conversations

NameRequiredDescriptionDefault
typeNoDraft type to delete. Omit to delete all types. (query parameter)
uuidYesConversation UUID (path parameter)

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose the important trait that the handler does not check conversation access and only touches the caller's own drafts, plus the DELETE endpoint. It stops short of saying whether deletion is idempotent or what is returned on success/failure.

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 scope statement and the access caveat are front-loaded and useful, but the leading line simply repeats the tool name and the trailing endpoint/tag metadata is operational filler rather than guidance for an agent.

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, fully-described mutation tool with no output schema, the definition covers scope, permission semantics, and the optional-parameter effect. Only the post-deletion outcome (idempotency, errors, return value) is left 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 coverage is 100% and the schema already documents both parameters, including the enum values and the 'omit to delete all types' behavior. The description's restatement of the type-omission rule adds marginal value 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?

States a specific verb and resource ('Deletes the caller's draft for a conversation') and scopes it to the caller, which distinguishes it from upsert_conversation_draft and the other delete_* siblings that act on different resources.

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 conditional behavior ('Without `type`, drafts of every type are deleted') implies when the optional parameter matters, but there is no explicit when-to-use guidance, no stated alternative, and no mention of what happens if no draft exists.

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

delete_messageA

Delete Message Deletes a private note. Its content is replaced with a placeholder and its attachments are unlinked. Agents can delete only their own notes. Agents with the Admin role can delete any note. Requires the messages:write_private permission. DELETE /api/v1/conversations/{cuuid}/messages/{uuid} Tags: Conversations

NameRequiredDescriptionDefault
uuidYesMessage UUID (path parameter)
cuuidYesConversation UUID (path parameter)

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and largely meets it: it discloses that this is a soft delete (content replaced with a placeholder), that attachments are unlinked as a side effect, and that ownership/role and a specific permission gate the call. It stops short of saying whether the operation is recoverable or what happens on permission failure, which is the main remaining gap.

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 sentences are front-loaded and information-dense, but the definition spends lines on a repeated title ('Delete Message' / 'Deletes a private note'), a raw DELETE endpoint that merely restates the schema path, and a 'Tags: Conversations' footer. Those elements are structural filler rather than guidance an agent can act on.

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

Completeness4/5

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

For a two-parameter mutation tool with no annotations and no output schema, the description covers the important unknowns: permission gate, role-based ownership rules, and the concrete effect on content and attachments. Only reversibility and result/response expectations remain unspecified, which is a minor omission at this complexity.

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

Parameters3/5

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

Schema description coverage is 100%, so both `cuuid` and `uuid` are already documented as conversation/message path parameters. The description adds no extra constraints, formats, or examples beyond what the path template and schema convey, 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 gives a specific verb and resource ('Deletes a private note') and adds concrete semantics: content replaced with a placeholder, attachments unlinked. The only wrinkle is the name/description mismatch (delete_message vs. 'private note'), which slightly muddies what exactly is removed, and there is no explicit differentiation from other delete_* siblings such as delete_contact_note.

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

Usage Guidelines4/5

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

It states clear preconditions for use: agents may delete only their own notes, Admin-role agents may delete any note, and the `messages:write_private` permission is required. It does not spell out when an agent should prefer a different operation (e.g., editing instead of deleting), so routing 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.

delete_shared_viewA

Delete Shared View Permanently deletes a shared view; the conversations are untouched. It cannot be undone. A personal view answers 404. Requires the shared_views:manage permission. DELETE /api/v1/shared-views/{id} Tags: Views

NameRequiredDescriptionDefault
idYesView ID (path parameter)

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does most of it: permanence, irreversibility, that child conversations survive, the 404 behavior on wrong view type, and the required permission scope. The only real gap is the response shape for a successful delete, which is not mentioned and 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.

Conciseness4/5

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

The body is dense and front-loaded, packing the effect, side effects, failure mode, and permission into a few lines. The duplicated "Delete Shared View" header line and the trailing "Tags: Views" add little but cost only a line each.

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 tool with no annotations and no output schema, the description covers effect, reversibility, permissions, and edge-case failure. Missing only the success response detail, which is a minor omission given the tool's simplicity.

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 single `id` parameter is already documented as the view path parameter, so the description adds nothing beyond it. Baseline 3 applies; there is no enum or ID-format guidance to add.

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?

"Permanently deletes a shared view" gives a specific verb and resource, and the follow-on clause scopes the blast radius ("the conversations are untouched"). The endpoint and "Shared View" naming make it unambiguously distinct from the delete_contact/delete_tag/delete_team 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?

It states a concrete exclusion ("A personal view answers 404") and a prerequisite (`shared_views:manage`), so an agent knows both the eligibility condition and the auth requirement before calling. No sibling alternative is named, but the exclusions still give clear selection context.

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

delete_statusA

Delete Conversation Status Default statuses (Open, Snoozed, Resolved, Closed) and statuses in use cannot be deleted. Requires the status:manage permission. DELETE /api/v1/statuses/{id} Tags: Status and priority

NameRequiredDescriptionDefault
idYes(path parameter)

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the permission gate, the two classes of protected statuses that will cause failure, and that this is a destructive DELETE on a specific resource path. It stops short of describing the failure/response payload, which keeps it from a 5.

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

Conciseness4/5

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

Content is front-loaded with the action, then constraints, then the permission requirement. The trailing endpoint path and tag line are mildly boilerplate but add routing context, and there is no filler prose.

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 tool with no annotations or output schema, the description covers the essentials: what is deleted, what cannot be deleted, and the required permission. Only the behavior on failure or the expected response 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 coverage is 100% for the single `id` path parameter, so the schema already documents it. The description only repeats the path template form `{id}` and adds no meaning about the identifier's format or where to obtain it. Baseline 3 applies.

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

Purpose4/5

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

The description opens with a specific verb+resource ("Delete Conversation Status"), which is unambiguous. It does not explicitly distinguish itself from siblings such as update_status or create_status, but the resource is narrow enough that an agent can identify it without opening the schema.

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

Usage Guidelines4/5

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

It gives clear preconditions for use: default statuses and in-use statuses cannot be deleted, and the `status:manage` permission is required. What is missing is explicit routing to an alternative (e.g., update_status for renaming or archiving instead of deleting) when deletion is blocked.

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

delete_tagC

Delete Tag Requires the tags:manage permission. DELETE /api/v1/tags/{id} Tags: Tags

NameRequiredDescriptionDefault
idYes(path parameter)

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations supplied, the description carries the full disclosure burden. It usefully states the required `tags:manage` permission scope, but gives no indication of irreversibility, whether the tag is removed from all tagged entities, or what the response looks like for a destructive operation.

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?

Very short and front-loaded with the action name, then permission, then endpoint. The trailing 'Tags: Tags' line is a generated artifact that carries no information for an agent, but otherwise nothing is wasted.

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 single-parameter delete with no output schema and no annotations, the definition covers identity and authorization but omits the consequences of deletion (irreversibility, effect on already-tagged conversations) and any mention of error behavior for a missing id.

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?

Only one parameter and schema description coverage is 100%, with the schema itself marking `id` as a path parameter. The description's endpoint template reinforces that the id goes in the URL path, which is a small addition, so the baseline of 3 applies.

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

Purpose3/5

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

The title-cased phrase 'Delete Tag' names a verb and resource, and the raw endpoint 'DELETE /api/v1/tags/{id}' confirms it operates on a single tag by id. However, it essentially restates the tool name and adds nothing to distinguish it from update_tag or delete_* siblings in the catalog.

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 when-to-use guidance, no mention that this is irreversible, no guidance on confirming before deletion, and no pointer to alternative approaches (e.g., removing a tag from a conversation instead of deleting it globally). The only conditional information is the required permission scope, which is about authorization rather than tool selection.

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

delete_teamB

Delete Team Requires the teams:manage permission. DELETE /api/v1/teams/{id} Tags: Teams

NameRequiredDescriptionDefault
idYes(path parameter)

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden and does supply one useful fact: the `teams:manage` permission requirement. However, it says nothing about irreversibility, what happens to team members or assigned conversations on deletion, or whether a confirmation step exists — critical context for a destructive operation.

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 definition is front-loaded and minimal: action, permission, endpoint, tag. Nothing is redundant or buried, and every line is scannable for an agent selecting a 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?

For a one-parameter destructive tool with no output schema, the description covers identity and auth but omits the side effects an agent most needs — cascading removals, member unassignment, and irreversibility. It is callable as written but incomplete for safe 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?

Only one parameter exists and schema coverage is 100%, so the schema already documents `id` as a path parameter. The endpoint text reinforces that the id identifies the team being deleted, adding modest confirmation without contradicting the schema; baseline 4 applies for a single well-documented parameter.

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 definition opens with a specific verb+resource ('Delete Team') and reinforces it with the endpoint 'DELETE /api/v1/teams/{id}', leaving no ambiguity about the operation. It does not explicitly contrast with siblings such as update_team, but the name and endpoint make the destructive scope unmistakable.

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 when-to-use guidance, no statement of prerequisites beyond the permission name, and no alternatives offered (e.g., update_team or remove_team_assignee for softer changes). An agent must infer entirely from the tool name when this is appropriate versus other team operations.

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

download_conversation_transcriptB

Download Conversation Transcript Requires the messages:read permission. GET /api/v1/conversations/{uuid}/transcript Tags: Conversations

NameRequiredDescriptionDefault
uuidYes(path parameter)

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full load; it does add useful context by stating the required `messages:read` scope and showing that the operation is a GET (read-only) against a UUID-scoped path. It does not disclose the response format, size limits, or whether a transcript file is generated versus returned inline, which matters for a 'download' 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?

Very short and front-loaded: purpose, permission, endpoint, tags. The 'Tags: Conversations' line is auto-generated filler with no decision value, but the overall length is appropriate.

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 is the only place to learn what a 'download' yields (file format, mime type, content shape) — and it is silent on this. Permission and endpoint coverage make it minimally viable for a single-parameter tool, but an agent cannot predict the result.

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

Parameters3/5

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

Schema coverage is 100%, but the schema's only annotation is '(path parameter)', so the description partially compensates by rendering the endpoint path with {uuid}, confirming the identifier is a path segment. It adds no meaning about where the UUID comes from or what it identifies.

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 name and opening line state a specific verb+resource ('Download Conversation Transcript'), which is clearly distinct from siblings like get_conversation or get_conversation_participants. However, the description adds no explicit contrast to those siblings, so differentiation is inferred from the 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 Guidelines2/5

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

The only usage-relevant content is the prerequisite 'Requires the `messages:read` permission'. There is no guidance on when to download a transcript versus fetching the conversation, nor any mention of when this tool is inappropriate.

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

export_contactC

Export Contact Data Requires the contacts:export permission. GET /api/v1/contacts/{id}/export Tags: Contacts

NameRequiredDescriptionDefault
idYes(path parameter)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. It discloses the permission requirement and HTTP GET endpoint, but does not explain export format, contents, response behavior, or any side effects beyond the implied read operation.

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 short and front-loads the tool purpose. The raw endpoint and "Tags: Contacts" line add little value, but the overall structure is efficient.

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

Completeness2/5

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

For a simple one-parameter export tool with no output schema, the description should clarify what the export returns and how it behaves. It supplies permission and endpoint details but leaves the export result format and usage context unspecified.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents the single id parameter. The endpoint text `/api/v1/contacts/{id}/export` implies that id identifies the contact being exported, adding marginal meaning beyond the schema's "(path parameter)" label.

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: "Export Contact Data". It is clear what the tool does, but it does not distinguish this export operation from sibling tools such as get_contact.

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 mentions a required permission, which is useful prerequisite context, but gives no guidance on when to use this tool versus alternatives like get_contact or other contact read operations. No exclusions or selection criteria are provided.

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

generate_api_keyC

Generate A P I Key Requires the users:manage permission. POST /api/v1/agents/{id}/api-key Tags: Agents

NameRequiredDescriptionDefault
idYes(path parameter)

TDQS

C2.5/5.0
Behavior2/5

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

No annotations exist, so the description carries the full burden, and it discloses only the permission requirement. For a credential-minting mutation it says nothing about whether an existing key is invalidated, whether the key is shown once, or whether the operation is reversible — all critical behavioral facts 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.

Conciseness3/5

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

It is short and the permission requirement sits near the top, but the leading line duplicates the tool name and the trailing "Tags: Agents" plus raw HTTP verb are auto-generated metadata rather than agent-facing guidance. Roughly half the text 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?

With no annotations and no output schema, the definition should explain what is returned (presumably the new key) and how it relates to existing keys, and it does neither. For a security-sensitive single-parameter mutation tool this leaves an important gap despite the simple 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% and the single parameter is documented only as "(path parameter)"; the route template clarifies that `id` is the agent identifier, which is a modest addition. Beyond that the description adds no format or constraint detail the schema doesn't already carry, so the baseline 3 applies.

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

Purpose3/5

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

The heading merely restates the tool name; the real purpose signal comes from the raw route "POST /api/v1/agents/{id}/api-key", which shows a key is minted for a specific agent. It never distinguishes itself from the sibling revoke_api_key or explains what kind of key is produced, so the agent must infer the resource relationship.

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 prerequisite "Requires the `users:manage` permission", which is genuinely useful for deciding whether a call can succeed. There is no statement of when to use this versus revoke_api_key, no note on whether existing keys are replaced, and no mention of error behavior when permission is missing.

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

get_agentC

Get Agent Requires the users:manage permission. GET /api/v1/agents/{id} Tags: Agents

NameRequiredDescriptionDefault
idYes(path parameter)

TDQS

C2.9/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full disclosure burden. It does add real value by naming the required `users:manage` permission and the underlying REST endpoint, but it says nothing about what is returned, behavior when the id does not exist, or whether deleted/inactive agents are 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?

Four short lines with the endpoint and permission front-loaded; nothing is padded. The trailing "Tags: Agents" line is catalog metadata with no decision value, which is the only waste.

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 one-parameter read tool with no output schema, the definition covers auth and routing but leaves the response shape entirely unspecified. Since no output schema exists, a brief note on returned fields or not-found behavior would materially improve it.

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

Parameters3/5

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

There is a single parameter with 100% schema description coverage, so the schema already documents `id`. The description's `{id}` in the path template confirms it is a path parameter but adds no format, constraint, or example beyond that.

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

Purpose3/5

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

"Get Agent" alone restates the tool name, but the appended `GET /api/v1/agents/{id}` confirms this is a single-agent fetch keyed by id, implicitly distinguishing it from the list-style `get_agents`. It never explicitly contrasts with close siblings such as `get_current_agent`, so the agent must infer the distinction from the path template.

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 `users:manage` permission requirement; there is no statement of when to call this versus `get_current_agent` or `get_agents`. An agent knowing an id is a prerequisite, but that is left implicit 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_agentsC

Get Agents Requires the users:manage permission. GET /api/v1/agents Tags: Agents

NameRequiredDescriptionDefault

No parameters

TDQS

C2.6/5.0
Behavior3/5

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

With no annotations present, the description carries the full disclosure burden, and it does contribute one genuinely useful behavioral fact: the call requires the `users:manage` permission. However it says nothing about pagination, result volume, ordering, or what a returned agent contains, so the behavioral picture remains thin for a list endpoint.

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 short and front-loaded, but a large share of the text is scaffolding rather than meaning: the title restatement and the "Tags: Agents" line add no actionable information. The permission line is the only sentence that 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 read/list tool with no output schema and no annotations, the description should explain the shape and scope of what comes back and how it differs from the compact and single-agent variants. It provides neither, leaving the agent to guess at return format and sibling 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?

The tool takes zero parameters, so there is nothing for the description to clarify; per the baseline for a parameterless tool this scores at the top of the normal range. The open additionalProperties schema suggests optional query parameters may exist but are undocumented anywhere.

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?

"Get Agents" essentially restates the tool name, and the only additional content is the raw endpoint path GET /api/v1/agents. It conveys that agents are listed, but nothing distinguishes this from siblings like get_agents_compact or get_agent, so the agent cannot tell which one to pick.

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 when-to-use guidance, no exclusion, and no mention of when get_agents_compact or get_agent would be preferable. The only prerequisite-like content is the permission requirement, which is not framed as a selection criterion.

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

get_agents_compactA

Get Agents Compact Agents and AI assistants in a short form (ID, name, email, enabled, availability), the list the web UI offers when assigning a conversation. Any authenticated agent, unlike get_agents which needs users:manage. Use the returned id as assignee_id of update_user_assignee. GET /api/v1/agents/compact Tags: Agents

NameRequiredDescriptionDefault
qNoCase-insensitive substring of the name (agents: also matched on the email) (query parameter)
idsNoComma-separated IDs (at most 200, non-numeric or non-positive entries are ignored). When given, only these are returned and every other filter and the pagination are ignored (query parameter)
pageNoPage number, used when page_size is set (query parameter)
typeNoKeep only this kind of user. Any other value is a 400 (query parameter)
enabledNoOnly the exact value `true` keeps the enabled users; anything else returns enabled and disabled ones (query parameter)
page_sizeNoItems per page, at most 500. 0 or absent: return every match (query parameter)

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the burden; it does disclose the auth requirement (any authenticated agent vs users:manage) and the underlying endpoint, which are genuinely useful behavioral facts. It says nothing about pagination defaults, result caps, or error behavior — though the schema covers pagination and the enum errors, the read-scope behavior is only partly covered.

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 payload sentence and the sibling contrast are front-loaded and each earns its place, but the leading 'Get Agents Compact' line restates the tool name and the trailing 'GET /api/v1/agents/compact / Tags: Agents' boilerplate adds little for an agent.

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 listing exactly which fields come back, plus the assignee_id follow-up use. Combined with the fully documented input schema, an agent has enough to call it correctly; only pagination/return-size behavior is 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 description coverage is 100%, including enum values, the 200-id cap, and the ids-overrides-other-filters rule, so the baseline is 3. The description adds no additional parameter meaning beyond naming the returned fields, which is acceptable given the schema already documents all six parameters thoroughly.

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 ('Agents and AI assistants in a short form') and enumerates the returned fields (ID, name, email, enabled, availability). It also positions the tool against the sibling get_agents by permission scope, 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?

Explicitly says any authenticated agent can call it, unlike get_agents which needs users:manage, and it tells the caller what to do with the result ('Use the returned id as assignee_id of update_user_assignee'). It gives no explicit when-not-to-use case or preference rule beyond the permission difference, so it stops short of full routing guidance.

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

get_ai_promptsC

Get A I Prompts GET /api/v1/ai/prompts Tags: AI completions

NameRequiredDescriptionDefault

No parameters

TDQS

C2.2/5.0
Behavior2/5

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

With no annotations, the description must fully disclose behavior. It implies a read-only GET operation, but does not confirm safety, idempotency, or potential side effects. The lack of details on response format or rate limits leaves significant ambiguity.

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 description is very short, but the first line repeats the tool name. It includes the HTTP method and a tag, which is useful but not optimally structured. The brevity does not compensate for the lack of clarity; each sentence could be more informative.

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

Completeness2/5

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

Given no output schema and no annotations, the description fails to explain what the tool returns or its role in the system. Without additional context, the agent cannot determine the response structure or how 'AI prompts' relate to the broader API (e.g., ai_completion).

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, and the schema coverage is effectively 100% (empty schema). The description adds no parameter information, which is acceptable given no parameters exist. Baseline for 0 params is 4.

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 states 'Get A I Prompts' but does not clarify what AI prompts are or how they differ from sibling tools like ai_completion. The tag 'AI completions' provides a vague hint, but the purpose remains ambiguous without specifying the returned resource's nature.

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

Usage Guidelines1/5

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

No guidance is provided on when to use this tool versus alternatives. There is no mention of when not to use it, or any comparison with siblings like ai_completion, get_agents, etc., leaving the agent to infer usage from the name alone.

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

get_all_conversationsC

Get all Conversations Requires the conversations:read_all permission. GET /api/v1/conversations/all Tags: Conversations

NameRequiredDescriptionDefault
pageNoPage number (defaults to 1) (query parameter)
orderNoSort direction (case-insensitive). Defaults to `desc`. (query parameter)
filtersNoJSON-encoded filter. Either an array of conditions that are AND-ed, e.g. `[{"model":"conversations","field":"status_id","operator":"equals","value":"1"}]`, or a group `{"logic":"AND","rules":[...]}` with at most one level of nested groups. Operators: `equals`, `not equals`, `greater than`, `less than`, `set`, `not set`, `in`, `between`, `contains`, `ilike`, `not contains`. Filterable fields: `conversations` (status_id, priority_id, assigned_team_id, assigned_user_id, inbox_id, last_message_at, last_interaction_at, last_interaction_sender, created_at, waiting_since, next_sla_deadline_at, snoozed_until, sla_policy_id, tags), `conversation_statuses` (id, name), `users` (email, external_user_id), `inboxes` (channel). (query parameter)
order_byNoField to sort by, as `model.field`. Defaults to `conversations.last_message_at`. (query parameter)conversations.last_message_at
page_sizeNoNumber of items per page (defaults to 30, max 500) (query parameter)

TDQS

C2.8/5.0
Behavior3/5

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

With zero annotations, the description carries the full behavioral burden. It does add genuinely useful auth context by naming the `conversations:read_all` permission and reveals the underlying GET endpoint, which signals a safe read. But it says nothing about result volume, pagination defaults, or what an unfiltered "all" returns, which is the main risk for this 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?

It is short and the essential line comes first, with permission and endpoint following. The "Tags: Conversations" line is filler that earns no place, but there is no verbose padding to cut.

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?

Five parameters, no annotations, and no output schema mean the description should shoulder more weight than it does. It leaves unaddressed the practical question of how to page through or scope an "all" listing, and offers no hint about the shape or size of the response.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents page, order, filters, order_by, and page_size in detail. The description adds no parameter meaning beyond that, so the baseline of 3 applies.

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

Purpose3/5

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

The description states a verb and resource ("Get all Conversations") and adds the backing endpoint, but it is largely a restatement of the tool name with no scope qualifier. It never explains what "all" excludes, nor distinguishes it from the many sibling list tools such as get_assigned_conversations, get_unassigned_conversations, or get_view_conversations.

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 when-to-use guidance, no when-not-to-use, and no named alternative. The only usage-relevant signal is the required permission, which gates access but does not help an agent choose between this and the other conversation-listing tools.

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

get_all_draftsA

Get All Drafts All unsent reply and private-note drafts saved by the caller, across conversations. Any authenticated agent. GET /api/v1/drafts Tags: Conversations

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose two useful traits: the listing is restricted to the caller's own drafts and requires authentication. It stops short of covering read-only safety, pagination/result limits, or ordering, all of which matter for a list endpoint.

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 in the first sentence with scope qualifiers following immediately. The trailing "GET /api/v1/drafts" and "Tags: Conversations" lines are metadata padding that adds little for an agent, but they are short.

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 zero-parameter read tool this covers the essentials of what is fetched and by whom. Because there is no output schema, the description should say something about the shape or volume of returned drafts (fields, pagination), and it does not.

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

Parameters4/5

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

The tool takes no parameters, so there is nothing for the description to disambiguate; the baseline applies. The stated scope (all drafts, not per-conversation) is the only semantic needed, and it is present.

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 plus real scoping detail: unsent reply and private-note drafts, saved by the caller, across conversations. That is enough for an agent to know exactly what comes back. It doesn't name a sibling it might be confused with, but no draft-specific alternative exists in the 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 Guidelines3/5

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

"Across conversations" implies the global/my-drafts scope and "Any authenticated agent" gives an auth precondition, so usage is implied rather than stated. There is no explicit when-to-use versus when-not guidance, and no mention of when to prefer a conversation-scoped retrieval instead.

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

get_all_shared_viewsA

Get Shared Views Every shared view (visible to all agents or to one team), most recently updated first. Personal views are not listed. Requires the shared_views:manage permission. GET /api/v1/shared-views Tags: Views

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations at all, the description carries the full burden, and it does disclose two useful traits: the required `shared_views:manage` permission and the fixed sort order (most recently updated first). It omits pagination behavior and whether the result set is bounded, which matters for a list endpoint returning an unknown number of views.

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 short and front-loaded, leading with scope and ordering before the permission note. The trailing 'GET /api/v1/shared-views' and 'Tags: Views' lines are pure metadata repetition that add no decision value.

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 zero-parameter list tool with no output schema, the definition covers scope, ordering, exclusions, and auth, but leaves the agent unable to predict the return shape or whether results are paginated. A sentence on what a shared view contains or how many are returned would close the 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?

The tool takes zero parameters, so the baseline is 4; the schema is fully self-describing and the description correctly adds nothing about parameters. One minor gap: it doesn't say whether any implicit filters (team scope) apply despite the absence of inputs.

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 every shared view) and pins the scope precisely: views visible to all agents or one team, personal views excluded, ordered by most recent update. It's clearly distinct from the singular sibling get_shared_view, though it never names any 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 context is implied rather than stated: you learn this lists shared (not personal) views, but there is no explicit guidance on when to call this versus get_shared_view for a single view, or how it differs from the conversation/draft list siblings. The permission prerequisite is the only hard gating information.

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

get_assigned_conversationsB

Get Assigned Conversations Get all assigned conversations to current user. Requires the conversations:read_assigned permission. GET /api/v1/conversations/assigned Tags: Conversations

NameRequiredDescriptionDefault
pageNoPage number (defaults to 1) (query parameter)
orderNoSort direction (case-insensitive). Defaults to `desc`. (query parameter)
filtersNoJSON-encoded filter. Either an array of conditions that are AND-ed, e.g. `[{"model":"conversations","field":"status_id","operator":"equals","value":"1"}]`, or a group `{"logic":"AND","rules":[...]}` with at most one level of nested groups. Operators: `equals`, `not equals`, `greater than`, `less than`, `set`, `not set`, `in`, `between`, `contains`, `ilike`, `not contains`. Filterable fields: `conversations` (status_id, priority_id, assigned_team_id, assigned_user_id, inbox_id, last_message_at, last_interaction_at, last_interaction_sender, created_at, waiting_since, next_sla_deadline_at, snoozed_until, sla_policy_id, tags), `conversation_statuses` (id, name), `users` (email, external_user_id), `inboxes` (channel). (query parameter)
order_byNoField to sort by, as `model.field`. Defaults to `conversations.last_message_at`. (query parameter)conversations.last_message_at
page_sizeNoNumber of items per page (defaults to 30, max 500) (query parameter)

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden. It does disclose a real operational prerequisite ('Requires the conversations:read_assigned permission') and the GET endpoint implies a read-only, non-destructive call, but it says nothing about pagination defaults, result ordering, or what happens when the user has no assigned conversations.

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 sentence is front-loaded and useful, but the leading 'Get Assigned Conversations' restates the tool name and 'Tags: Conversations' is metadata noise. The raw endpoint path is mild filler given the tool name already conveys the resource.

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

Completeness3/5

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

With five optional parameters fully covered by the schema and no output schema, the description only needs to establish scope and prerequisites, which it does. It is incomplete on return behavior — no mention of pagination envelope, default page size, or empty-result handling — which matters for a list endpoint an agent will page through.

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 page, page_size, order, order_by, and filters all fully documented including enum values and filter syntax, so the schema does the heavy lifting. The description adds no parameter meaning beyond that, which is the baseline expectation here.

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 all assigned conversations') and narrows the scope to 'current user', which distinguishes it from the unassigned/team siblings in the catalog. It stops short of naming an alternative explicitly, so it is clear but not fully differentiated.

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 scope phrase 'assigned to current user' — an agent can infer this is the tool for the caller's own queue — but there is no explicit when-to-use, when-not-to-use, or pointer to get_all_conversations / get_unassigned_conversations for other scopes.

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

get_automation_ruleA

Get Automation Rule A single automation rule with its conditions and actions, and whether it is enabled. Requires the automations:manage permission. GET /api/v1/automations/rules/{id} Tags: Automations

NameRequiredDescriptionDefault
idYesAutomation rule ID (path parameter)

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does reasonably: it discloses the required `automations:manage` permission, the read-only GET endpoint, and the shape of what comes back (conditions, actions, enabled flag). It stops short of error/permission-failure behavior or whether the rule is workspace-scoped.

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 sentence is front-loaded and useful, but it is wrapped in low-value scaffolding: the title line repeats the tool name, and the raw endpoint plus 'Tags: Automations' are auto-generated noise that costs tokens without informing tool selection.

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

Completeness4/5

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

For a one-parameter read tool with no output schema, the definition covers what is needed: what is fetched, what the payload contains, and what permission is required. Only the relationship to the list tool remains unstated.

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 `id` parameter with 100% schema description coverage, so the schema already explains it as a path parameter. The description only restates the endpoint path and adds no format, lookup, or validation detail beyond what the schema provides — the baseline for full coverage.

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 automation rule) and enumerates what the response contains: conditions, actions, enabled state. That distinguishes it from the list sibling get_automation_rules by implication, though it never names that 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?

The phrase 'A single automation rule' implies this is the detail fetch rather than the list fetch, and the permission requirement hints at a prerequisite. Beyond that there is no explicit when-to-use, no exclusion, and no pointer to get_automation_rules for enumeration.

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

get_automation_rulesA

Get Automation Rules Automation rules of one type, ordered by weight. Requires the automations:manage permission. Pass type: a rule list is always read per type (an empty or unknown type returns an empty list, not every rule). GET /api/v1/automations/rules Tags: Automations

NameRequiredDescriptionDefault
typeYesRule type to list (query parameter)

TDQS

A3.9/5.0
Behavior4/5

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

No annotations exist, so the description carries the behavior burden: it discloses the required `automations:manage` permission, the weight-based ordering, and the important edge case that an empty or unknown type returns an empty list. It doesn't cover pagination or result shape, but the core behavioral traits an agent needs are present.

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 definition is front-loaded with the action and ordering, then the permission requirement, then the key usage caveat. It is short and mostly earns its space, though the title restatement and raw endpoint/Tags line add some noise.

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 list tool with no output schema, the description covers permission requirements, ordering, mandatory type, and the empty-list edge case. Pagination and response fields are unspecified, but that is a minor gap for this complexity.

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

Parameters3/5

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

Schema coverage is 100% and the enum already documents the three valid types, so the baseline is 3. The description adds useful context that the type is mandatory and that unknown types silently produce an empty list, but does not add further semantics to the single parameter.

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 (get automation rules), states ordering by weight, and distinguishes it from get_automation_rule by making clear this is a per-type list endpoint. The API path reinforces the intent.

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 states that a type must always be passed and that empty/unknown types yield an empty list rather than all rules, which implies when the tool applies. However, it never explicitly contrasts with the singular get_automation_rule sibling or says when to choose one over the other.

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

get_contactC

Get Contact Requires the contacts:read permission. GET /api/v1/contacts/{id} Tags: Contacts

NameRequiredDescriptionDefault
idYes(path parameter)

TDQS

C2.9/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden; it does disclose the required `contacts:read` permission, which is genuinely useful pre-call context. It says nothing about what the response contains, what happens for a missing or inaccessible id, or rate limits, leaving real behavioral gaps for a read tool with no 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?

Very short and front-loaded, with permission, endpoint, and tag on separate lines so the agent can scan it quickly. The opening 'Get Contact' line duplicates the tool name and earns little, but overall there is 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 simple single-resource read with one well-documented parameter, the definition is minimally sufficient: it states the operation, permission, and endpoint. With no output schema, the missing description of the returned contact object and error cases is a noticeable gap, though a moderate one for a trivial getter.

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?

Only one parameter (id) exists and schema description coverage is 100%, so the baseline is 3. The endpoint template confirms id is a path parameter, but the description adds no format, type, or lookup semantics beyond the schema's '(path parameter)' note.

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

Purpose3/5

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

The description restates the name ('Get Contact') and adds the concrete endpoint GET /api/v1/contacts/{id}, which does signal retrieval of a single contact by id. However, it never distinguishes this from the sibling get_contacts (list) or get_contact_notes, so the agent must infer the single-vs-collection distinction from the endpoint path alone.

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 when-to-use guidance, no exclusions, and no mention of alternatives such as get_contacts for listing or get_contact_notes for related data. The agent is left to infer selection criteria from path shape and tool names alone.

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

get_contact_notesB

Get Contact Notes Requires the contact_notes:read permission. GET /api/v1/contacts/{id}/notes Tags: Contact notes

NameRequiredDescriptionDefault
idYes(path parameter)

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden; it does disclose the required `contact_notes:read` permission and the HTTP route, which is genuinely useful auth context. However it says nothing about pagination, ordering, result limits, or what an empty result means for a list 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?

Three short lines, front-loaded with purpose and permission, with the routing detail after. The trailing "Tags: Contact notes" line is boilerplate that adds little, but overall there is no wasted prose.

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 single-parameter read tool with no output schema, the definition covers authentication and scope adequately, but omits response shape and pagination behavior, leaving an agent unable to predict what comes back.

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 there is only one parameter, so the schema already documents `id`. The endpoint template reinforces that `id` is the contact id rather than a note id, but no format or validity details are added.

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 ("Get Contact Notes") and the underlying endpoint GET /api/v1/contacts/{id}/notes, which makes clear it lists notes scoped to a single contact. It is distinguishable from siblings like get_contact and get_contact_page_visits, though it never explicitly contrasts itself with them.

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 guidance and no mention of alternatives such as create_contact_note or delete_contact_note, nor any note about when to prefer this over fetching the full contact. The only implicit guidance is that it requires a contact id.

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

get_contact_page_visitsA

Get Contact Page Visits Returns the last 20 website pages the conversation's contact visited while the livechat widget was loaded, newest first. Requires the conversations:read permission. GET /api/v1/conversations/{uuid}/page-visits Tags: Conversations

NameRequiredDescriptionDefault
uuidYesConversation UUID (path parameter)

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does reasonably well: it discloses the 20-item cap, newest-first ordering, the important limitation that only visits while the livechat widget was loaded are counted, and the required `conversations:read` permission. It omits error/empty behavior and raw endpoint details beyond the path.

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 return behavior is front-loaded in the first real sentence, with permission and endpoint metadata following. The leading line 'Get Contact Page Visits' duplicates the tool name and the Tags line is minor clutter, but the body is tight.

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

Completeness4/5

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

For a single-parameter read tool with no output schema and no annotations, the description covers what is returned, how much, in what order, and under what data-collection condition, plus the auth requirement. An agent has enough to call it correctly; only empty-result and error semantics are 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?

There is one parameter with 100% schema description coverage, so the schema already explains that uuid is the conversation UUID path parameter. The description's phrase 'the conversation's contact' only loosely reinforces that the UUID scopes to a conversation, adding little 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 ('Returns the last 20 website pages the conversation's contact visited') and adds scope detail (newest first, widget-loaded only). It does not explicitly contrast itself with siblings like get_contact or get_conversation, so it stops short of full differentiation.

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

Usage Guidelines3/5

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

The description implies usage by framing the data as tied to a livechat widget and requires a specific permission, but it never says when to prefer this over alternatives or what conditions make it inapplicable (e.g., contacts without widget history). Guidance 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_contactsC

Get Contacts Requires the contacts:read_all permission. GET /api/v1/contacts Tags: Contacts

NameRequiredDescriptionDefault
pageNoPage number (defaults to 1) (query parameter)
orderNoSort direction (case-insensitive). Used only with `order_by`, defaults to ascending. (query parameter)
filtersNoJSON-encoded filter. Either an array of conditions that are AND-ed, e.g. `[{"model":"conversations","field":"status_id","operator":"equals","value":"1"}]`, or a group `{"logic":"AND","rules":[...]}` with at most one level of nested groups. Operators: `equals`, `not equals`, `greater than`, `less than`, `set`, `not set`, `in`, `between`, `contains`, `ilike`, `not contains`. Filterable fields: `users` (email, created_at, updated_at). (query parameter)
order_byNoField to sort by, as `model.field`. Results are unordered when omitted. (query parameter)
page_sizeNoNumber of items per page (defaults to 30, max 500) (query parameter)

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations supplied, the description carries the full behavioral burden and does add one genuinely useful fact: the required `contacts:read_all` permission scope. It stops there, saying nothing about read-only semantics, rate limits, result size, or pagination behavior beyond what the schema already encodes.

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?

Very short and front-loaded, with the permission requirement placed early. The trailing "Tags: Contacts" line is metadata noise that does not help an agent decide or call.

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 five-parameter list tool with no output schema and no annotations, the definition is thin: it never states what a contact record looks like or whether results are paginated beyond the page parameters. The permission note is the only substantive addition beyond 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 100%, so page, page_size, order, order_by and the JSON filters parameter are all fully documented in the schema itself. The description adds no parameter meaning at all, which is acceptable only because the schema does the heavy lifting.

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

Purpose3/5

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

The description names a verb and resource ("Get Contacts") and confirms it via the endpoint GET /api/v1/contacts, so an agent can tell this is a read/list operation. However, it never distinguishes itself from siblings like search_contacts or get_contact, leaving the exact scope (full list vs. single record vs. filtered search) 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?

There is no when-to-use guidance and no mention of any alternative tool. The agent must guess whether to call this or search_contacts when looking for a specific contact.

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

get_conversationC

Get Conversation Requires the conversations:read permission. GET /api/v1/conversations/{uuid} Tags: Conversations

NameRequiredDescriptionDefault
uuidYesConversation UUID (path parameter)

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose one genuinely useful behavioral trait: the required `conversations:read` permission scope. However, it says nothing about whether fetching marks the conversation as read, what the response contains, or how missing/invalid UUIDs behave — meaningful gaps for a read tool with zero annotation coverage.

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 content is short and front-loaded, and the permission requirement appears early. The 'Tags: Conversations' line and the raw HTTP endpoint are boilerplate that adds little for an agent, but the overall size is appropriate.

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?

Complexity is low (one required parameter, no nested objects), and the permission plus endpoint give the essential call mechanics. But with no output schema and no annotations, the description is the only place the return value or side effects could be described, and it omits both.

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 `uuid` parameter is documented as a conversation UUID path parameter, so the schema does the work. The description adds nothing beyond that, which is the expected baseline rather than a strength.

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

Purpose3/5

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

The name/title is merely restated as 'Get Conversation', but the endpoint GET /api/v1/conversations/{uuid} makes clear this retrieves a single conversation by UUID. It does not distinguish this from siblings like get_all_conversations or get_mentioned_conversations, so an agent must infer the single-vs-list distinction from naming alone.

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 when-to-use guidance and no mention of alternatives; the only condition stated is the required `conversations:read` permission. An agent gets no help deciding between this and list-style siblings such as get_all_conversations or get_contact.

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

get_conversation_participantsB

Get Conversation Participants Requires the conversations:read permission. GET /api/v1/conversations/{uuid}/participants Tags: Conversations

NameRequiredDescriptionDefault
uuidYesUUID of conversation (path parameter)

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden; it usefully discloses the required `conversations:read` permission and the read-only GET endpoint, which an agent cannot infer from the schema. It says nothing about pagination, result ordering, or what happens when a conversation has no participants.

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 short and front-loads the operation, but the first line merely repeats the tool name and the 'Tags: Conversations' line is raw API metadata with no value to an agent. A single sentence stating the operation, resource scope, and permission would have been tighter.

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 single-parameter read tool with no output schema, the definition covers the permission requirement and endpoint, which is a reasonable minimum. It leaves the agent guessing about the response shape (list of participant objects?) and whether results are paged.

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 uuid parameter is fully documented in the schema itself, and the description adds only that it is a path parameter via the endpoint template. Baseline 3 applies since the description contributes little beyond structured data.

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 Conversation Participants'), and the endpoint path confirms it reads the participants sub-collection of one conversation. It is distinguishable from the broader get_conversation sibling, though it largely echoes the tool name.

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

Usage Guidelines2/5

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

No guidance is given on when to call this versus get_conversation or other conversation tools. The only contextual cue is the required permission, which implies reading rather than mutation but does not establish usage conditions or alternatives.

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

get_current_agentC

Get Current Agent GET /api/v1/agents/me Tags: Agents

NameRequiredDescriptionDefault

No parameters

TDQS

C2.4/5.0
Behavior1/5

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

No annotations provided, so description carries full burden. It does not disclose behavioral traits such as whether it requires authentication, what data is returned, or side effects. Essentially opaque.

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

Conciseness2/5

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

Extremely concise but at the cost of informativeness. It provides only the name, endpoint, and tags, which is too minimal to be helpful. Lacks key context that an agent would need to correctly invoke the tool.

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

Completeness2/5

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

Given no parameters, no output schema, and no annotations, the description should compensate with context. It does not explain what 'current agent' means, how to interpret the response, or prerequisites. Incomplete for a tool with zero structured guidance.

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?

No parameters exist, so schema coverage is 100% trivially. Description adds no additional meaning beyond the schema, but baseline is 3 as the schema already covers all parameter aspects.

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 'Get Current Agent', which conveys the verb and resource. It distinguishes from siblings like 'get_agent' (requires ID) and 'get_agents' (list all), but does not explicitly explain 'current' meaning the authenticated agent. Slight ambiguity but sufficient.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus siblings. The description does not mention when to prefer this over get_agent or get_agents, nor does it provide context for typical usage scenarios.

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

get_custom_attributesC

List Custom Attributes GET /api/v1/custom-attributes Tags: Custom attributes

NameRequiredDescriptionDefault
applies_toNoReturn only attributes that apply to this entity, e.g. `contact` or `conversation`. Returns all when empty. (query parameter)

TDQS

C2.5/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden. It implies a read via the GET endpoint, but says nothing about authentication needs, result ordering, pagination, or what fields an attribute record contains — substantial gaps for an unannotated tool.

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 short and front-loaded, but the 'GET /api/v1/custom-attributes' and 'Tags: Custom attributes' lines are API-doc boilerplate that gives an agent little it can act on. Size is fine; content density is low.

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 listing tool with no output schema and no annotations, the description should say what an attribute looks like and whether results are paginated or complete. Neither is covered, leaving the agent to discover the response shape by trial.

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 optional 'applies_to' filter is fully documented in the schema, including the empty-value behavior. The description adds no meaning beyond that, so the baseline of 3 applies.

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

Purpose3/5

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

The description says 'List Custom Attributes' and gives the underlying endpoint GET /api/v1/custom-attributes, so the verb and resource are identifiable. However, it largely restates the tool name and adds no scope detail (all attributes? per workspace?) nor any distinction from the sibling update_*_custom_attributes tools that operate on the same resource.

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 call this versus the sibling update_contact_custom_attributes / update_conversation_custom_attributes tools, and no stated preconditions. The only usage-like hint ('Returns all when empty') lives in the parameter schema, not the description.

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

get_inboxA

Get Inbox A single inbox by ID. Passwords, OAuth tokens and client secrets in config are masked. Unlike the inbox list, this route requires the inboxes:manage permission. GET /api/v1/inboxes/{id} Tags: Inboxes

NameRequiredDescriptionDefault
idYesInbox ID (path parameter)

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations present the description carries the full burden, and it does disclose two non-obvious behaviors: credential fields in `config` are masked in the response, and a privileged scope is required. It doesn't describe error behavior for a missing or unauthorized ID, but the key surprises are surfaced.

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 masking warning and permission note are front-loaded and worth their space. The leading "Get Inbox" heading restating the tool name and the trailing "Tags: Inboxes" / raw route line are generated boilerplate that adds no decision value.

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

Completeness4/5

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

For a single-parameter read with no output schema, the description covers identity, scope requirement, and response masking — enough to call it correctly. Only error and not-found semantics are absent.

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 single `id` parameter is already documented as an integer path parameter. The description's "by ID" adds no syntax or format detail beyond the schema, so the baseline of 3 applies.

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

Purpose5/5

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

Description gives a specific verb and resource ("A single inbox by ID") and explicitly contrasts with the sibling list route ("Unlike the inbox list"). An agent can distinguish this from get_inboxes without inspecting 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?

It supplies a real decision-relevant condition: this route requires the `inboxes:manage` permission, implicitly steering unprivileged callers to the list endpoint. It stops short of naming get_inboxes as the explicit fallback, so the routing is inferable 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_inboxesB

List Inboxes GET /api/v1/inboxes Tags: Inboxes

NameRequiredDescriptionDefault

No parameters

TDQS

B3/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full disclosure burden, yet it does nothing beyond restating the name plus a raw endpoint path. It says nothing about what an inbox record contains, whether results are paginated or filtered by account/workspace, or what permissions are needed.

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

Conciseness4/5

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

It is short and front-loads the meaningful part ("List Inboxes"). The trailing "Tags: Inboxes" line is generated-doc boilerplate that adds nothing for an agent, and the raw path is of marginal use.

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 zero-parameter tool with no annotations and no output schema, the description should at least characterize the returned list, but it never does. An agent knows it lists inboxes and nothing more, which is thin given no other structured field carries that information.

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

Parameters4/5

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

The tool takes zero parameters, so there is no parameter semantics to explain and the baseline of 4 applies. The description correctly implies no inputs are 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?

"List Inboxes" states a specific verb (list) and resource (inboxes), so the operation is unambiguous. It does not differentiate itself from the singular sibling get_inbox, leaving the agent to infer the difference from names alone.

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 when-to-use guidance, no mention of the singular get_inbox alternative, and no stated prerequisites. The only hint is the bare REST path GET /api/v1/inboxes, which implies a read of the inbox collection but gives no selection criteria.

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

get_macroA

Get Macro A single macro with its message content and its actions. Any authenticated agent; the macro's visibility is not checked on this route. GET /api/v1/macros/{id} Tags: Macros

NameRequiredDescriptionDefault
idYesMacro ID (path parameter)

TDQS

A3.6/5.0
Behavior4/5

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

No annotations are supplied, so the description carries the full behavioral burden, and it does add meaningful context: any authenticated agent may call it and the macro's visibility is NOT checked on this route, which is a real security-relevant disclosure the schema cannot convey. It also states the response includes message content and actions; it omits not-found/error behavior and any pagination or rate-limit notes.

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 content is short, but it is padded with API-doc boilerplate — a redundant title line 'Get Macro', the raw route, and 'Tags: Macros' — none of which help an agent select or invoke the tool. The most valuable sentence (visibility not checked) is buried after 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 one-parameter single-record getter with no output schema, the description covers what the tool returns (message content and actions) and the auth/visibility caveat, which is enough to call it correctly. Only error behavior on an unknown ID is left unstated, a minor gap for a tool of this complexity.

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

Parameters3/5

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

There is a single parameter with 100% schema description coverage ('Macro ID (path parameter)'), so the schema already carries everything needed. The description's GET /api/v1/macros/{id} merely restates that id is a path segment, adding no new meaning such as ID format or source.

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 Macro ... A single macro') and clarifies the payload ('its message content and its actions'), which distinguishes it from the list-style sibling get_macros. It stops short of naming the sibling explicitly, so differentiation is implied 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?

There is no explicit 'use this when...' or comparison to alternatives such as get_macros or get_macros_compact. Usage is only implied by the wording 'A single macro' plus the REST path with an {id} path parameter, which tells an agent this is a by-ID lookup.

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

get_macrosA

Get Macros Every macro with its message content and its actions (each action carries display_value, the name of the team, agent, status or priority it targets). Any authenticated agent. Use search_macros to list only the macros the caller may apply, or get_macros_compact for a list without the message content. GET /api/v1/macros Tags: Macros

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden; it does disclose the auth prerequisite and describes the returned structure (message content plus action targets), and "Every macro" implies an unfiltered full result set. It stops short of covering size/pagination behavior or rate limits for what is clearly a bulky payload, and the existence of a "compact" sibling is the only hint about cost.

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 payload shape, then alternatives — efficient and well ordered. The trailing "GET /api/v1/macros" and "Tags: Macros" lines are transport metadata that add no selection value for an agent.

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 zero-parameter read tool with no output schema and no annotations, the definition covers what comes back (message content, actions with `display_value`) and who may call it. Missing only secondary details such as result ordering or any server-side limits on the list size.

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

Parameters4/5

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

The tool takes zero parameters and the description adds nothing parameter-related, which is the correct baseline of 4. The noted schema coverage of 100% is trivially true for an empty object 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 (Get) and resource (Macros) and then characterizes the payload precisely: every macro with message content plus actions, where each action carries `display_value` naming the team/agent/status/priority it targets. It also implicitly distinguishes itself from `get_macros_compact` and `search_macros`, so an agent can tell them apart without opening schemas.

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

Usage Guidelines4/5

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

Explicitly routes the agent: use `search_macros` to list only macros the caller may apply, and `get_macros_compact` for a list without message content. It also states the access condition ("Any authenticated agent"). The only gap is it never says when this heavy full-content variant is the wrong default.

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

get_macros_compactA

Get Macros Compact Macros without their message content (has_message_content tells whether there is one), filtered by name, newest update first. Without page_size (or with 0) every match is returned. Requires the macros:manage permission. GET /api/v1/macros/compact Tags: Macros

NameRequiredDescriptionDefault
qNoCase-insensitive substring of the macro name (query parameter)
pageNoPage number, used when page_size is set (query parameter)
page_sizeNoItems per page, at most 500. 0 or absent: return every match (query parameter)

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does meaningful work: it discloses the `has_message_content` flag, the newest-updated-first ordering, the page_size=0/absent returns-everything behavior, and the `macros:manage` permission requirement. It stops short of describing the return shape or any rate/volume limits.

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

Conciseness4/5

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

The substance is front-loaded and dense — scope, flag, sort, pagination and permission in a few clauses. It is slightly padded by the redundant title echo 'Get Macros Compact' and the trailing 'GET /api/v1/macros/compact' / 'Tags: Macros' 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?

For a simple three-parameter read tool with fully documented schema and no output schema, the definition covers the operationally risky bits: permission requirement, default ordering, and the unbounded-result mode when page_size is 0. What comes back per macro is not described, but no output schema exists to lean on.

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 q, page and page_size are already documented in the schema, establishing a baseline of 3. The description restates the page_size=0 semantics and adds the default sort order, but contributes no new parameter 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 ('Get Macros Compact') plus concrete scope: macros without message content, filtered by name, newest update first. It implies a content-bearing sibling via 'without their message content' but never names get_macros or search_macros, so differentiation is left to inference.

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

Usage Guidelines3/5

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

Usage is only implied: 'macros without their message content' suggests picking this over a full-content variant when the body isn't needed. There is no explicit when-to-use, when-not-to-use, or named alternative among get_macros / search_macros / get_macro.

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

get_mentioned_conversationsA

Get Mentioned Conversations Get conversations where the current user, or a team they belong to, was mentioned in a private note. mentioned_message_uuid on each item points to the mention. Requires the conversations:read permission. GET /api/v1/conversations/mentioned Tags: Conversations

NameRequiredDescriptionDefault
pageNoPage number (defaults to 1) (query parameter)
orderNoSort direction (case-insensitive). Defaults to `desc`. (query parameter)
filtersNoJSON-encoded filter. Either an array of conditions that are AND-ed, e.g. `[{"model":"conversations","field":"status_id","operator":"equals","value":"1"}]`, or a group `{"logic":"AND","rules":[...]}` with at most one level of nested groups. Operators: `equals`, `not equals`, `greater than`, `less than`, `set`, `not set`, `in`, `between`, `contains`, `ilike`, `not contains`. Filterable fields: `conversations` (status_id, priority_id, assigned_team_id, assigned_user_id, inbox_id, last_message_at, last_interaction_at, last_interaction_sender, created_at, waiting_since, next_sla_deadline_at, snoozed_until, sla_policy_id, tags), `conversation_statuses` (id, name), `users` (email, external_user_id), `inboxes` (channel). (query parameter)
order_byNoField to sort by, as `model.field`. Defaults to `conversations.last_message_at`. (query parameter)conversations.last_message_at
page_sizeNoNumber of items per page (defaults to 30, max 500) (query parameter)

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations supplied, the description carries the burden and does well: it discloses the required `conversations:read` permission, implies a read-only GET endpoint, and tells the agent that each item carries a `mentioned_message_uuid` pointing at the mention. It does not cover pagination limits or response shape, but those are partly 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?

The body is three tight sentences front-loaded with the defining scope. The leading line restating the tool name is redundant, a small waste in an otherwise efficient definition.

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 read tool with no annotations and no output schema, the description supplies the essential extras: the permission requirement and the field that identifies the mention. Only the return envelope and pagination behavior remain undocumented, which the schema largely covers.

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 defaults, enums, and the full filter grammar documented in the input schema. The description adds nothing about parameters, which is acceptable given the schema does the work, but earns only the baseline.

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

Purpose5/5

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

The description names a specific verb and resource plus a precise scope: conversations where the current user or their team was mentioned in a private note. That scope alone distinguishes it from siblings such as get_all_conversations and get_assigned_conversations 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 mention-based filter gives clear context for when this tool is the right choice rather than a general listing tool. It stops short of explicitly naming an alternative for the broader case or stating exclusions, so it lands at a solid 4 rather than 5.

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

get_messageC

Get Message Requires the messages:read permission. GET /api/v1/conversations/{cuuid}/messages/{uuid} Tags: Conversations

NameRequiredDescriptionDefault
uuidYesMessage UUID (path parameter)
cuuidYesConversation UUID (path parameter)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full burden. It usefully discloses the `messages:read` auth requirement and the endpoint, but says nothing about the response contents, error behavior for a missing or malformed UUID, or confirmation that it is a non-mutating read. The Tags line adds no behavioral value.

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?

Very short and front-loaded with purpose, permission, and endpoint. The 'Get Message' heading restating the name and the Tags line are mildly redundant, but nothing impedes comprehension.

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

Completeness2/5

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

For a simple read-by-UUID tool the essentials are nearly there, but with no annotations and no output schema the description should indicate what a successful response contains or what failure looks like. Auth is covered; return and error behavior are not.

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 as path parameters. The endpoint template reinforces which parameter is which, but adds no format or constraint detail beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource (get a message), with the REST path confirming the exact endpoint. It is implicitly distinguishable from plural siblings like get_messages via the singular name, but the description does not call out that distinction.

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 guidance, alternatives, or exclusions are provided. The required permission is a prerequisite, not usage guidance. An agent must infer from the path template that this fetches one specific message by conversation UUID and message UUID.

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

get_messagesC

Get Messages Requires the messages:read permission. GET /api/v1/conversations/{uuid}/messages Tags: Conversations

NameRequiredDescriptionDefault
pageNoPage number (defaults to 1) (query parameter)
typeNoFilter by message type. Can be specified multiple times (e.g., ?type=incoming&type=outgoing). If not provided, returns all messages. (query parameter)
uuidYesConversation UUID (path parameter)
privateNoFilter by private messages (internal notes). If not provided, returns all messages. (query parameter)
page_sizeNoNumber of items per page (defaults to 30, max 500) (query parameter)

TDQS

C2.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose two useful facts: the GET method (implying a read-only, side-effect-free call) and the required `messages:read` permission. It says nothing about result ordering, total counts, or pagination envelope even though page/page_size exist, and 'Tags: Conversations' is metadata rather than 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?

Very short and skimmable, with the permission requirement front-loaded after the title. Some content is raw spec residue (the literal endpoint path and 'Tags: Conversations') that provides little decision value, but there is no verbosity to penalize.

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 5-parameter paginated, filterable listing tool with no annotations and no output schema, the description leaves too much open: return shape, ordering, and how this differs from sibling message-retrieval tools are all absent. The permission line is useful but insufficient on its own.

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 uuid, page, page_size, type, and private are all documented in the schema itself. The description adds no meaning beyond that—for example, no note on default sort order or how filters combine—so the baseline 3 applies.

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

Purpose3/5

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

The description gives the resource ('Messages') and the endpoint path GET /api/v1/conversations/{uuid}/messages, which together imply 'list messages in a conversation'. But 'Get Messages' largely restates the tool name, and it never distinguishes this listing tool from siblings like get_message, search_messages, or paginated_search_messages.

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 the sibling search/listing tools, nor any prerequisite or exclusion beyond the permission requirement. The agent must infer usage from the name and endpoint alone.

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

get_prioritiesC

Get Conversation Priorities GET /api/v1/priorities Tags: Status and priority

NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, and the description only includes 'GET /api/v1/priorities' and tags, which implies read-only behavior but does not disclose response format, authentication needs, or any other behavioral traits.

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

Conciseness4/5

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

Extremely concise with just two lines, front-loading the purpose. However, it could include a brief sentence on what the response contains without increasing length much.

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 parameterless GET endpoint, the description minimally explains the purpose but omits what the output looks like. Without an output schema, more context on return values would be helpful.

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 has no parameters with 100% coverage, so the description adds no parameter information. Baseline 3 is appropriate as no further detail is needed.

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 'Get Conversation Priorities' which clearly identifies the verb (Get) and resource (Priorities), distinguishing it from sibling tools like 'update_conversation_priority' or 'get_statuses'.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. Does not specify that it retrieves the list of available priorities, not conversation-level assignments.

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

get_public_help_center_articleC

Get Public Help Center Article GET /api/v1/public/help-centers/{slug}/articles/{article_slug} Tags: Help center

NameRequiredDescriptionDefault
slugYesHelp center slug. (path parameter)
localeNoLocale code. Falls back to the help center's default locale when missing or not allowed. (query parameter)
article_slugYesArticle slug. (path parameter)

TDQS

C2.3/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden. The word 'public' hints that no authentication is required, but the description says nothing about what a successful response contains, whether unpublished or missing articles error out, or how locale fallback behaves at the result level.

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 short and front-loaded with the operation name, so there is little bloat. However, the raw route line and the 'Tags: Help center' line are API-spec artifacts that consume space without helping an agent decide or invoke.

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

Completeness2/5

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

With no annotations and no output schema, the description is the only source of behavioral information, and it does not say what the tool returns (article body, title, metadata) or how failures manifest. For a tool with a required path pair and an optional locale, this leaves notable 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%, with each parameter documented as a path or query parameter, so the baseline is 3. The description adds no meaning beyond the schema — it names no parameter semantics, formats, or constraints.

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 is largely a restatement of the tool name: 'Get Public Help Center Article' plus the raw HTTP route GET /api/v1/public/help-centers/{slug}/articles/{article_slug}. The route does imply a single-article fetch scoped by help center, but nothing distinguishes it from siblings like public_help_center_search or get_public_help_center_tree beyond the URL shape.

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 statement of when to use this tool rather than searching or fetching the help center tree. An agent must infer usage entirely from the name and path, and no exclusions, prerequisites, or alternatives are named.

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

get_public_help_center_treeC

Get Public Help Center Tree GET /api/v1/public/help-centers/{slug}/tree Tags: Help center

NameRequiredDescriptionDefault
slugYesHelp center slug. (path parameter)
localeNoLocale code. Falls back to the help center's default locale when missing or not allowed. (query parameter)

TDQS

C2.5/5.0
Behavior2/5

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

No annotations are supplied, so the description must carry the full behavioral burden and it does not. The GET verb and /public/ prefix hint at a read-only, unauthenticated endpoint, but nothing states the access model, whether unpublished content is excluded, pagination, or response shape.

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 short and front-loaded with the tool name, but the content is largely a restatement of the name plus a raw endpoint and an autogenerated tag. Low information density rather than verbal bloat keeps it in the middle of the scale.

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 public discovery tool with no output schema and no annotations, so the description is the only place to explain what a "tree" contains (categories, nested articles, ordering, depth). None of that is present, leaving the agent unable to predict the return value.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters (slug, locale) are documented in the schema, so baseline 3 applies. The URL template mildly reinforces that slug is a path parameter, but the description adds no new meaning, such as slug validation or locale fallback behavior.

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

Purpose3/5

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

The definition names a verb and resource ("Get Public Help Center Tree") and pins it to a concrete endpoint, so the agent knows it retrieves a help center's hierarchical structure. However, "tree" is never explained, and it offers no differentiation from siblings such as get_public_help_center_article or public_help_center_search. It sits at vague-but-recognizable rather than specific.

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 when-to-use or when-not-to-use guidance at all; the only context is the HTTP route and a "Help center" tag. An agent cannot tell from this text whether to reach for the tree endpoint versus the article endpoint or the public search tool.

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

get_shared_viewA

Get Shared View A single shared view with its filters. A personal view answers 404. Requires the shared_views:manage permission. GET /api/v1/shared-views/{id} Tags: Views

NameRequiredDescriptionDefault
idYesView ID (path parameter)

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations supplied, the description carries the full burden and does well: it discloses the permission requirement, the 404 behavior for personal views, and the exact endpoint (GET /api/v1/shared-views/{id}). The main omission is any hint about the response payload beyond 'with its filters,' which matters since there is no output schema.

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

Conciseness4/5

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

Short and front-loaded: the core definition comes first, followed by the constraint and the endpoint. The repeated title line ('Get Shared View') and the trailing 'Tags: Views' are low-value padding but not distracting.

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

Completeness4/5

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

For a one-parameter read tool with no output schema, the definition covers the important ground: what is returned conceptually, who can call it, and what happens on a personal view. Only the shape of the returned view object is left unspecified, a minor gap for a tool this simple.

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

Parameters3/5

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

There is a single parameter with 100% schema description coverage, which already labels it as the view ID path parameter. The description adds no format, range, or sourcing guidance for that ID, 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?

States a specific verb and resource: 'Get Shared View / A single shared view with its filters.' The word 'single' implicitly distinguishes it from the list-style sibling get_all_shared_views, though that sibling is never named. 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 Guidelines4/5

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

Gives a clear precondition and a negative case: 'A personal view answers 404,' which tells the agent this tool only serves shared views. It also states the required `shared_views:manage` permission. It does not explicitly name alternatives such as get_all_shared_views, so routing is inferred 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.

get_sidebar_countsA

Get Sidebar Counts Open-conversation counts for the inbox sidebar badges of the caller: assigned, mentioned, unassigned and all, plus one count per view the caller can access (personal views and shared views of the caller's teams). Per-view counts are scan-capped at 100 in the code (the UI shows 99+). Requires the conversations:read permission. GET /api/v1/conversations/sidebar-counts Tags: Conversations

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses caller-only scoping, the required conversations:read permission, and a non-obvious behavioral trait — per-view counts are scan-capped at 100 (UI renders 99+). It omits the concrete response shape, but most safety/scope concerns are 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?

The scoping and count list are front-loaded and earn their place, but the first line merely restates the title, and the raw method/path and 'Tags: Conversations' lines are low-value metadata noise for an agent choosing a 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 zero-parameter read tool with no output schema and no annotations, the description covers purpose, scope, permission requirement, and a subtle cap behavior. Only the concrete field names of the returned counts are left unspecified.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate and it does not mislead about inputs.

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 (sidebar counts) and enumerates exactly which counts are returned: assigned, mentioned, unassigned, all, plus per-view counts for personal and team-shared views. It does not explicitly distinguish itself from the sibling overview_counts, so an agent must infer the difference.

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 'inbox sidebar badges of the caller' — a caller-scoped badge endpoint — but there is no explicit when-to-use statement, no condition distinguishing it from overview_counts or get_assigned_conversations, and no exclusions.

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

get_statusesC

Get Conversation Statuses GET /api/v1/statuses Tags: Status and priority

NameRequiredDescriptionDefault

No parameters

TDQS

C2.8/5.0
Behavior2/5

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

No annotations exist, so the description must disclose behavior. It only indicates 'Get' (read-only) but fails to mention side effects, rate limits, or return format, leaving significant gaps.

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 description is very short but includes extraneous URL and tags. It could be more concise by focusing only on the operation, e.g., 'Get Conversation Statuses'.

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

Completeness2/5

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

For a simple retrieval tool with no output schema, the description should at least hint at what is returned (e.g., list of status objects). It also fails to differentiate from 'get_priorities', leaving the agent underinformed.

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

Parameters3/5

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

The input schema has no parameters, so schema coverage is 100%. The description adds no value beyond the schema, but given zero parameters, a baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states 'Get Conversation Statuses', identifying the verb and resource. However, it lacks differentiation from sibling tools like 'get_priorities', which may reduce clarity for the agent.

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 usage guidelines are provided. The description does not mention when to use this tool versus alternatives like 'get_priorities' or any prerequisites.

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

get_tagsC

List Tags Returns tags sorted by name. GET /api/v1/tags Tags: Tags

NameRequiredDescriptionDefault
qNoReturn only tags whose name contains this text (case-insensitive). (query parameter)
idsNoComma-separated tag IDs, at most 200. When set, returns those tags and ignores `q`, `page` and `page_size`. (query parameter)
pageNoPage number, used with `page_size`. (query parameter)
page_sizeNoNumber of tags per page, max 500. Omit or send 0 to return all matching tags. (query parameter)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full disclosure burden, yet it only adds the sort order. It says nothing about authentication needs, rate limits, whether the call is read-only, or how paging behaves when combined with filtering — the schema hints at the last point but the description does not.

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 definition is short and front-loads the verb, with the sort-order note immediately useful. The trailing 'Tags: Tags' line is redundant noise that earns no 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 simple read-only list tool with four fully documented optional parameters, the essential mechanics are covered by the schema. However, with no output schema and no annotations, the description should at least sketch the returned tag shape or whether all tags are returned by default.

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 q, ids, page, and page_size all documented including precedence rules for ids. The description adds no parameter meaning beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource ('List Tags') and adds that results are sorted by name, so an agent knows exactly what the tool returns. It does not differentiate from any sibling, but no sibling in the provided list plausibly competes for the same resource.

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, no prerequisites, and no mention of alternatives for retrieving tag data. The agent must infer that this is the only tag-listing call.

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

get_teamB

Get Team Requires the teams:manage permission. GET /api/v1/teams/{id} Tags: Teams

NameRequiredDescriptionDefault
idYes(path parameter)

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full behavioral burden. It does disclose one genuinely useful trait beyond the schema — that the `teams:manage` permission is required — and the GET verb implies a non-mutating read, but it says nothing about the response shape, error/404 behavior, or whether the permission scope is broader than a read strictly 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?

It is short and the key facts (operation, permission, endpoint) come first. The trailing 'Tags: Teams' line is API-doc boilerplate that adds nothing for an agent, but the overall footprint is small and there is no redundant prose.

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 of a single resource with full schema coverage and no output schema, the definition covers the essentials: what it returns conceptually, the endpoint, and the permission gate. The missing piece is failure behavior and any relationship to the list-level or mutation siblings, which keeps it from being fully complete.

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

Parameters3/5

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

Schema coverage is 100% for the single `id` path parameter, so the schema already carries the semantics. The description only echoes it via the endpoint template '{id}' and adds no format, source, or validation details beyond what the schema states.

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 pairs the verb 'Get' with the resource 'Team' and disambiguates the scope with the endpoint 'GET /api/v1/teams/{id}', making clear it fetches a single team by id rather than a list. It stops short of naming any sibling (e.g. update_team, delete_team) as a contrast, so differentiation is only implicit through the HTTP 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?

The only usage-relevant statement is the permission requirement. There is no guidance on when to call this versus update_team/delete_team, no mention of preconditions such as needing a valid team id from a prior list call, and no note on behavior when the team does not exist.

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

get_teamsC

Get Teams Requires the teams:manage permission. GET /api/v1/teams Tags: Teams

NameRequiredDescriptionDefault

No parameters

TDQS

C2.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden; it does add a concrete behavioral fact (requires the teams:manage permission) and the GET verb implies a non-mutating call. It says nothing about rate limits, pagination, or the size/shape of the result set, which matters for an unfiltered collection endpoint.

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 short and front-loaded, but the first line repeats the name verbatim and the endpoint path plus "Tags: Teams" line are scaffolding rather than agent-useful content. Nearly every line is boilerplate that could be replaced with one informative sentence.

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

Completeness2/5

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

With no output schema and no annotations, the description must compensate by saying what comes back, and it doesn't. For a zero-parameter list endpoint, an agent still needs to know whether the response is a full team roster, whether it paginates, and how it differs from the compact sibling.

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

Parameters4/5

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

The tool takes zero parameters, so there is no parameter meaning to convey and the baseline applies. The description does not misleadingly imply any filtering options, which is appropriate for an empty schema.

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?

"Get Teams" only restates the tool name; the sole added information is the raw endpoint GET /api/v1/teams, which still doesn't say whether this returns all teams, a team list with members, or paginated results. It does not distinguish itself from the sibling get_teams_compact.

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 when-to-use guidance at all: no mention of when this is preferable to get_teams_compact or other list endpoints, and no prerequisites beyond the permission line. The agent is left to infer selection purely 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_teams_compactA

Get Teams Compact Teams in a short form (ID, name, emoji), the list the web UI offers when assigning a conversation. Any authenticated agent, unlike get_teams which needs teams:manage. Use the returned id as assignee_id of update_team_assignee. GET /api/v1/teams/compact Tags: Teams

NameRequiredDescriptionDefault
qNoCase-insensitive substring of the name (agents: also matched on the email) (query parameter)
idsNoComma-separated IDs (at most 200, non-numeric or non-positive entries are ignored). When given, only these are returned and every other filter and the pagination are ignored (query parameter)
pageNoPage number, used when page_size is set (query parameter)
page_sizeNoItems per page, at most 500. 0 or absent: return every match (query parameter)

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose the key behavioral trait: a lower authorization bar than the sibling tool. It also reveals the return shape (ID, name, emoji). It does not discuss pagination defaults or what happens with very large team lists, though the schema covers page/page_size semantics.

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 content is front-loaded and tight: purpose, auth comparison, and chaining advice in three sentences. It wastes some space on boilerplate that repeats the name ('Get Teams Compact'), the raw endpoint, and 'Tags: Teams'.

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

Completeness5/5

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

For a simple read-only list tool with four optional params and no output schema, the definition supplies everything needed: purpose, alternative, access requirement, returned fields, and the follow-up call. Nothing essential 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?

Schema coverage is 100% and each parameter is described in-schema, including the notable `ids` behavior that disables all other filters and pagination. The description adds useful orientation by explaining that this is the lightweight list used for conversation assignment.

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 teams compact) and defines the shape of the result: a short form list of ID, name and emoji, as offered by the web UI when assigning a conversation. It explicitly contrasts with `get_teams`, so an agent can distinguish the two 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?

Gives the selecting condition directly: any authenticated agent can use it, whereas `get_teams` requires `teams:manage`. It also names the downstream step (pass the returned `id` as `assignee_id` of `update_team_assignee`), which is exactly the chaining 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.

get_team_unassigned_conversationsB

Get Team Unassigned Conversations Get conversation assigned to team but not assigned to any agent. Requires the conversations:read_team_inbox permission. GET /api/v1/teams/{id}/conversations/unassigned Tags: Conversations

NameRequiredDescriptionDefault
idYesThe unique identifier for the team (path parameter)
pageNoPage number (defaults to 1) (query parameter)
orderNoSort direction (case-insensitive). Defaults to `desc`. (query parameter)
filtersNoJSON-encoded filter. Either an array of conditions that are AND-ed, e.g. `[{"model":"conversations","field":"status_id","operator":"equals","value":"1"}]`, or a group `{"logic":"AND","rules":[...]}` with at most one level of nested groups. Operators: `equals`, `not equals`, `greater than`, `less than`, `set`, `not set`, `in`, `between`, `contains`, `ilike`, `not contains`. Filterable fields: `conversations` (status_id, priority_id, assigned_team_id, assigned_user_id, inbox_id, last_message_at, last_interaction_at, last_interaction_sender, created_at, waiting_since, next_sla_deadline_at, snoozed_until, sla_policy_id, tags), `conversation_statuses` (id, name), `users` (email, external_user_id), `inboxes` (channel). (query parameter)
order_byNoField to sort by, as `model.field`. Defaults to `conversations.last_message_at`. (query parameter)conversations.last_message_at
page_sizeNoNumber of items per page (defaults to 30, max 500) (query parameter)

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does add real value by disclosing the required permission scope and the underlying endpoint. It still omits the return shape, whether pagination metadata is included, and any rate-limit or ordering behavior beyond what 'Get' implies.

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 body is short and front-loaded with the core definition, but the first line merely restates the tool name and the trailing 'GET /api/v1/...' and 'Tags: Conversations' lines are generated boilerplate that adds little for an agent. A portion of the text does not earn 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 six-parameter read tool with no annotations and no output schema, the description covers purpose and auth but says nothing about result contents or how the rich filter/sort parameters shape output. It is adequate but leaves the agent guessing about return values and sibling 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?

Schema description coverage is 100%, including detailed filter operators, filterable fields, and sort enums, so the baseline is 3. The description adds no parameter meaning beyond the schema — it never mentions filtering, sorting, or page size, all of which are central to this endpoint.

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 with a precise scope: conversations assigned to a team but with no assigned agent. The required team `id` parameter reinforces the team-scoped nature. It does not explicitly distinguish itself from the sibling `get_unassigned_conversations`, so an agent must infer the difference from the 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 Guidelines3/5

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

Usage is only implied by the phrase 'assigned to team but not assigned to any agent' and the stated `conversations:read_team_inbox` permission prerequisite. There is no explicit statement of when to choose this over `get_unassigned_conversations`, `get_assigned_conversations`, or `get_all_conversations`, leaving the agent to infer the routing.

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

get_unassigned_conversationsA

Get Unassigned Conversations Get all conversations not assigned to any user and team. Requires the conversations:read_unassigned permission. GET /api/v1/conversations/unassigned Tags: Conversations

NameRequiredDescriptionDefault
pageNoPage number (defaults to 1) (query parameter)
orderNoSort direction (case-insensitive). Defaults to `desc`. (query parameter)
filtersNoJSON-encoded filter. Either an array of conditions that are AND-ed, e.g. `[{"model":"conversations","field":"status_id","operator":"equals","value":"1"}]`, or a group `{"logic":"AND","rules":[...]}` with at most one level of nested groups. Operators: `equals`, `not equals`, `greater than`, `less than`, `set`, `not set`, `in`, `between`, `contains`, `ilike`, `not contains`. Filterable fields: `conversations` (status_id, priority_id, assigned_team_id, assigned_user_id, inbox_id, last_message_at, last_interaction_at, last_interaction_sender, created_at, waiting_since, next_sla_deadline_at, snoozed_until, sla_policy_id, tags), `conversation_statuses` (id, name), `users` (email, external_user_id), `inboxes` (channel). (query parameter)
order_byNoField to sort by, as `model.field`. Defaults to `conversations.last_message_at`. (query parameter)conversations.last_message_at
page_sizeNoNumber of items per page (defaults to 30, max 500) (query parameter)

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the burden. It does add useful context: the required permission scope and the underlying GET endpoint implying a read-only operation. It omits return shape, pagination behavior, and whether the empty result is an empty array versus an error — meaningful gaps for a listing tool with zero annotation coverage.

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 scope sentence is front-loaded and clear. Some space is spent restating the title verbatim and on an HTTP-route/tag footer that adds little for an agent, keeping it from a 5, but it remains short and readable.

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 filtered list with fully documented schema and no output schema, the description covers purpose, scope, and the permission prerequisite. The main missing piece is any hint about result format or pagination semantics, which is minor given the rich schema.

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

Parameters3/5

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

Schema description coverage is 100%, with each of the five query parameters documented including the filter JSON grammar and order_by enum. The description adds no parameter meaning beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource with a precise scope: 'Get all conversations not assigned to any user and team.' An agent can tell this is the unassigned-conversation list. It doesn't explicitly distinguish itself from the sibling get_team_unassigned_conversations, so it falls short of a 5.

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

Usage Guidelines3/5

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

Usage is implied by the scope statement (fetch unassigned conversations) and a prerequisite is disclosed ('Requires the conversations:read_unassigned permission'). However, there is no explicit when-to-use versus alternatives such as get_team_unassigned_conversations or get_assigned_conversations, leaving the routing decision to inference.

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

get_view_conversationsA

Get View Conversations Get conversations for a specific view. The view's saved filters are applied. Requires the conversations:read permission. GET /api/v1/views/{id}/conversations Tags: Conversations

NameRequiredDescriptionDefault
idYesUnique ID of the view (path parameter)
pageNoPage number (defaults to 1) (query parameter)
orderNoSort direction (case-insensitive). Defaults to `desc`. (query parameter)
order_byNoField to sort by, as `model.field`. Defaults to `conversations.last_message_at`. (query parameter)conversations.last_message_at
page_sizeNoNumber of items per page (defaults to 30, max 500) (query parameter)

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does meaningful work: it discloses that the view's saved filters are applied to the result set and that the `conversations:read` permission is required. The GET endpoint path also confirms the read-only nature. It omits anything about result ordering defaults or pagination behavior, but the schema covers those parameters.

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 and brief: the key sentence about applying saved filters comes early. The redundant repetition of the title as the first line plus the trailing endpoint and tag lines are mild waste but do not obscure the core message.

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 read tool with a fully described schema and no output schema, the essentials are present: what it returns conceptually (conversations of a view), the filter semantics, and the auth requirement. A small gap is that it doesn't warn about empty results or how the view's filters interact with the order_by parameter.

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 (id, page, order, order_by, page_size) are already documented in the schema with defaults, bounds, and enums. The description adds nothing beyond indicating the `id` refers to a view. 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 with scope: 'Get conversations for a specific view,' which implicitly separates it from the unfiltered siblings like get_all_conversations. It never names an alternative or clarifies the boundary with search_conversations or paginated_search_conversations, so it lands just short of full sibling differentiation.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is the tool for reading conversations in a saved view. There is no explicit when-to-use versus when-to-use-something-else guidance, and no stated prerequisites beyond the required permission string.

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

health_checkA

Health Check GET /health Tags: Health

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden. It only states the endpoint and method without disclosing any behavioral traits (e.g., return format, side effects, or that it is read-only).

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

Conciseness4/5

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

The description is very short and front-loaded with the name and method. It is concise but could benefit from a slightly more structured format.

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

Completeness3/5

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

Given the tool's simplicity (no parameters, no output schema), the description is mostly complete for a health check. However, it could mention the expected response or common use case.

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

Parameters4/5

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

The input schema has no parameters and schema coverage is 100%. The description adds no parameter meaning, but with zero parameters, baseline is 4.

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

Purpose5/5

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

The description clearly states 'Health Check' and specifies the HTTP method 'GET /health'. This is a specific verb-resource pair that distinguishes it from sibling tools which focus on agents, contacts, conversations, etc.

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

Usage Guidelines3/5

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

The description implies usage for checking API health but gives no explicit when-to-use or when-not-to-use guidance. For a simple health check, this is adequate but lacks explicit alternatives or context.

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

mark_conversation_as_unreadA

Mark Conversation As Unread Marks the conversation as unread for the caller by moving their read position to just before the latest message. Returns 400 when the conversation has no messages. Requires the conversations:read permission. PUT /api/v1/conversations/{uuid}/mark-unread Tags: Conversations

NameRequiredDescriptionDefault
uuidYesConversation UUID (path parameter)

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations supplied, the description carries the full behavioral burden and does substantial work: it discloses the per-caller side effect, the 400 failure mode when the conversation has no messages, and the required `conversations:read` permission. Gaps remain on idempotency of repeated calls and on what a successful response contains.

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 functional sentence is front-loaded and dense with information (scope, mechanism, error case, permission). Minor waste comes from restating the tool name as a heading, plus the endpoint and 'Tags: Conversations' lines, which add little for an agent.

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 no annotations and no output schema, the description covers the critical unknowns – side-effect scope, permission requirement, and an error condition – which is close to sufficient. It could be more complete with a sentence on the success response or on repeated 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 single `uuid` parameter is already fully documented by the schema (100% coverage) as the conversation path parameter. The description adds no meaning beyond that – no format examples, no note on what happens with an invalid or unknown UUID – so the baseline 3 applies.

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

Purpose5/5

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

The description pairs a specific verb and resource ('Marks the conversation as unread') with the exact mechanism ('moving their read position to just before the latest message') and the acting scope ('for the caller'). That level of detail lets an agent distinguish this from read-only siblings like get_conversation without inspecting any schema.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: an agent can infer this is the tool to call when it wants a conversation to reappear as unread for the caller. There is no explicit when-not guidance, no mention of an opposite tool, and no note on whether this should precede or follow other conversation operations.

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

media_uploadD

Media Upload POST /api/v1/media Tags: Media

NameRequiredDescriptionDefault
filesYes(body, file) File to upload. Only the first file is used. Size and extension limits come from the upload settings. — pass a file path inside the directory set by LIBREDESK_MCP_UPLOAD_DIR (uploads are refused while it is unset); the server will upload its contents.
inlineNo(body) Set to 'true' to store the file with an inline disposition (e.g. an inline image) instead of as an attachment.
linked_modelNo(body) Name of the model the uploaded media is linked to, e.g. `messages`. `help_articles` stores the file as publicly served media and requires the `help_center:manage` permission.

TDQS

D1.7/5.0
Behavior1/5

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

With no annotations, the description carries the full behavioral burden, yet it discloses nothing about permissions, size/extension limits, the fact that uploads are refused when LIBREDESK_MCP_UPLOAD_DIR is unset, or what the call returns. Only the raw endpoint and tag are given, which is not behavioral context.

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

Conciseness2/5

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

It is short, but the content is auto-generated boilerplate (name, HTTP method, path, tag) that does not front-load anything useful. Brevity here reflects under-specification rather than disciplined conciseness.

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

Completeness1/5

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

This is a file-upload mutation with no annotations and no output schema, the case where the description must do the most work. It provides none of the missing pieces: auth/permission expectations, failure modes, or the shape of a successful response.

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 all three parameters are documented in the schema itself, including file-path semantics, the inline flag, and the linked_model permission note. The description adds no meaning beyond that, 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?

"Media Upload" restates the tool name and is followed only by an HTTP verb/path and a tag label. It never states in prose what the tool does with the file (store it, attach it, serve it) or how it differs from the sibling serve_media, so an agent learns nothing beyond the name.

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

Usage Guidelines1/5

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

There is no when-to-use guidance, no prerequisites, and no mention of any alternative such as serve_media or the upload-directory requirement. The line "Tags: Media" is a routing label, not usage instruction.

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

overview_chartsC

Get Overview Charts Requires the reports:manage permission. GET /api/v1/reports/overview/charts Tags: Reports

NameRequiredDescriptionDefault
daysNoNumber of past days to include. 0 means today only. Values outside 0-365 are clamped. (query parameter)

TDQS

C2.3/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, and it discloses only that the `reports:manage` permission is required. It does not say what data the charts return, whether the result is cached or rate limited, or what an empty result looks like. The permission note is genuinely useful, but it is the only behavioral fact provided.

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 short and front-loaded, but the opening line is a title restatement and the trailing HTTP path and tag metadata add little for an agent. The permission requirement is the only sentence that 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 read-only reporting tool with no output schema and no annotations, the description should convey what the charts show and what the response looks like. Neither is present, leaving an agent unable to predict the result or choose this over sibling overview tools.

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

Parameters3/5

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

Schema description coverage is 100% and the single `days` parameter is thoroughly documented, including the 0-365 clamping behavior, so the schema does the heavy lifting. The description adds nothing about `days` or its defaults. Baseline 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 first line, "Get Overview Charts," simply restates the tool name rather than describing what the charts contain or represent. The only added specificity is the HTTP path and tag, which tell an agent little about the resource beyond its name. None of the adjacent overview_* siblings are distinguished.

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 gives no when-to-use or when-not-to-use guidance, and no indication of how this differs from overview_counts, overview_csat, or the other overview siblings. The only context is an access requirement, which is a prerequisite rather than usage guidance.

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

overview_countsC

Get Overview Counts Requires the reports:manage permission. GET /api/v1/reports/overview/counts Tags: Reports

NameRequiredDescriptionDefault

No parameters

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations supplied, the description carries the full disclosure burden. It does usefully state the `reports:manage` permission requirement and that the call is an HTTP GET, implying a read, but it says nothing about what data comes back, whether it is cached, or how heavy the call is. That is thin for a tool with zero structured behavioral metadata.

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 short and front-loaded, but much of the text is auto-generated boilerplate ('GET /api/v1/...', 'Tags: Reports') that adds little for an agent. The one sentence of real value is the permission requirement.

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 and no description of the return payload, which is the critical unknown for a zero-parameter reporting endpoint. An agent cannot tell what 'overview counts' contains, so the definition is incomplete relative to its purpose.

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

Parameters4/5

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

The tool takes no parameters, so there is nothing for the description to disambiguate and the schema is permissive. A baseline of 4 is appropriate since no parameter meaning is missing.

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 heading 'Get Overview Counts' essentially restates the tool name, so the reader still doesn't know what is being counted. The endpoint path and 'Tags: Reports' hint at a reporting context but never specify the resource or the shape of the data, and there is no differentiation from siblings like overview_charts or overview_csat.

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 statement of when to use this tool, when to prefer a sibling such as get_sidebar_counts or overview_charts, or what the prerequisites mean in practice. The only usable guidance is the stated permission requirement, which is a precondition rather than usage direction.

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

overview_csatC

Get Overview CSAT Requires the reports:manage permission. GET /api/v1/reports/overview/csat Tags: Reports

NameRequiredDescriptionDefault
daysNoNumber of past days to include. 0 means today only. Values outside 0-365 are clamped. (query parameter)

TDQS

C2.8/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden. It does usefully disclose the required `reports:manage` permission and a GET endpoint (implying a read-only call), but says nothing about rate limits, aggregation behavior, or what the response contains.

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 short, but a raw endpoint path and 'Tags: Reports' consume space without helping an agent decide or invoke. The permission requirement is the only sentence that 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 one-parameter read-only report tool with no output schema, the definition is minimally sufficient to call it, but an agent still has no idea what the CSAT payload looks like or what range yields meaningful results.

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 single `days` parameter is already fully documented with default, bounds, and clamping behavior. 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.

Purpose3/5

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

The body largely restates the tool name ('Get Overview CSAT') and adds only plumbing details (endpoint path, tag). It never explains what CSAT data is returned or how this differs from sibling report tools like overview_sla or overview_counts.

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, when not to, or which sibling report to pick for a different metric. The only usable filter is the permission note, which gates access but does not inform selection.

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

overview_message_volumeC

Get Overview Message Volume Requires the reports:manage permission. GET /api/v1/reports/overview/messages Tags: Reports

NameRequiredDescriptionDefault
daysNoNumber of past days to include. 0 means today only. Values outside 0-365 are clamped. (query parameter)

TDQS

C2.5/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses the required `reports:manage` permission scope, but says nothing about aggregation granularity, time bucketing, or what the response contains for a reporting endpoint that has 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.

Conciseness3/5

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

It is short and front-loaded, but part of that brevity comes from boilerplate rather than substance — the raw HTTP path and "Tags: Reports" line consume space without informing tool selection, while the actual metric definition is omitted.

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 reporting tool with no annotations and no output schema, the description should explain what the volume report returns and how `days` shapes it. The permission note is the only added value; the core semantics of the metric are 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% and the single `days` parameter is fully documented in the schema, including default, bounds, and clamping behavior. The description adds nothing beyond that, so the baseline of 3 applies.

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

Purpose3/5

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

The description names the resource ("Overview Message Volume") and a generic verb ("Get"), but never explains what the metric actually measures — message counts over time, per channel, per agent? It also does nothing to distinguish itself from sibling report tools such as overview_counts or overview_charts, so an agent cannot tell from the text which report it needs.

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 when-to-use guidance, no mention of alternatives among the overview_* siblings, and no stated preconditions beyond the permission. The agent is left to infer routing purely from the tool name.

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

overview_slaC

Get Overview SLA Requires the reports:manage permission. GET /api/v1/reports/overview/sla Tags: Reports

NameRequiredDescriptionDefault
daysNoNumber of past days to include. 0 means today only. Values outside 0-365 are clamped. (query parameter)

TDQS

C2.4/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It does add real behavioral context: the `reports:manage` permission requirement and a GET endpoint that implies a safe read. It says nothing, however, about what is returned, whether the data is scoped to the caller's workspace, or how the SLA is computed.

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?

Short and front-loaded with the verb, but three of four lines are generated boilerplate (raw path and tags) that add no decision-relevant information. It is under-specified rather than padded, so length is not the problem.

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

Completeness2/5

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

With no output schema and no annotations, the description is the only source of return-value information, and it supplies none. For an analytics endpoint whose output shape an agent cannot infer, this leaves the definition materially 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?

The single `days` parameter is fully documented in the schema (default 0, clamped 0-365, query parameter), so coverage is 100%. The description adds nothing about the parameter or its effect on the returned SLA window, which is the baseline expectation when the schema already does the work.

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?

"Get Overview SLA" restates the tool name almost verbatim and never says what an SLA overview actually contains (response-time targets? compliance rates? per-agent breakdown?). An agent comparing it to siblings like overview_csat or overview_counts has nothing to distinguish it beyond the word "SLA".

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 guidance, no exclusions, and no routing to or away from the other overview_* siblings. The only implied usage is that this is a reporting endpoint, which the agent could guess 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.

overview_tag_distributionC

Get Overview Tag Distribution Requires the reports:manage permission. GET /api/v1/reports/overview/tags Tags: Reports

NameRequiredDescriptionDefault
daysNoNumber of past days to include. 0 means today only. Values outside 0-365 are clamped. (query parameter)

TDQS

C2.7/5.0
Behavior3/5

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

With no annotations supplied, the description carries the full burden. It does disclose the required permission scope and that this is a GET read against /api/v1/reports/overview/tags, which is real behavioral context the schema cannot convey. It says nothing about rate limits, response shape, or whether results are aggregated across the whole workspace.

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 short and front-loads the tool identity, but two of the four lines (the raw endpoint path and the 'Tags: Reports' label) are administrative noise for an agent, while the one sentence that would matter — what the report returns — is absent.

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 reporting tool with no output schema and no annotations, the description needs to describe the returned data and its aggregation semantics. It instead provides only permission and endpoint metadata, leaving the agent unable to predict the response.

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 optional parameter (`days`) and the schema already documents it at 100% coverage, including default, 0-365 clamping, and query-parameter placement. The description adds no extra meaning, so the baseline of 3 applies.

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

Purpose3/5

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

The description restates the name ('Get Overview Tag Distribution') and adds only the endpoint path. It signals a reporting read but never defines what 'distribution' means (tag counts? per-conversation tags? over time?), and it does nothing to separate it from the sibling overview_counts, overview_charts, or overview_csat 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 only precondition given is the `reports:manage` permission, which is genuinely useful. There is no guidance on when an agent should pick this overview report over the other overview_* siblings, and no exclusions or alternative routing.

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

paginated_search_conversationsB

Paginated Search Conversations Matches conversations whose reference number equals the query or whose contact email contains it, with filters and cursor pagination. An exact reference number match is listed first. Returns only conversations the caller can access. Requires the conversations:read permission. GET /api/v1/search/conversations Tags: Search

NameRequiredDescriptionDefault
sortNo`newest` and `oldest` sort by last message time. `started_last` and `started_first` sort by creation time. Defaults to `newest`. (query parameter)newest
queryYesSearch query (minimum 3 characters) (query parameter)
cursorNo`next_cursor` from the previous page. A cursor works only with the `sort` it was created with. (query parameter)
filtersNoJSON-encoded filter. Either an array of conditions that are AND-ed, e.g. `[{"model":"conversations","field":"status_id","operator":"equals","value":"1"}]`, or a group `{"logic":"AND","rules":[...]}` with at most one level of nested groups. Operators: `equals`, `not equals`, `greater than`, `less than`, `set`, `not set`, `in`, `between`, `contains`, `ilike`, `not contains`. Filterable fields: `conversations` (status_id, priority_id, assigned_team_id, assigned_user_id, inbox_id, last_message_at, last_interaction_at, last_interaction_sender, created_at, waiting_since, next_sla_deadline_at, snoozed_until, sla_policy_id, tags), `conversation_statuses` (id, name), `users` (email, external_user_id), `inboxes` (channel). (query parameter)
page_sizeNoNumber of results per page (defaults to 30). Values above 100 use 100. (query parameter)

TDQS

B3.3/5.0
Behavior4/5

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

With no annotations, the description carries the disclosure burden and does reasonably well: it reveals result ranking (exact reference match listed first), access scoping (only conversations the caller can access), and the required permission scope. It still says nothing about result volume limits, rate limiting, or what an empty result looks like.

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 sentence is front-loaded and dense with useful information, but the shipped text includes scaffolding that earns nothing for an agent: a repeated title line, the raw 'GET /api/v1/search/conversations' path, and a 'Tags: Search' line.

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 read-only search tool with a fully documented five-parameter schema, the essentials (access scoping, permission, ordering) are covered. With no output schema, though, it could say more about the returned shape and how next_cursor is surfaced to continue paging.

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 operators, sort semantics, cursor rules, and the filter JSON grammar are all already documented in the schema. The description only gestures at 'filters and cursor pagination' without adding meaning beyond that, 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+resource and adds real matching semantics: exact reference-number match ranked first, otherwise contact-email containment, plus filters and cursor pagination. It does not distinguish itself from siblings such as search_conversations or paginated_search_messages, so it misses the top band.

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 when-to-use / when-not-to-use guidance and no comparison to the other search tools listed. The permission note ('Requires the conversations:read permission') is a prerequisite, not guidance about which search tool to pick.

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

paginated_search_messagesA

Paginated Search Messages Matches messages whose text contains the query, with filters and cursor pagination. Activity messages are excluded. Returns only messages in conversations the caller can access. Requires the messages:read permission. GET /api/v1/search/messages Tags: Search

NameRequiredDescriptionDefault
sortNoSort by message creation time. Defaults to `newest`. (query parameter)newest
queryYesSearch query (minimum 3 characters) (query parameter)
cursorNo`next_cursor` from the previous page. A cursor works only with the `sort` it was created with. (query parameter)
filtersNoJSON-encoded filter. Either an array of conditions that are AND-ed, e.g. `[{"model":"conversations","field":"status_id","operator":"equals","value":"1"}]`, or a group `{"logic":"AND","rules":[...]}` with at most one level of nested groups. Operators: `equals`, `not equals`, `greater than`, `less than`, `set`, `not set`, `in`, `between`, `contains`, `ilike`, `not contains`. Filterable fields: `conversations` (status_id, priority_id, assigned_team_id, assigned_user_id, inbox_id, last_message_at, last_interaction_at, last_interaction_sender, created_at, waiting_since, next_sla_deadline_at, snoozed_until, sla_policy_id, tags), `conversation_statuses` (id, name), `users` (email, external_user_id), `inboxes` (channel). Messages can also be filtered on `conversation_messages` (created_at). (query parameter)
page_sizeNoNumber of results per page (defaults to 30). Values above 100 use 100. (query parameter)

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden and does disclose meaningful behavior: activity messages are excluded, only conversations the caller can access are searched, and the `messages:read` permission is required. It still omits what a result contains, how cursors are obtained or expire beyond the schema note, and whether queries are case-insensitive or partial-match.

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 matching behavior, then scope exclusions, then auth, then endpoint and tags. Mostly efficient, though repeating the title as the first line and appending 'Tags: Search' and the raw route are of limited use to an agent.

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 read tool with no output schema, the description covers the essentials an agent needs: search semantics on message text, activity exclusion, access scoping, and required permission. Only the shape of returned items is left unexplained.

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 five parameters are already documented in detail, including the sort enum, the filter DSL, and cursor/sort coupling. The description adds only the generic phrase 'with filters and cursor pagination', which does not extend parameter 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: 'Matches messages whose text contains the query, with filters and cursor pagination.' The mention of cursor pagination hints at how it differs from the plain search_messages sibling, but the description never names or contrasts with that 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?

Usage is only implied: the word 'paginated' signals this is for paging through large result sets, and the filters parameter is pointed to, but there is no explicit 'use this instead of search_messages when...' guidance or stated preconditions beyond permission.

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

remove_team_assigneeB

Remove Team Assignee Requires the conversations:update_team_assignee permission. PUT /api/v1/conversations/{uuid}/assignee/team/remove Tags: Conversations

NameRequiredDescriptionDefault
uuidYes(path parameter)

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does add real value by naming the required `conversations:update_team_assignee` permission and the exact endpoint. However, it says nothing about mutation behavior: whether removal is idempotent, what happens if the team is not assigned, or whether removing the last team assignee affects routing.

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 text is short and front-loads the action, but the title line merely restates the tool name and the 'Tags: Conversations' line contributes little for an agent. The permission requirement is the most valuable sentence and is placed well.

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 single-parameter mutation with no annotations and no output schema, the description covers permission and endpoint but leaves failure modes and post-removal state unaddressed. It is minimally adequate rather than complete.

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

Parameters3/5

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

Only one parameter exists and the schema documents it fully as a path parameter with 100% coverage. The endpoint path clarifies that `uuid` is a conversation UUID, which adds modest meaning beyond the bare schema, but no format or sourcing guidance is provided.

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 heading 'Remove Team Assignee' plus the endpoint PUT /api/v1/conversations/{uuid}/assignee/team/remove makes it clear this strips a team assignment from a specific conversation. The verb and resource are specific, though the description never explicitly contrasts this with remove_user_assignee or update_team_assignee.

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 call this versus remove_user_assignee or update_team_assignee. The only contextual constraint given is the required permission scope, which is a prerequisite rather than usage direction.

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

remove_user_assigneeC

Remove User Assignee Requires the conversations:update_user_assignee permission. PUT /api/v1/conversations/{uuid}/assignee/user/remove Tags: Conversations

NameRequiredDescriptionDefault
uuidYes(path parameter)

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden. It does add real value by naming the required permission scope (conversations:update_user_assignee) and the mutation verb PUT, but it says nothing about idempotency, what happens if no user assignee exists, whether other assignments are affected, or error behavior.

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 description is short and front-loaded, but the raw HTTP verb+route line and the "Tags: Conversations" trailer are reference-style filler rather than guidance. Nothing is wasted to the point of harm, but part of the text does not help an agent decide or invoke.

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 one-parameter mutation with no annotations and no output schema, the definition covers the essentials (what it does, the auth scope, the endpoint). It remains thin on side effects, failure modes, and response expectations, which matter for a destructive assignee change.

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?

There is a single parameter with 100% schema description coverage, so the baseline is 4. The route text confirms the uuid identifies the conversation path resource, which is a small but genuine addition beyond the schema's bare "(path parameter)" label.

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

Purpose3/5

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

The title restates the tool name ("Remove User Assignee"), but the included route PUT /api/v1/conversations/{uuid}/assignee/user/remove clarifies the verb and resource: it removes the user-level assignee on a specific conversation. It does not explicitly contrast with remove_team_assignee, which is the nearest sibling, so the agent must infer the distinction from the word "user".

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 when-to-use guidance and no mention of when not to use it. The sibling remove_team_assignee and update_user_assignee are never referenced, so the agent gets no help choosing among the assignee-mutation tools.

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

retry_messageA

Retry Message Retries sending a failed message in the specified conversation. Only failed outgoing messages sent by the current agent can be retried. Requires the messages:write permission. PUT /api/v1/conversations/{cuuid}/messages/{uuid}/retry Tags: Conversations

NameRequiredDescriptionDefault
uuidYes(path parameter)
cuuidYes(path parameter)

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does well: it discloses the required `messages:write` permission, the message-state precondition (failed), the ownership precondition (sent by current agent), and the implicit side effect of sending a message. It omits what happens if the retry itself fails, whether duplicate sends are possible, and any rate-limit 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?

The behavioral constraints are front-loaded in the first two sentences with no filler. The trailing endpoint line and 'Tags: Conversations' are mildly redundant with structured metadata but harmless.

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 action tool with no output schema, it covers permissions, preconditions, and endpoint semantics adequately. The notable gap is return behavior: an agent cannot tell whether the response returns the new message object, a status, or just success.

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

Parameters3/5

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

Schema description coverage is 100%, so both path parameters are documented structurally and the baseline is 3. The PUT path template reinforces which identifier is the conversation and which is the message, but the description adds no further format or example 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?

The description opens with a specific verb+resource ('Retries sending a failed message') and immediately narrows scope with 'in the specified conversation.' It does not name or contrast with a sibling such as send_message, so it stops short of full sibling differentiation.

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

Usage Guidelines4/5

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

It gives a clear eligibility rule: only failed outgoing messages sent by the current agent can be retried. That implicitly excludes new sends and inbound messages, but it never explicitly points to send_message for creating new messages or says what to do for non-failed messages.

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

revoke_api_keyB

Revoke A P I Key Requires the users:manage permission. DELETE /api/v1/agents/{id}/api-key Tags: Agents

NameRequiredDescriptionDefault
idYes(path parameter)

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description does disclose a real behavioral requirement — the `users:manage` permission — and the DELETE verb signals a destructive, non-read operation. It stops short of saying whether revocation is immediate, irreversible, or idempotent, and whether existing sessions using the key break.

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 action and permission requirement are front-loaded in a few short lines with no filler. The trailing 'DELETE /api/v1/...' and 'Tags: Agents' lines are routing metadata rather than agent-useful content, but they cost 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?

For a one-parameter tool with no output schema, the definition covers the essential prerequisite and target. Because it is an unannotated destructive operation, it should still say what a successful or failed revocation looks like, and it does not.

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?

Only one parameter exists and schema coverage is 100%, so the schema already carries the meaning. The description adds nothing about `id` beyond what the schema's '(path parameter)' note implies, which is the expected baseline when the schema is complete.

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 ('Revoke A P I Key') and pins the target via the DELETE endpoint on /agents/{id}/api-key, so an agent knows exactly what is being revoked and for which agent. It does not explicitly contrast with the sibling generate_api_key, leaving the create/revoke pairing 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?

The only guidance is the prerequisite permission `users:manage`; there is no statement of when to revoke versus regenerate (generate_api_key) or what happens if no key exists. An agent must infer the use case entirely from the tool name.

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

search_contactsB

Search Contacts Matches contacts whose email or phone number contains the query. Requires the contacts:read permission. GET /api/v1/contacts/search Tags: Search

NameRequiredDescriptionDefault
limitNoMaximum number of results. Values outside 1 to 15 use 15. (query parameter)
queryYesSearch query (minimum 3 characters) (query parameter)

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations supplied, the description carries the full burden. It usefully discloses the required `contacts:read` permission, the fields searched (email and phone), and the substring-match behavior. It says nothing about result ordering, whether the search is case-sensitive, or rate limits, which leaves meaningful behavioral gaps for an unannotated 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 matching behavior and permission requirement are front-loaded in the first two lines with no filler. The trailing raw endpoint (`GET /api/v1/contacts/search`) and `Tags: Search` are developer-doc residue that does not help an agent decide or invoke, but they are brief.

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 no annotations, so the description is the only source of shape information, and it never says what a result contains or how results are ordered or capped beyond `limit`. For a simple two-parameter search it is close to sufficient, but the return side is left entirely 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 description coverage is 100%, so the schema already documents both `query` (min 3 chars) and `limit` (1-15, default 15). The description adds only the semantics of what the query is matched against, which is genuine but modest value; nothing is added about the limit or its clamping behavior.

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 Contacts") and adds the matching rule: contacts whose email or phone number contains the query. That is more precise than the name alone. It does not distinguish the tool from the sibling get_contacts, so an agent must infer the difference.

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 substring-matching rule implies when this tool is appropriate (partial email/phone lookups rather than full listing), and the permission requirement signals a precondition. However, there is no explicit when-to-use vs. get_contacts guidance and no note on how to handle multiple results or pagination.

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

search_conversationsA

Search Conversations Matches conversations whose reference number equals the query or whose contact email contains it. Returns only conversations the caller can access. Use GET /api/v1/search/conversations for filters and pagination. Requires the conversations:read permission. GET /api/v1/conversations/search Tags: Search

NameRequiredDescriptionDefault
limitNoMaximum number of results. Values outside 1 to 1000 use 1000. (query parameter)
queryYesSearch query (minimum 3 characters) (query parameter)

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose meaningful behavior: results are scoped to conversations the caller can access, and the `conversations:read` permission is required. It does not describe the shape of returned records or flag that the two match modes behave differently (exact vs. substring), which would matter for result interpretation.

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 sentences are tight and front-loaded, but the block opens by restating the tool name as a heading and then appends raw API paths and a 'Tags: Search' line, listing the endpoint twice in two different forms. That transport-level noise does not help an agent select or invoke the tool.

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

Completeness4/5

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

For a two-parameter search tool with no output schema, the definition covers matching semantics, access scoping, permission requirement, and where to go for filters and pagination — enough to call it correctly. Missing is any hint about result volume defaults beyond the schema and what a returned conversation contains.

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 a 3 is the floor, but the description genuinely adds meaning the schema lacks: it explains what `query` is matched against (reference number or contact email) and how each match type behaves. The `limit` parameter is left entirely to the schema, including its silent clamp to 1000.

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 and goes further than the title by stating the match rule: reference-number equality or contact-email substring. It never names the closest sibling (paginated_search_conversations) directly, instead pointing at the raw REST path `GET /api/v1/search/conversations`, so an agent must infer that this is the unpaginated variant.

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 match semantics (use when you have a reference number or a contact email fragment) and the `conversations:read` prerequisite is stated. However, there is no explicit when-not guidance and no named tool alternative for filtered or paginated searching — the redirect is to an HTTP endpoint rather than a sibling tool, which is ambiguous inside an MCP context.

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

search_macrosA

Search Macros The 30 most used macros the caller may apply (visibility all, own, or one of the caller's teams), without their message content, optionally filtered by name and by where they are offered. Any authenticated agent. GET /api/v1/macros/search Tags: Macros

NameRequiredDescriptionDefault
qNoCase-insensitive substring of the macro name (query parameter)
viewNoKeep only the macros offered in this context. Any other value is a 400 (query parameter)

TDQS

A3.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the hard cap of 30 results, that message content is excluded, the visibility scoping (all/own/teams), the auth requirement, and that an invalid view value yields a 400. It doesn't describe the response shape or sorting beyond "most used," which keeps it out of the top band.

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 scope statement is front-loaded and tight, but the leading name restatement, the raw endpoint path, and the "Tags: Macros" line are boilerplate that adds no decision-relevant information. Roughly half the text 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 two-parameter read tool with no output schema, the definition covers limits, auth, and scoping adequately, but it never says what fields each result contains beyond the absence of message content. An agent can call it correctly but cannot anticipate the payload it will have to parse.

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

Parameters3/5

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

Schema coverage is 100%, so the input schema already documents both q and view including the enum and the 400 behavior. The description's "filtered by name and by where they are offered" merely echoes the schema at a higher level, 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.

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 ("Search Macros") and pins down scope: the 30 most used macros the caller may apply across all/own/team visibility. It stops short of distinguishing itself from the sibling get_macros, so an agent must infer the difference between searching and fetching macros.

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 only implied: the caller learns this is for finding applicable macros and that "Any authenticated agent" may call it, but there is no explicit when-to-use versus get_macros/get_macros_compact and no when-not guidance. The auth note is a precondition, not routing guidance.

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

search_messagesA

Search Messages Matches messages whose text contains the query. Activity messages are excluded. Returns only messages in conversations the caller can access. Use GET /api/v1/search/messages for filters and pagination. Requires the messages:read permission. GET /api/v1/messages/search Tags: Search

NameRequiredDescriptionDefault
limitNoMaximum number of results. Values outside 1 to 30 use 30. (query parameter)
queryYesSearch query (minimum 3 characters) (query parameter)

TDQS

A3.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does useful work: substring-match semantics (not full-text relevance), exclusion of activity messages, scoping to conversations the caller can access, and an explicit `messages:read` permission requirement. It omits result ordering and whether matching is case-sensitive, but the safety and scope profile is 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?

The substantive sentences are front-loaded and tight, but the block is padded with two conflicting raw endpoint strings ('GET /api/v1/search/messages' and 'GET /api/v1/messages/search') plus a 'Tags: Search' artifact. That redundancy muddies rather than informs.

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 two-parameter search with no output schema, the access-scope and permission statements are the essentials and they are present. What is missing is any hint of return ordering or result shape, so an agent cannot predict what it will get back beyond 'messages'.

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 `query` (minimum 3 chars) and `limit` (1–30, default 30). The description adds that matching is containment-based in message text, which is genuinely useful meaning beyond the schema, but says nothing about `limit` behavior and instead defers 'pagination' to an external endpoint that is not a callable parameter here.

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 Messages') and clarifies the matching semantics: messages whose text contains the query, activity messages excluded. It does not distinguish itself from the sibling 'paginated_search_messages', so the agent cannot tell from this text alone which of the two to pick.

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

Usage Guidelines3/5

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

Implies usage ('Matches messages whose text contains the query') and points to 'GET /api/v1/search/messages' for filters and pagination, which hints at a heavier-weight alternative. However, it points to an API endpoint rather than a sibling tool name, so the routing guidance is not actionable in tool-selection terms.

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

send_messageB

Send Message Replies require the messages:write permission. Private notes (private: true) require messages:write_private. Messages with sender_type: contact also require messages:write_as_contact. POST /api/v1/conversations/{cuuid}/messages Tags: Conversations

NameRequiredDescriptionDefault
ccNo(body) CC recipients
toNo(body) Email recipients
bccNo(body) BCC recipients
cuuidYes(path parameter)
echo_idNo(body) Client-generated identifier echoed back to deduplicate the message on the sender's side
messageNo(body) Message content
privateNo(body) Whether message is private (internal note)
mentionsNo(body) Agents or teams mentioned in a private note.
send_fromNo(body) Email inbox only. Address to send the reply from: the inbox address or one of its verified aliases (`inbox_aliases` on the conversation). Defaults to the address last used in the conversation.
source_idNo(body) Contact messages only. RFC 5322 Message-ID of the original inbound email. It is stored on the created message so replies thread on it.
attachmentsNo(body) IDs of media uploaded by the caller with `POST /api/v1/media`. Media uploaded by another user is rejected with 403.
sender_typeYes(body) Specifies whether the message is sent by an agent or a contact.

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden and does supply real behavioral context: which permission each mode requires and that contact-sender messages need an extra scope. It does not disclose side effects (whether an email is actually delivered, notification behavior), rate limits, or error modes, so it is helpful but incomplete for a write operation.

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 permission constraints are front-loaded after a one-line title, and the endpoint line adds orienting detail. The repeated 'Send Message' header and the low-value 'Tags: Conversations' line are minor waste but nothing obscures the actionable content.

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 12-parameter mutation tool with no annotations and no output schema, the description covers auth requirements but not what is returned, whether the send is idempotent via echo_id, or how threading via source_id behaves at the tool level. Adequate but leaves meaningful gaps an agent would want filled.

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 a 3 is the baseline, but the description goes further by tying `private: true` and `sender_type: contact` to distinct permission requirements — meaning the agent could not infer from the schema alone. It supplies no extra clarification for `mentions`, `echo_id`, or `source_id`, which keeps it from a 5.

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 clear verb+resource ('Send Message') and pins it down with the concrete endpoint POST /api/v1/conversations/{cuuid}/messages, so an agent knows a message is created inside a specific conversation. It is distinguishable from siblings like get_message or delete_message by the POST/create framing, though it never explicitly contrasts with them.

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 explicit when-to-use vs when-not-to-use guidance and no naming of alternatives. The permission block (messages:write, messages:write_private, messages:write_as_contact) tells the agent about preconditions for variants, but that is prerequisite info rather than routing guidance between tools such as retry_message or apply_macro.

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

serve_mediaA

Serve Media Public media is served without authentication. Private media requires authentication with access to the linked record, or a valid signed URL. Private media not yet attached to a record is served only to the user who uploaded it. GET /uploads/{uuid} Tags: Media

NameRequiredDescriptionDefault
expNoExpiry unix timestamp of a signed media URL. (query parameter)
sigNoSignature of a signed media URL. Used together with `exp`. (query parameter)
uuidYesMedia UUID. Prefix with `thumb_` to get an image thumbnail. (path parameter)
downloadNoPass `1` to force a download instead of inline display. (query parameter)

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations supplied, the description carries the full behavioral burden and does so well: it discloses the authentication/authorization model, the signed-URL path, and the special case of orphaned private media. It is silent on response characteristics (binary vs redirect, content type, caching), which keeps it out of the top band.

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?

Four short sentences, no filler, and the critical access rules are stated before the endpoint notation. The opening 'Serve Media' duplicate of the tool name is wasted space, and the endpoint string would be better placed at the top than the bottom.

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 media-serving call with full schema coverage and no output schema, the description covers the one thing an agent genuinely needs to know before calling: whether it will be authorized. Only minor omissions (response form, redirect behavior) 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 description coverage is 100%, so uuid, exp, sig and download are already fully documented in the schema, and the description adds nothing further about them. Baseline 3 applies, though the auth paragraph indirectly motivates the exp/sig pair.

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 'GET /uploads/{uuid}' line plus the auth paragraph make clear this fetches/returns media for a given UUID, which is concrete enough for an agent to select it. The leading 'Serve Media' heading is essentially a restatement of the name, and no sibling (e.g. media_upload, download_conversation_transcript) is mentioned for contrast, so it stops short of a 5.

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

Usage Guidelines3/5

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

The description does spell out the access conditions under which the call succeeds or fails (public media unauthenticated, private media needing record access or a signed URL, unattached private media restricted to the uploader), which is genuinely useful when-to-use context. However, it gives no explicit routing guidance against alternatives such as media_upload or the transcript download tool.

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

toggle_automation_ruleA

Toggle Automation Rule Flips the enabled flag of a rule (enabled becomes disabled and the reverse) and returns the updated rule. There is no body and no way to set the state explicitly, so read the rule first if the current state matters. Requires the automations:manage permission. PUT /api/v1/automations/rules/{id}/toggle Tags: Automations

NameRequiredDescriptionDefault
idYesAutomation rule ID (path parameter)

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the mutation is a non-idempotent flip, that no body is accepted, that the updated rule is returned, and that the automations:manage permission is required. It omits error behavior for an unknown id and any concurrency/race caveats, which matter for a toggle.

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 behavior is front-loaded in the first two sentences with zero waste, and the permission requirement is placed last where it belongs. The trailing 'PUT /api/v1/...' and 'Tags: Automations' lines are boilerplate that add little for an agent.

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 with no output schema, the description covers the mutation semantics, the returned object, and the auth requirement, which is enough to call it correctly. The main remaining gap is failure behavior when the id does not resolve to a rule.

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

Parameters3/5

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

There is a single parameter at 100% schema description coverage, so the schema already documents the id as an integer path parameter. The description adds no format or constraint detail beyond that, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('flips the enabled flag of a rule') plus the return value, and implicitly separates itself from update_automation_rule by noting there is 'no way to set the state explicitly.' An agent can tell this apart from the generic update 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?

Gives a concrete usage condition: read the rule first if the current state matters, which points at get_automation_rule. It does not explicitly name update_automation_rule as the alternative when an explicit target state is wanted, leaving that routing to inference.

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

update_agentB

Update Agent Changing the password or disabling the agent signs them out of all sessions. Requires the users:manage permission. PUT /api/v1/agents/{id} Tags: Agents

NameRequiredDescriptionDefault
idYes(path parameter)
emailYes(body) Agent's email address
rolesYes(body) Names of the roles assigned to the agent
teamsNo(body) Names of the teams to assign the agent to. On update, the agent is removed from teams not listed.
enabledNo(body) Whether agent is enabled. Used only on update.
last_nameNo(body) Agent's last name
first_nameYes(body) Agent's first name
new_passwordNo(body) Agent's new password. Optional, used only on update.
send_welcome_emailNo(body) Only used during agent creation to send welcome email
availability_statusNo(body) Agent's availability status. Used only on update.

TDQS

B3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it discloses two real behavioral traits: a `users:manage` permission requirement and the session-invalidation side effect of a password change or disable. It stops short of saying that this is a full PUT replacement, so unspecified fields may be cleared and teams omitted are dropped — the schema hints at that but the description does not confirm it.

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

Conciseness3/5

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

The session-invalidation warning is front-loaded and useful, but the text is padded with a redundant title line, a raw endpoint line, and a 'Tags: Agents' line that add no decision-relevant information for an agent.

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 10-parameter mutation with no output schema and no annotations, the description covers authentication and one side effect reasonably well. It leaves out the replace-vs-merge update semantics, the consequences of omitting roles or teams, and what the tool returns, which are the main risks with this 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?

Schema description coverage is 100%, so the schema already documents all ten parameters, including the create-only and update-only caveats. The description adds no parameter-level meaning beyond casually mentioning the password field, so it earns only the baseline.

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

Purpose3/5

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

The description states the verb and resource and pins the endpoint (PUT /api/v1/agents/{id}), which is concrete. However, it does not distinguish this tool from the nearby update_agent_availability sibling that plainly overlaps with the availability_status parameter listed here, so an agent cannot rule out alternatives from the 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 Guidelines2/5

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

There is no when-to-use guidance, no statement of prerequisites beyond the permission name, and no pointer to update_agent_availability or update_status for narrower changes. Usage has to be inferred entirely from the schema.

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

update_agent_availabilityC

Update Current Agent Availability PUT /api/v1/agents/me/availability Tags: Agents

NameRequiredDescriptionDefault
sourceNo(body) Origin of the status change. `idle` marks an automatic idle-detection change, which never overwrites the `away_manual` or `away_and_reassigning` states. Any other value is treated as a manual change.
statusYes(body) Availability status

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden, and it discloses nothing: not that this is a mutation, not whether it requires authentication as the current agent, and not the significant side effect implied by 'away_and_reassigning'. The only behavioral nuance in the whole definition (idle changes never overwriting away_manual/away_and_reassigning) lives in the schema, not the description.

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 short and front-loads the purpose, but a large share of the text is low-value noise (the raw HTTP path and 'Tags: Agents') rather than information an agent can act on. Brevity here comes from omission rather than efficiency.

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 zero annotations and no output schema, the description should explain effects, preconditions, and the meaning of the destructive-sounding 'away_and_reassigning' state. None of that is present, leaving an agent unable to predict what calling it does beyond flipping a field.

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 enums documented in detail, including the non-obvious interaction of 'source' with the away states. The description adds no parameter meaning of its own, so the baseline 3 applies.

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

Purpose4/5

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

The description gives a specific verb and resource ('Update Current Agent Availability') plus the endpoint PUT /api/v1/agents/me/availability, so it's clear this sets the calling agent's own availability rather than another agent's. It does not distinguish itself from the sibling update_status, leaving ambiguity about which tool to pick for status changes.

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

Usage Guidelines2/5

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

There is no when-to-use guidance at all — no mention of when to prefer this over update_status or update_agent, and no note that the 'source' field should be omitted for manual changes. The only usage-adjacent content is an HTTP path and a tag label.

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

update_automation_ruleA

Update Automation Rule Replaces a rule: name, description, type, events, enabled and rules are all overwritten with the body, nothing is merged. Send enabled explicitly: leaving it out stores false and disables the rule. Read the rule first (get_automation_rule) and resend every field. The server does not validate the content of rules. Requires the automations:manage permission. PUT /api/v1/automations/rules/{id} Tags: Automations

NameRequiredDescriptionDefault
idYesAutomation rule ID (path parameter)
nameYes(body)
typeYes(body) new_conversation: on every new conversation. conversation_update: on the listed events. time_trigger: periodic, on the hours_since_* conditions
rulesYes(body) A JSON array of rule blocks, not a string
eventsNo(body) Only for conversation_update; leave empty for the other types
enabledNo(body) Only read by update_automation_rule, which stores it (false when omitted). Ignored on create: a created rule is always enabled
descriptionNo(body)

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so well: it discloses destructive replace-all semantics, the footgun that omitting `enabled` stores false and disables the rule, that the server performs no validation on `rules`, the required `automations:manage` permission, and the HTTP verb/path. These are exactly the traits an agent needs before mutating an automation.

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?

Dense and front-loaded: replacement semantics and the disabled-on-omission warning come before the read-first advice and permissions. The repeated title line 'Update Automation Rule' is mildly redundant, and the tag/endpoint lines are conventional but not strictly necessary.

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 7-parameter mutation tool with no output schema and no annotations, the description covers everything critical: replacement behavior, permission requirements, the silent-disable trap, the lack of rules validation, and the prescribed read-then-resend workflow. Nothing an agent needs to call it safely is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description earns more by adding cross-parameter meaning the schema does not convey on its own: every field must be resent, `enabled` must be sent explicitly, and `events` is only meaningful for conversation_update. It stops short of explaining the type-dependent relationships in detail.

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 and immediately clarifies that it is a full replacement rather than a partial merge ('name, description, type, events, enabled and rules are all overwritten with the body, nothing is merged'). This makes it distinguishable from create_automation_rule and toggle_automation_rule in intent, though siblings are not named explicitly.

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/workflow: 'Read the rule first (`get_automation_rule`) and resend every field.' That names an alternative tool and the condition that selects it. It does not explicitly say when to prefer toggle_automation_rule over this tool for enabling/disabling, 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.

update_contactC

Update Contact Requires the contacts:write permission. PUT /api/v1/contacts/{id} Tags: Contacts

NameRequiredDescriptionDefault
idYes(path parameter)
emailNo(body) Contact's email address. Required when `phone_number` is empty. Send an empty value or the string `null` to clear it.
filesNo(body, file) New avatar image file to upload (max 10MB) — pass a file path inside the directory set by LIBREDESK_MCP_UPLOAD_DIR (uploads are refused while it is unset); the server will upload its contents.
countryNo(body) Contact's country as an ISO 3166-1 alpha-2 code. Send an empty value or the string `null` to clear it.
last_nameNo(body) Contact's last name
avatar_urlNo(body) URL of the contact's avatar image. Send an empty value or the string `null` to remove the avatar, or the existing value to keep it.
first_nameYes(body) Contact's first name
phone_numberNo(body) Contact's phone number. Required when `email` is empty. Send an empty value or the string `null` to clear it.
phone_number_country_codeNo(body) ISO country code. Send an empty value or the string `null` to clear it.

TDQS

C2.3/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full disclosure burden, yet it only states the required permission scope and that the call is a PUT to /api/v1/contacts/{id}. It never says what happens to fields omitted from the body (PUT semantics suggest replacement, but that is left to inference), whether the change is reversible, or what a failure looks like. The permission scope is the one genuinely useful behavioral fact.

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?

Very short and front-loaded, with no filler prose, but it is closer to a raw endpoint dump than a structured definition; the "Tags: Contacts" line contributes no decision-relevant information while the space that could have explained update semantics is unused.

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 9-parameter mutation tool with no annotations and no output schema, the definition is thin: it says nothing about partial-update behavior, side effects on related contact data, or the shape of a successful response. The permission and endpoint lines are the minimum, not enough for an agent to call this 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% and the schema already documents each body field, null-clearing behavior, and the email/phone mutual requirement, so no compensation is needed here. The description adds nothing about any of the 9 parameters, which is acceptable at full schema coverage but earns only the baseline.

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?

"Update Contact" restates the tool name and title almost verbatim; the only additional content is the permission scope, the raw HTTP verb/path, and a "Tags: Contacts" line. Nothing states what an update covers (which fields, whether it is a partial or full replacement) or how it differs from the nearby update_contact_custom_attributes.

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 instead of create_contact, update_contact_custom_attributes, or other contact mutations. The `contacts:write` permission line is a prerequisite, not a when-to-use signal, and no exclusions or alternatives are named.

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

update_contact_custom_attributesC

Update Contact Custom Attributes Updates custom attributes of the contact on the conversation. Returns 500 when the request body is not valid JSON. PUT /api/v1/conversations/{uuid}/contacts/custom-attributes Tags: Contacts

NameRequiredDescriptionDefault
bodyYesRequest body
uuidYes(path parameter)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It states the mutation and one error case (500 on invalid JSON), but omits permissions, merge/replacement semantics, validation rules, reversibility, and success response behavior, which are important for an arbitrary custom-attribute update.

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 short and front-loaded, and it surfaces the useful invalid-JSON error behavior. There is minor redundancy from the repeated title, endpoint, and tags metadata, but no significant bloat.

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 nested body object and no annotations or output schema, the description is incomplete. It does not clarify merge behavior, response shape, permissions, or the effect on unspecified custom attributes, leaving important invocation details unresolved.

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 uuid path parameter and body object are already documented in the schema. The description only references the uuid path and does not add meaning about the body object, such as whether attributes are merged or replaced.

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 mutation ('Updates custom attributes') and scopes it to the contact on a conversation, distinguishing it from conversation-level attribute updates. It does not explicitly name or contrast with sibling tools such as update_conversation_custom_attributes.

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 when-to-use guidance, prerequisites, or comparison with alternatives like get_custom_attributes or update_conversation_custom_attributes. The endpoint and 'Tags: Contacts' imply API context but do not help an agent select the tool.

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

update_conversation_assignee_last_seenA

Update Conversation Assignee Last Seen Marks the conversation as read by the caller, up to the latest message or up to message_uuid. The read position never moves backwards. Requires the conversations:read permission. PUT /api/v1/conversations/{uuid}/last-seen Tags: Conversations

NameRequiredDescriptionDefault
uuidYes(path parameter)
message_uuidNo(body) Mark the conversation as read up to this message

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the monotonic constraint ('never moves backwards'), the required permission, and the HTTP endpoint. It omits what the response contains and whether the read state is visible to others, which keeps it from a 5.

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

Conciseness4/5

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

The key behavior and constraint are front-loaded in two tight sentences, but the redundant heading echoing the tool name and the 'PUT /api/v1/...' plus 'Tags: Conversations' lines add little for an agent.

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

Completeness4/5

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

For a two-parameter mutation with no output schema and no annotations, the description covers effect, directionality constraint, permission, and default parameter behavior. Adding expected return or failure modes would make it 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 100%, so baseline is 3, but the description adds real meaning beyond the schema by explaining that omitting message_uuid marks read up to the latest message. That defines default behavior the schema does not.

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 effect: marks the conversation as read by the caller, which resolves the ambiguity of the awkward tool name involving 'assignee last seen'. It does not explicitly contrast with the mark_conversation_as_unread sibling, so it falls short of a 5.

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

Usage Guidelines3/5

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

Usage is implied by stating the effect and the required 'conversations:read' permission, but there is no explicit when-to-use versus when-not guidance and no mention of the inverse sibling (mark_conversation_as_unread).

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

update_conversation_custom_attributesC

Update Conversation Custom Attributes Returns 500 when the request body is not valid JSON. PUT /api/v1/conversations/{uuid}/custom-attributes Tags: Conversations

NameRequiredDescriptionDefault
bodyYesRequest body
uuidYes(path parameter)

TDQS

C2.5/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, and it discloses only one trait: a 500 response when the body is not valid JSON. Critical behavior for a custom-attribute mutation is absent, notably whether supplied keys merge with or replace existing attributes, what permissions are needed, and whether removing keys is possible.

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 text is short and front-loaded, and the 500 error note is a legitimate line. But the body is largely scaffolding — a restated title, a raw endpoint, and a 'Tags: Conversations' line that adds nothing an agent can act on.

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 nested free-form body, no annotations, and no output schema, the definition leaves major questions unanswered: merge versus replace semantics, permission requirements, and what a successful response looks like. The one error note does not compensate for those 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 both the 'uuid' path parameter and the free-form 'body' object are structurally documented, which sets the baseline at 3. The description adds no semantics beyond the schema — in particular it says nothing about how body keys are interpreted against existing attributes, which is the one thing a caller most needs.

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

Purpose3/5

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

The line 'Update Conversation Custom Attributes' plus 'PUT /api/v1/conversations/{uuid}/custom-attributes' does identify a concrete verb (update) and resource (a conversation's custom attributes), so the basic purpose is inferable. However, the sentence is essentially the tool name restated, and it offers no differentiation from the sibling 'update_contact_custom_attributes' beyond the resource noun.

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 when-to-use guidance, no stated prerequisites, and no mention of when a caller should prefer this over update_contact_custom_attributes or a draft-upsert tool. The only usage-adjacent statement is a 500 error condition, which is about failure behavior rather than tool selection.

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

update_conversation_priorityC

Update Conversation Priority Requires the conversations:update_priority permission. PUT /api/v1/conversations/{uuid}/priority Tags: Conversations

NameRequiredDescriptionDefault
uuidYes(path parameter)
priorityYes(body) Priority level

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations present, the description carries the full burden. It does disclose a real behavioral requirement (the `conversations:update_priority` permission) and the mutation method (PUT), but says nothing about idempotency, whether the change is visible immediately, what happens with invalid values, or what the response contains.

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?

Very short and front-loaded with the operation name, then permission and endpoint. The 'Tags: Conversations' line is filler, but otherwise there is no wasted prose.

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 two-parameter mutation with full schema coverage, the essentials (path, permission, allowed values via schema) are present. Missing is any statement of what the call returns or what changes for the user; the permission note is the only added value.

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

Parameters3/5

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

Schema description coverage is 100%; both uuid and priority are documented in the schema, and priority's enum is fully enumerated. The description adds no meaning beyond what the schema already states, so the baseline 3 applies.

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

Purpose3/5

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

The text restates the tool name ("Update Conversation Priority") and adds the endpoint PUT /api/v1/conversations/{uuid}/priority, which confirms the resource scope. It never explains in prose what 'priority' means for a conversation or how it distinguishes the tool from siblings like update_conversation_status or update_conversation_assignee_last_seen, so purpose is only implied.

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 statement of when to use this tool versus alternatives, no preconditions beyond the permission string, and no note on side effects. The only implicit guidance is the HTTP endpoint, which the agent must interpret itself.

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

update_conversation_statusC

Update Conversation Status Requires the conversations:update_status permission. PUT /api/v1/conversations/{uuid}/status Tags: Conversations

NameRequiredDescriptionDefault
uuidYes(path parameter)
statusYes(body) Status value e.g. Open, Resolved
snoozed_untilNo(body) Snooze duration (e.g. 1h, 3h, 100h). Required if status is Snoozed.

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations present, the description carries the full burden, and it does disclose two genuinely useful facts: the required `conversations:update_status` permission scope and the exact endpoint being mutated. It says nothing about reversibility, side effects on the conversation (e.g., triggering automations or SLA timers), or error behavior when status transitions are invalid, which are the traits an agent most needs for a write operation.

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 short and front-loaded, with the permission requirement and route surfaced immediately. The 'Tags: Conversations' line is metadata noise that does not help an agent decide or invoke, but the body has 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 three-parameter mutation tool with no annotations and no output schema, the permission and endpoint are the right essentials, and the schema covers parameter details. What is missing is the mutation-specific context: what changing status affects and what an agent should expect on success or rejection.

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 the conditional note that snoozed_until is required when status is Snoozed, so the baseline of 3 applies. The description adds no syntax, allowed values, or interaction detail beyond what the schema already states.

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

Purpose3/5

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

The description restates the tool name plus the HTTP route (PUT /api/v1/conversations/{uuid}/status), which confirms this mutates a conversation's status field. However, it offers no scope or distinguishing detail versus near-named siblings such as update_status or update_conversation_priority, so an agent still has to infer which of them applies.

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 when-to-use guidance, no exclusions, and no mention of prerequisites beyond the permission string. Nothing tells the agent when to pick this over update_conversation_priority or update_status, nor when a snooze is appropriate versus Open/Resolved.

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

update_conversationtagsB

Update conversation tags Requires the conversations:update_tags permission. POST /api/v1/conversations/{uuid}/tags Tags: Conversations

NameRequiredDescriptionDefault
tagsNo(body)
uuidYes(path parameter)
actionNo(body) How to apply the tags. Defaults to 'set_tags' (replaces all tags) when omitted.

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, and it only discloses the required permission scope. The consequential behavior — that the default 'set_tags' action replaces all existing tags — appears only in the schema, not in the description, and nothing is said about what is returned or whether the change is reversible.

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?

Sized appropriately: the purpose is front-loaded, followed by permission, endpoint, and category label. The final "Tags: Conversations" line and the title-like first line add little, but there is no bloat.

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 three-parameter mutation tool with no annotations and no output schema, the definition covers auth scope and target resource but omits the most decision-relevant fact (replacement vs additive semantics of the default action) and says nothing about the result. 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 description coverage is 100%, so all three parameters (uuid, tags, action with its enum and default) are already documented in structured form, and the description adds no syntax, format, or interaction detail. Baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb+resource ("Update conversation tags") and reinforces it with the concrete endpoint POST /api/v1/conversations/{uuid}/tags, so the agent knows exactly what is being mutated. It does not contrast with siblings such as update_tag (which presumably edits a tag entity rather than a conversation's tag set), leaving mild ambiguity about which to pick.

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 only guidance is the prerequisite permission (`conversations:update_tags`) and the HTTP route, which implies the tool applies to an existing conversation identified by uuid. There is no statement of when to use this versus update_tag or the custom-attributes siblings, and no exclusions or preconditions beyond the permission.

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

update_shared_viewA

Update Shared View Replaces a shared view: name, filters, visibility and team_id are all overwritten with the body, nothing is merged, so read the view first (get_shared_view) and resend every field. A personal view answers 404. Requires the shared_views:manage permission. PUT /api/v1/shared-views/{id} Tags: Views

NameRequiredDescriptionDefault
idYesView ID (path parameter)
nameYes(body)
filtersYes(body) Either a group (logic + rules, nested one level at most) or a condition (model, field, operator, value). Allowed model.field pairs: conversations.status_id, priority_id, assigned_team_id, assigned_user_id, inbox_id, last_message_at, last_interaction_at, last_interaction_sender, created_at, waiting_since, next_sla_deadline_at, snoozed_until, sla_policy_id, tags; conversation_statuses.id, name; users.email, external_user_id; inboxes.channel. There is no subject or content field: a view cannot filter on text
team_idNo(body) Required when visibility is team
visibilityYes(body) all: every agent. team: the members of team_id

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the load and does well: replace-not-merge semantics, a 404 for personal views, the `shared_views:manage` permission, and the concrete endpoint. It stops short of describing what a successful response contains or any side effects on other views, 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 replacement warning is front-loaded in the first sentence, which is the right priority. The repeated title line, the raw 'PUT /api/v1/...' and 'Tags: Views' boilerplate add little, though they cost only a few tokens.

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, five-parameter mutation tool with no annotations and no output schema, the description covers the destructive-replacement risk, prerequisites, permissions, and one error path. The only real gap is the absence of any statement about the return value.

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

Parameters3/5

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

Schema description coverage is 100% and the nested filters schema is richly documented, so the schema does the heavy lifting. The description adds the important implication that omitted optional fields (notably team_id) are wiped rather than preserved, but gives no field-level guidance 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?

Names the resource and operation precisely and immediately qualifies it as a full replacement ('name, filters, visibility and team_id are all overwritten with the body, nothing is merged'), which separates it from create_shared_view and the read-only get_shared_view siblings.

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 prerequisite workflow ('read the view first (`get_shared_view`) and resend every field'), names the required permission, and calls out the failure case for personal views. An agent knows both how to prepare and when the call will fail.

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

update_statusA

Update Conversation Status Default statuses (Open, Snoozed, Resolved, Closed) cannot be updated. Requires the status:manage permission. PUT /api/v1/statuses/{id} Tags: Status and priority

NameRequiredDescriptionDefault
idYes(path parameter)
nameYes(body)
categoryYes(body) Category this status maps to.

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations supplied, the description carries the full burden and does well: it discloses that this is a mutating PUT, that a `status:manage` permission is required, and that built-in statuses are protected from modification. It stops short of describing failure/error behavior or what happens to existing conversations mapped to a re-categorized status.

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?

Four short lines, front-loaded with the action and the key restriction, with no marketing filler. The trailing 'Tags: Status and priority' and endpoint line are administrative rather than instructive, but they are brief.

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 required-3-param mutation tool with no annotations and no output schema, the definition covers permissions and protected-status constraints but omits side effects (what re-mapping a category does to assigned conversations) and any error/response expectations. Adequate to call it correctly, not enough 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%, so the baseline is 3; the schema already explains `id` as a path parameter and `category` as the mapping target. The description adds only the indirect note that protected default statuses constrain valid targets, without elaborating on the `name` length or category enum semantics beyond what the schema provides.

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 ('Update Conversation Status') plus the concrete endpoint PUT /api/v1/statuses/{id}, so the operation is unambiguous. It does not differentiate itself from the near-identical sibling update_conversation_status, leaving the agent to guess which to call.

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 one hard precondition — default statuses (Open, Snoozed, Resolved, Closed) cannot be updated — which is genuinely useful exclusion guidance. However, it never says when to prefer this over update_conversation_status or create_status, so alternative selection is left implicit.

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

update_tagC

Update Tag Requires the tags:manage permission. PUT /api/v1/tags/{id} Tags: Tags

NameRequiredDescriptionDefault
idYes(path parameter)
nameYes(body) Tag name. Must not be empty.

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does add real value by disclosing the `tags:manage` permission requirement and the underlying PUT endpoint semantics, but it says nothing about side effects (e.g., whether renaming a tag affects conversations already carrying it), error behavior, or idempotency.

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 short and front-loaded, but two of the four lines are filler: 'Update Tag' repeats the tool name and 'Tags: Tags' is a redundant category label. The genuinely useful line, the permission requirement, is buried in the middle.

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, non-nested mutation with a fully described schema and no output schema, the definition covers the essentials an agent needs: the endpoint, the target resource, and the auth requirement. It falls short only on side-effect disclosure, which for a rename operation would have been worth a sentence.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (id as path parameter, name with a non-empty constraint and example) are already documented. The description adds no meaning beyond the schema, which is acceptable at this coverage level but not a contribution.

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

Purpose3/5

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

The description says 'Update Tag' and gives the endpoint PUT /api/v1/tags/{id}, so the resource and the mutation are identifiable, but the opening line merely restates the tool name and nothing distinguishes it from siblings such as create_tag or update_conversationtags beyond the endpoint path. No mention of what part of a tag is updatable.

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 call this versus create_tag, delete_tag, or the other update_* tools. The only context given is the required permission, which is a prerequisite rather than a usage policy, and there are no exclusions or alternatives named.

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

update_teamC

Update Team Requires the teams:manage permission. PUT /api/v1/teams/{id} Tags: Teams

NameRequiredDescriptionDefault
idYes(path parameter)
nameYes(body)
emojiNo(body)
timezoneNo(body)
sla_policy_idNo(body)
business_hours_idNo(body)
conversation_assignment_typeYes(body)
max_auto_assigned_conversationsNo(body)

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations supplied, the description must carry the full behavioral burden. It discloses the required permission scope and the REST verb/path, but says nothing about whether PUT replaces or merges fields, what happens to omitted optional fields (e.g., emoji, timezone), whether changes are reversible, or what the response contains. The authorization prerequisite is the one genuinely useful addition.

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 short and front-loaded, with the permission requirement visible immediately. The 'Tags: Teams' line is pure generator boilerplate and restates the tool name ('Update Team'), which is minor waste but not bloat.

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 an 8-parameter mutation tool with three required fields, no annotations, and no output schema, the definition is far too thin. It omits the field list, the replace-vs-merge semantics implied by PUT, and any statement of the effect of the update — all things an agent needs before invoking a write operation.

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 reported at 100%, so the baseline is 3 even though the description adds no parameter meaning at all. The schema descriptions themselves are only placeholders like '(body)' with examples, so the actual semantic value is thin, but per the rubric the schema is considered to do the documenting.

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

Purpose3/5

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

The description is essentially the tool name plus the HTTP endpoint (PUT /api/v1/teams/{id}), which does convey that this modifies an existing team identified by id. However, it never states what aspects of the team are updated (name, emoji, timezone, SLA policy, business hours, assignment settings), so an agent must open the schema to understand scope. It is distinguishable from siblings only by the generic 'Team' resource, not by any described behavior.

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 offered is the prerequisite permission `teams:manage`, which is useful but not a usage rule. There is no statement about when to use this tool versus update_team_assignee, create_team, or get_team, and no warning that it is a mutation requiring an existing team id.

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

update_team_assigneeC

Update Team Assignee Requires the conversations:update_team_assignee permission. PUT /api/v1/conversations/{uuid}/assignee/team Tags: Conversations

NameRequiredDescriptionDefault
uuidYes(path parameter)
assignee_idYes(body) Team ID to assign

TDQS

C2.3/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden. It usefully discloses the required `conversations:update_team_assignee` permission, but says nothing about side effects (does it clear an existing user or team assignee?), idempotency, or what is returned on success or failure. For a mutation with zero annotation coverage, this is a meaningful gap.

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 text is short, but a large share is low-value boilerplate: the title repeated as the first line, a permission string, a raw HTTP route, and a redundant 'Tags: Conversations' line. Useful content (permission requirement, endpoint) is not front-loaded relative to the noise.

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 mutation endpoint with no annotations and no output schema, so the description should explain the effect of the assignment and any replacement/override semantics. It supplies only the permission and route, leaving the agent unable to predict the operation's effect on existing assignments.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (uuid path parameter and assignee_id team ID) are already documented. The description adds no format, constraint, or sourcing detail beyond the schema, so the baseline 3 applies.

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

Purpose2/5

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

The description opens with the title restated verbatim ('Update Team Assignee'), and the only added information is the HTTP route PUT /api/v1/conversations/{uuid}/assignee/team plus a tag line. This implies assigning a team to a conversation, but the agent learns that mostly from the parameter names, not from an explicit statement of what the tool does. It does not distinguish itself from siblings such as update_user_assignee or remove_team_assignee.

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

Usage Guidelines2/5

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

No guidance on when to use this tool, when to prefer update_user_assignee instead, or whether this replaces an existing user assignee. The only stated precondition is the required permission, which is a prerequisite rather than usage guidance.

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

update_user_assigneeC

Update User Assignee Requires the conversations:update_user_assignee permission. PUT /api/v1/conversations/{uuid}/assignee/user Tags: Conversations

NameRequiredDescriptionDefault
uuidYes(path parameter)
assignee_idYes(body) User ID to assign

TDQS

C2.8/5.0
Behavior3/5

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

With no annotations, the description does disclose a genuinely useful behavioral fact: the required scope 'conversations:update_user_assignee', plus the exact HTTP route. It says nothing about whether the assignment replaces an existing assignee, whether notifications fire, or idempotency, so mutation semantics remain opaque.

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?

Very short and front-loaded: permission requirement then endpoint. The trailing 'Tags: Conversations' line is metadata noise but costs little.

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

Completeness2/5

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

For a mutation tool with no annotations and no output schema, the definition omits what the response looks like, what happens to any prior assignee, and failure modes. The permission and endpoint are helpful but insufficient for confident 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 coverage is 100% and both parameters are described there (uuid as path, assignee_id as the user ID to assign). The description adds no syntax or format detail beyond that, so the baseline of 3 applies.

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

Purpose3/5

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

The title/name is restated verbatim, which alone would be tautological, but the included endpoint 'PUT /api/v1/conversations/{uuid}/assignee/user' makes the actual effect concrete: setting the user assignee on a specific conversation. Still no differentiation from siblings such as remove_user_assignee or update_team_assignee.

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 the team-assignee or removal siblings, and no stated preconditions beyond the permission scope. An agent must infer from the endpoint path that this replaces the conversation's user assignee.

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

upsert_conversation_draftA

Save Conversation Draft Saves or updates the caller's draft for a conversation. type defaults to reply. The request is rejected with 400 when content is blank and meta is empty or {}, and when meta is larger than 32 KB. The caller must have access to the conversation. POST /api/v1/conversations/{uuid}/draft Tags: Conversations

NameRequiredDescriptionDefault
metaNo(body) Free-form JSON stored with the draft, at most 32 KB. The code does not constrain its shape.
typeNo(body) Draft type. Defaults to `reply` when omitted or empty.reply
uuidYesConversation UUID (path parameter)
contentNo(body) Draft content (HTML). Inline images are rewritten to cid: references on save.

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does real work: it discloses two rejection conditions (blank `content` combined with empty `meta`; `meta` over 32 KB) and an authorization requirement. That is meaningful, non-obvious failure behavior an agent cannot infer. What it omits is the success behavior and response shape, and whether omitting `content` clears an existing draft (partial-update semantics).

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 save/update behavior and the rejection rules are front-loaded, so the first sentence carries the most useful information. The trailing endpoint path and tag line are mild but conventional noise, and the `type` default is stated once more than necessary. No sentence is wasted, though a couple are duplicative.

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 no annotations and no output schema, validation and access rules are well covered, but the description never says what a successful call returns or what state the draft ends in. The 32 KB and blank-content rules are covered; the semantics of a partial save (omitting `content` or `meta`) are not. That is a real gap for an upsert tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters, including the enum and default. The description restates the `reply` default and the 32 KB bound rather than adding new meaning, though the coupling of blank `content` with empty `meta` as a joint validation rule is genuinely additive. Baseline 3 fits given the schema does the heavy lifting.

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?

"Saves or updates the caller's draft for a conversation" gives a specific verb pair (upsert semantics) and an unambiguous resource (the caller's own draft on one conversation). The name plus this sentence makes the create-vs-update duality explicit, which is the main ambiguity. It stops short of naming the contrast with a sibling like delete_conversation_draft, but 'upsert' plus 'caller's draft' is differentiated enough.

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 supplies a precondition ("The caller must have access to the conversation") and a default (`type` is `reply`), which implies the tool is used for both first-save and re-save. However, it never says when to prefer this over a full conversation update or when to reset a draft instead of overwriting it, and there is no explicit when-not guidance.

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. 104 tool updatesv0.2.0
    • First observedai_completion
    • First observedapply_macro
    • First observedblock_contact
    • First observedcreate_agent
    • First observedcreate_automation_rule
    • First observedcreate_contact
    • First observedcreate_contact_note
    • First observedcreate_conversation
    • First observedcreate_shared_view
    • First observedcreate_status
    • First observedcreate_tag
    • First observedcreate_team
    • First observeddelete_agent
    • First observeddelete_automation_rule
    • First observeddelete_contact
    • First observeddelete_contact_note
    • First observeddelete_conversation_draft
    • First observeddelete_message
    • First observeddelete_shared_view
    • First observeddelete_status
    • First observeddelete_tag
    • First observeddelete_team
    • First observeddownload_conversation_transcript
    • First observedexport_contact
    • First observedgenerate_api_key
    • First observedget_agent
    • First observedget_agents
    • First observedget_agents_compact
    • First observedget_ai_prompts
    • First observedget_all_conversations
    • First observedget_all_drafts
    • First observedget_all_shared_views
    • First observedget_assigned_conversations
    • First observedget_automation_rule
    • First observedget_automation_rules
    • First observedget_contact
    • First observedget_contact_notes
    • First observedget_contact_page_visits
    • First observedget_contacts
    • First observedget_conversation
    • First observedget_conversation_participants
    • First observedget_current_agent
    • First observedget_custom_attributes
    • First observedget_inbox
    • First observedget_inboxes
    • First observedget_macro
    • First observedget_macros
    • First observedget_macros_compact
    • First observedget_mentioned_conversations
    • First observedget_message
    • First observedget_messages
    • First observedget_priorities
    • First observedget_public_help_center_article
    • First observedget_public_help_center_tree
    • First observedget_shared_view
    • First observedget_sidebar_counts
    • First observedget_statuses
    • First observedget_tags
    • First observedget_team
    • First observedget_team_unassigned_conversations
    • First observedget_teams
    • First observedget_teams_compact
    • First observedget_unassigned_conversations
    • First observedget_view_conversations
    • First observedhealth_check
    • First observedmark_conversation_as_unread
    • First observedmedia_upload
    • First observedoverview_charts
    • First observedoverview_counts
    • First observedoverview_csat
    • First observedoverview_message_volume
    • First observedoverview_sla
    • First observedoverview_tag_distribution
    • First observedpaginated_search_conversations
    • First observedpaginated_search_messages
    • First observedpublic_help_center_search
    • First observedremove_team_assignee
    • First observedremove_user_assignee
    • First observedretry_message
    • First observedrevoke_api_key
    • First observedsearch_contacts
    • First observedsearch_conversations
    • First observedsearch_macros
    • First observedsearch_messages
    • First observedsend_message
    • First observedserve_media
    • First observedtoggle_automation_rule
    • First observedupdate_agent
    • First observedupdate_agent_availability
    • First observedupdate_automation_rule
    • First observedupdate_contact
    • First observedupdate_contact_custom_attributes
    • First observedupdate_conversation_assignee_last_seen
    • First observedupdate_conversation_custom_attributes
    • First observedupdate_conversation_priority
    • First observedupdate_conversation_status
    • First observedupdate_conversationtags
    • First observedupdate_shared_view
    • First observedupdate_status
    • First observedupdate_tag
    • First observedupdate_team
    • First observedupdate_team_assignee
    • First observedupdate_user_assignee
    • First observedupsert_conversation_draft

TDQS

C2.6/5.0

Scored across 104 tools

Disambiguation2/5

Many near-duplicate tools exist: search_conversations vs paginated_search_conversations, search_messages vs paginated_search_messages, get_agents vs get_agents_compact, get_macros/get_macros_compact/search_macros, and multiple conversation-list endpoints. Descriptions add useful caveats, but an agent can easily misselect, especially with update_status vs update_conversation_status.

Naming Consistency3/5

Most tools follow a verb_noun snake_case pattern, but there are notable exceptions such as update_conversationtags, media_upload, overview_charts, public_help_center_search, health_check, and ai_completion. The mix of noun-first and verb-first conventions reduces predictability.

Tool Count1/5

With 104 tools, the surface is far beyond a well-scoped MCP tool set and mirrors a large REST API endpoint-by-endpoint. Many tools are granular or overlapping variants, creating an extreme selection burden for an agent.

Completeness4/5

Core helpdesk coverage is broad: contacts, conversations, messages, teams, agents, tags, statuses, macros, automations, views, and reports are largely covered. Gaps remain, such as inboxes only being list/get with no create/update/delete, contact notes lacking update, and help-center tools being public read-only.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    MCP server that exposes the complete Libredesk REST API (54 endpoints) as tools, enabling natural language management of conversations, contacts, agents, teams, and more for the open-source customer support desk.
    54
    9 npm
    4
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Exposes the full Chatwoot API as 129 tools for AI assistants, enabling account, contact, conversation, message, inbox, team, report, help center, automation, and custom attribute management, plus exclusive Kanban and scheduled message features.
    7 npm
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Exposes FirstReply customer support operations as MCP tools, enabling AI assistants to browse conversations, draft replies, manage API keys, and access support statistics.
    84
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to query and operate a help desk and service desk through MCP over HTTP, including tickets, requester communications, internal notes, attachments, stage and SLA history, time entries, clients, requesters, desks, knowledge base, contracts, and billing/satisfaction reports.
    MIT