chatgenius-mcp
OfficialEnables reading and acting on Facebook inbox conversations and messages, managing comment automation and reply approvals through ChatGenius.
Enables reading and acting on Instagram inbox conversations and messages, managing comment automation and reply approvals, and working with Content Studio posts through ChatGenius.
Enables reading and acting on WhatsApp inbox conversations and messages, including sending messages, assigning conversations, and managing blocked users and opt-outs through ChatGenius.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@chatgenius-mcpWho messaged us on Instagram this week that we haven't replied to?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
chatgenius-mcp
An MCP server for ChatGenius. Add it to Claude Desktop, Claude Code, Cursor, Zed, Gemini CLI or any client that speaks the Model Context Protocol, and your assistant can read and act on your Instagram, Facebook, WhatsApp and SMS inbox, contacts, appointments, flows, comment automation, Content Studio posts and knowledge base.
It is a thin wrapper over the ChatGenius REST API. Every tool is one API call. Nothing is stored, nothing runs on our side, and your API key never leaves your machine.
Prefer not to run anything? The same tools are hosted at https://sumgenius.ai/api/mcp with a Connect button (OAuth): paste that URL into claude.ai, ChatGPT, Cursor or any client that takes a remote MCP server. Docs: https://sumgenius.ai/docs/mcp
Install
You need Node 18 or newer and a ChatGenius API key. Create the key in the portal under Webhook + Send API, Credentials (the Webhook & API add-on is required).
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"chatgenius": {
"command": "npx",
"args": ["-y", "chatgenius-mcp"],
"env": { "CHATGENIUS_API_KEY": "sgwh_..." }
}
}
}Claude Code (plugin, prompts for the key):
claude plugin marketplace add SumCodeAI/chatgenius-claude-plugin
claude plugin install chatgenius@sumgeniusCursor, Zed, Windsurf and the rest take the same command, args and env in their own MCP settings.
Related MCP server: ghl-mcp-server
Environment
Variable | Required | Meaning |
| yes | Your API key. Its scope ( |
| no |
|
| no | Base URL. Defaults to |
What it can do
105 tools in ten groups. Read tools are safe to run freely. Write tools create or edit records. Destructive tools reach a real person, publish content or change what runs live, and are marked so the client asks you first.
Group | Tools |
Account |
|
Contacts |
|
Inbox |
|
Appointments |
|
Flows |
|
Comments |
|
Content Studio |
|
Market Intel |
|
Knowledge base |
|
AI settings |
|
Things to try:
"Who messaged us on Instagram this week that we have not replied to?"
"Book Maria for a consultation Thursday at 2pm and tell her."
"Build a flow that answers 'price' with our packages and collects an email."
"Which comment replies are waiting for approval? Approve the first three."
"What are the knowledge gaps from the last 30 days? Draft FAQs for them."
Building a flow works the way a developer would do it: the assistant reads the node catalogue, writes a definition, validates it until the errors list is empty, saves a draft, and publishes when you say so. Open the flow in the portal and it is laid out on the canvas.
Safety
Every write carries an
Idempotency-Key, so a retried tool call cannot double-send.The API enforces the key's scope server-side.
CHATGENIUS_MAX_SCOPEis a second, local cap.Message and comment text in results was written by your customers. The server tells the model to treat it as data, not instructions. Keep destructive tools behind your client's approval prompt.
Team, webhook endpoint and API key management, and switching the AI on or off, are not exposed. Use the portal.
Development
npm install
npm run build:tools # regenerate tools.json from the live OpenAPI spec
npm run check # fail if tools.json drifted from the spec
CHATGENIUS_API_KEY=... npm run smokesrc/tools.js is the curated tool table. tools.json is generated from it plus https://sumgenius.ai/api/v1/openapi.json and is what ships. Add a tool to the table, run build:tools, commit both.
License
MIT. Made by SumGeniusAI LLC, Las Vegas.
Available Tools
105 toolsactivate_flowADestructive
Activate a flow. Sets the flow live. Publishes the draft first when there is one, exactly like the builder's toggle. Plans cap live flows (403 plan_limit_reached). Send {} as the body.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, destructive, non-idempotent, and open-world behavior, so the bar is lower. The description still adds genuine context beyond them: the implicit draft-publish side effect and the specific plan-limit failure mode (403 plan_limit_reached), both of which affect an agent's decision to call it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action and effect, then side effects, then failure mode. Every sentence carries information, though the body instruction could be folded in more cleanly rather than placed last.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 and rich annotations, the description covers effect, side effect, and the main error condition. It could be stronger by stating what happens when the flow is already live (relevant since idempotentHint is false) and by routing to publish_flow versus this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single required integer id, so the schema carries parameter meaning. The description's "Send {} as the body" adds a small structural hint but is slightly ambiguous alongside a required id property, and it doesn't clarify where the id is supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("Activate a flow. Sets the flow live") and adds the key mechanism that the draft is published first. It does not explicitly contrast itself with the closely related publish_flow and pause_flow siblings, so an agent must infer the boundary between "activate" and "publish".
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the effect (making a flow live, mirroring the builder's toggle), which gives the agent a clear mental model. There is no explicit when-not guidance or named alternative among publish_flow, pause_flow, or update_flow, which is a real gap given several overlapping siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_competitorA
Track a competitor. Looks the handle up through Meta and starts tracking it. The account must be a public Instagram business or creator account; personal and private accounts cannot be read by anyone through the API (422 invalid_param). At the plan cap this is 403 plan_limit_reached, and an account you already track is 409 conflict. The first snapshot is taken immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | Instagram handle, with or without the leading @. Must be a public business or creator account. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly=false, idempotent=false, destructive=false), the description discloses the key side effect — the first snapshot is taken immediately — and enumerates three distinct error outcomes with their conditions (invalid_param, plan_limit_reached, conflict on already-tracked accounts). That is exactly the mutation context an agent needs before committing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact sentences, front-loaded with purpose followed by preconditions and error semantics. No repetition of the title, no filler, and each sentence carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 purpose, mechanism, preconditions, side effects, and all known failure modes. Nothing an agent needs in order to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single parameter, so the schema already documents the handle format, the @ prefix tolerance, and the public-business-account requirement. The description reinforces the account-type constraint but adds no new syntax or formatting detail beyond what is structured. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Track a competitor'), plus the mechanism ('Looks the handle up through Meta and starts tracking it'). This clearly separates it from siblings like list_competitors, get_competitor, and remove_competitor without requiring the agent to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit preconditions and exclusions: the account must be a public Instagram business or creator account, and personal/private accounts cannot be read. It also maps failure modes (422, 403, 409) to causes, which tells the agent when the call will fail. It stops short of naming alternative tools for listing or removing competitors, so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_comment_replyADestructive
Approve a reply. Posts the pending reply publicly under the comment, as the account. Send {"text": "..."} to post an edited reply instead of the AI draft; the draft is kept and edited becomes true. Only a pending comment can be approved (409 not_pending). A successful send counts against the plan's reply cap. Send Content-Type: application/json with an empty object when not editing; the server refuses a bodiless POST.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. | |
| text | No | Post this instead of the AI draft. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses the public posting side effect, that the AI draft is retained and an 'edited' flag becomes true, the 409 not_pending failure mode, and that success consumes the plan's reply cap. It even documents the transport requirement (Content-Type: application/json, empty object instead of a bodiless POST), which is exactly the kind of operational detail annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and effect, then layers edit semantics, failure mode, quota, and transport requirements in a tight block with no filler. It is dense but every sentence carries operational value; only the transport note could arguably be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent mutation with annotations covering the safety profile, the description supplies preconditions, side effects, and quota impact. The one remaining gap is the response shape — no output schema exists, and 'edited becomes true' hints at a return field that is never described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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, but the description adds real meaning: 'text' replaces the AI draft rather than appending to it, the draft survives, and an 'edited' flag flips — semantics not conveyed by the schema's one-line 'Post this instead of the AI draft.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Approve a reply") and immediately describes the effect: it posts the pending reply publicly under the comment as the account. This is distinguishable at a glance from reject_comment_reply and the bulk variants 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete precondition for use — only a pending comment can be approved, otherwise 409 not_pending — and explains the two invocation modes (approve the AI draft vs. post edited text). It does not explicitly route to reject_comment_reply or the bulk tools, 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.
assign_conversationA
Assign or unassign a conversation. Body {"assigned_to": } to assign, {"assigned_to": null} to unassign. Moves pending or escalated to active and adds a system line to the transcript, exactly like the inbox.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. | |
| assigned_to | Yes | A team member id, or null to unassign. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-read-only, non-idempotent mutation, and the description adds real context beyond that: it discloses the status transition (pending or escalated to active) and the transcript side effect of a system line. It still omits permission requirements and any notification side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the purpose front-loaded and the two body variants stated compactly. The inline JSON notation is slightly dense but earns its place by disambiguating assign versus unassign.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, the description covers the action, the payload variants, and the resulting state and transcript effects. Only permission/auth expectations and whether the caller is notified are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already documents both id and assigned_to including the null-to-unassign case, so the description largely restates the schema. It confirms the body shape but adds no format or constraint details the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair and resource ('Assign or unassign a conversation') and covers both directions in one tool. It does not name a sibling such as update_conversation to distinguish scope, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The body examples implicitly tell the agent how to choose assign versus unassign, and the note that it moves pending/escalated conversations to active hints at applicable states. There is no explicit guidance on when to use this instead of update_conversation or other conversation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
block_userA
Block a user. Send exactly one of ig_username (blocks by Instagram handle, even before they have messaged) or conversation_id (blocks the person behind an existing conversation on any Meta channel).
| Name | Required | Description | Default |
|---|---|---|---|
| ig_username | No | Instagram handle, with or without @. | |
| conversation_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the description's value-add is the behavior it does disclose: blocking works via handle even before the user has messaged, and via conversation_id the block applies cross-channel. It does not state whether the block is reversible via unblock_user, whether an unknown handle errors or creates a stub, or what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and then the input rule, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, the description covers the action, both inputs, and the exactly-one constraint. It leaves gaps only on edge behavior (neither/both supplied, unknown handle, reversibility) that are minor for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% because conversation_id is undocumented, and the description compensates by defining it as the person behind an existing conversation on any Meta channel. It also adds the mutual-exclusivity constraint (exactly one of the two), which appears nowhere in the schema (no required fields, no oneOf).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Block a user") and enumerates the two identification modes, so the agent knows exactly what the tool does and which inputs select which mode. The operation is clearly distinct from siblings like unblock_user and list_blocked_users without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Send exactly one of ig_username ... or conversation_id" gives explicit routing guidance between the two input paths, which is more than an implied usage. It stops short of naming alternatives (e.g., list_blocked_users to check state, or unblock_user) or stating when blocking is the right action versus muting/handling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
book_appointmentADestructive
Book an appointment. Books a slot the way the portal calendar does: the account's required customer fields are enforced (422 missing_fields), the time must be in the future and free (409 slot_unavailable), the appointment is confirmed at once, synced to Google Calendar and GoHighLevel when connected, and appointment.booked fires. Attach conversation_id to book for a person you are chatting with; they get the confirmation DM unless send_confirmation is false. date and time are the customer's wall-clock time in timezone (the account timezone when omitted).
| Name | Required | Description | Default |
|---|---|---|---|
| cost | No | ||
| date | Yes | YYYY-MM-DD. | |
| time | Yes | HH:MM, 24-hour, in timezone. | |
| notes | No | ||
| customer | Yes | ||
| location | No | ||
| timezone | No | IANA name. Default: the account timezone. | |
| service_type | No | A bookable service name from ai/config booking.bookable_services, or free text. | consultation |
| vehicle_info | No | ||
| conversation_id | No | Book for the person in this conversation; sets the channel and enables the confirmation DM. | |
| duration_minutes | No | Defaults to the service's duration, else 30. | |
| send_confirmation | No | With conversation_id: DM the customer the confirmation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations it discloses the failure contract (422 missing_fields, 409 slot_unavailable), the immediate-confirmation semantics, downstream syncs to Google Calendar and GoHighLevel, and the appointment.booked event. It also explains the side effect of the confirmation DM, which is exactly the kind of behavior annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then layered with validation, side effects, and parameter notes in a compact paragraph. It is dense but nearly every clause carries information; the nested parenthetical error codes are slightly heavy for prose but earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter mutation with no output schema, the description covers outcomes, error states, and side effects well enough to call the tool safely. The remaining gap is the handful of optional fields (cost, notes, location, vehicle_info) that neither schema nor description explains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 58% schema coverage, the description compensates well for the most consequential params: conversation_id's channel/DM effect, timezone defaulting to account timezone, wall-clock semantics of date/time, service_type sourcing from booking.bookable_services, and duration fallbacks. It leaves cost, notes, location, vehicle_info, and the customer sub-object undocumented, so the coverage is strong but not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ("Book an appointment") and immediately qualifies how the booking behaves. It is clearly distinct from siblings like reschedule_appointment or cancel_appointment, but it never names those siblings or get_availability to draw the line explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete usage context: attach conversation_id when booking for a person in an active chat, and confirmation DM is controlled by send_confirmation. What's missing is guidance on the surrounding workflow (e.g. call get_availability first, or use reschedule_appointment to move an existing booking).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_approve_comment_repliesADestructive
Bulk approve replies. Sends the AI draft for each pending id, in order. Ids that are not pending or fail to send are counted in failed with a reason each. Up to 100 per call. Each approved reply is posted publicly under the comment. Confirm with the user.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive, openWorld, and non-idempotent, but the description adds substantive detail beyond them: the draft content is sent on the agent's behalf, each approved reply becomes a public post under the comment, and partial failures are reported per id with a reason. The only gap is that reversibility/undo after public posting is not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences with no filler: action first, then mechanics, then failure semantics, then the limit, then the side effect, then the confirmation requirement. Every clause conveys an operational constraint an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, no-output-schema mutation tool this covers action, limits, partial-failure reporting, and the public side effect — enough to call it correctly. It leaves out whether a posted reply can be retracted and what the success payload looks like, which matters somewhat given destructive=true and no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden, and it does: ids must reference pending replies, are processed in the given order, exceed-100 is disallowed, and non-pending ids land in the failed set. It never states whether an id from a different account/workspace is rejected, but the meaningful semantics are covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Bulk approve replies") plus the mechanism ("Sends the AI draft for each pending id"), which is far more informative than the name alone. It implicitly contrasts with the single-item approve_comment_reply sibling via "bulk" and "each pending id," but never names the sibling explicitly, so an agent must infer the routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operating context: only pending ids are actionable, the cap is 100 per call, and it explicitly requires user confirmation before invocation. It stops short of naming alternatives such as approve_comment_reply for a single id or bulk_reject_comment_replies, so the when-not-to-use case is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_reject_comment_repliesA
Bulk reject replies. Drops the pending draft for each id. Ids that are not pending are ignored; rejected says how many changed.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already covering safety profile, the description adds genuine behavioral detail: it states exactly what happens per id ('Drops the pending draft'), how non-qualifying ids are treated, and names the response field 'rejected'. Minor tension worth noting: the ignore-if-not-pending behavior reads as effectively idempotent, while idempotentHint is false, and dropping a draft is a deletion-like effect despite destructiveHint=false — enough to warrant caution but not a direct contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then the effect, then the no-op case and return field. Nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 usefully names the 'rejected' count field, so an agent can anticipate the shape of a result. However, it omits the 100-id cap, permission requirements, and whether a rejected draft can be recovered — gaps for a mutation tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the meaning, and it does explain that ids refer to replies and that non-pending ones are silently ignored. It does not disclose that ids is an array of 1–100 integers, the per-call cap, or what counts as a valid reply id, so compensation is partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Bulk reject replies') and, together with the `ids` array, makes the batch scope unambiguous against single-item siblings like reject_comment_reply. It stops short of explicitly contrasting itself with reject_comment_reply or bulk_approve_comment_replies, so the differentiation comes mostly from the tool name rather than the prose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Ids that are not pending are ignored' conveys a real precondition (only pending drafts can be rejected) and implicitly tells the agent this is a no-op tolerant operation. There is no explicit when-to-use routing to reject_comment_reply for a single id, no note on batch limits, and no mention of required approvals/permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_appointmentADestructive
Cancel an appointment. Sets status cancelled, removes the Google Calendar and GoHighLevel events, fires appointment.cancelled. 409 already_cancelled if it already is. Send {} as the body.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the side effects: status becomes cancelled, Google Calendar and GoHighLevel events are removed, and appointment.cancelled is fired. It also names the 409 already_cancelled failure mode, which is exactly the state an agent needs before retrying. Minor gaps remain: no statement about irreversibility, whether the contact is notified, or what a 404-style missing-id case returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short telegraphic sentences, side effects front-loaded and the error contract placed before the body instruction. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive single-parameter mutation with no output schema, the description covers side effects, downstream integrations, the emitted event, and the key error case. It stops short of documenting auth requirements and post-cancellation response shape, but an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is only one documented parameter, so the schema already carries the meaning. The added instruction "Send {} as the body" is mildly ambiguous alongside a required id and adds little beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Cancel an appointment") and immediately scopes what cancelling means operationally, so an agent can distinguish it from siblings like update_appointment, reschedule_appointment, or book_appointment without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies when to use it (the appointment should not already be cancelled, since 409 already_cancelled is returned), but there is no explicit guidance on when to prefer cancel over reschedule_appointment or update_appointment, and no mention of prerequisites such as permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_comment_triggerADestructive
Create a comment trigger. Creates a trigger. It goes live at once unless the plan's live-trigger cap is reached, in which case it is saved paused and created_paused is true (never refused). Buttons are optional, up to three. A reply button is still worth adding: its tap opens the conversation so follow-ups can be sent. Story and Live triggers are Instagram only and never post-scoped. Send draft: true to save an incomplete trigger paused, skipping the template and button requirements. It goes live at once and starts DMing real commenters. Confirm with the user first, or send draft: true to save it paused. A paused trigger stays paused through edits until you send active: true.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| draft | No | Save incomplete, paused. Skips the template and button requirements. | |
| tag_id | No | Tag applied to the commenter when the trigger fires. Pro plans and above; silently ignored below. | |
| buttons | No | Buttons under the DM. Optional, three at most. | |
| post_id | No | Scope to one post (an id from GET /recent-posts). Null means every post. Ignored for story and live. | |
| keywords | Yes | Any one of these matches. | |
| platform | No | both | |
| post_url | No | Label only; post_id is what scopes the trigger. | |
| dm_use_ai | No | Let the AI write the DM from dm_ai_goal, the knowledge base and the configured tone. Needs dm_ai_goal. | |
| dm_ai_goal | No | What the AI-written DM should achieve. | |
| match_type | No | exact = whole word; contains = anywhere in the text; fuzzy = tolerates a typo or two. | contains |
| dm_file_url | No | https PDF attached to the DM. | |
| source_type | No | comment = post and Reel comments; story = replies to your stories; both = either; live = comments during an Instagram Live. story and live are Instagram only. | comment |
| dm_image_url | No | https image attached to the DM. | |
| dm_templates | No | Up to five DM variations. Required when the mode includes a DM unless dm_use_ai is true. | |
| response_mode | No | both = public reply and DM; public_only; dm_only. | both |
| public_replies | No | Up to five variations, one is picked per fire. {name} is the commenter. Required when the mode includes a public reply. | |
| exclude_keywords | No | If any of these appear the trigger does not fire. | |
| hide_comment_after_dm | No | Hide the comment once the DM is sent (post comments only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only flag it as destructive, open-world, and non-idempotent; the description adds real substance beyond that: the trigger goes live immediately, is saved paused rather than refused when the live-trigger cap is hit (signalled via created_paused), and a paused trigger stays paused through edits until active: true is sent. It also discloses that creation starts DMing real commenters and that draft mode skips template/button requirements. That is exactly the kind of lifecycle and consequence disclosure annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is useful but the prose is repetitive and loosely ordered: 'Creates a trigger.' duplicates the first sentence, 'It goes live at once' appears twice in different paragraphs, and the confirm-with-the-user/draft choice is restated near the end. The most consequential fact (goes live immediately and DMs real commenters) is not front-loaded, which weakens scanability for an agent deciding whether to call it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-parameter creation tool with no output schema, the description covers the critical operational facts: live-vs-paused behavior, the cap fallback, draft mode, and the button option. Remaining gaps (the post_id vs post_url distinction, response_mode interactions) are handled by the schema, so nothing essential is missing, though the pricing/plan gating on tag_id is left entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 89%, so the schema already documents nearly every parameter, and much of the description's parameter talk (buttons optional up to three, draft skips requirements) merely echoes it. The one genuine value-add is the rationale that a reply button's tap opens the conversation so follow-ups can be sent, which helps the agent choose button types. Baseline 3 is appropriate given how thoroughly the schema already explains semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource (create a comment trigger), which cleanly separates it from list_comment_triggers, update_comment_trigger, and simulate_comment siblings. The immediately following 'Creates a trigger.' is a pure restatement that adds nothing, but the core identification is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Strong when-to guidance: it says to confirm with the user first because creation starts DMing real commenters, and it explains the draft: true escape hatch for saving an incomplete trigger paused. It also explains when story/live source types are relevant (Instagram-only, never post-scoped). It does not route the agent between this tool and update_comment_trigger or duplicate_comment_trigger, which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_custom_fieldA
Create a custom field. field_key is permanent after creation. Up to 15 active fields.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ||
| label | Yes | ||
| field_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the write-ness is covered. The description adds genuinely new behavioral facts: field_key is immutable after creation and the account is capped at 15 active fields. It stops short of describing what happens on a duplicate key or what the call returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then the two constraints an agent most needs before committing. No filler or restated schema detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter creation tool with annotations covering the safety profile, the core facts are present. Missing pieces are failure behavior on duplicate field_key, whether creation is scoped to the current account, and any return value, which matter because there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden; it meaningfully explains field_key (permanent, so choose carefully) but says nothing about label or how the type enum values affect behavior. With one of three parameters enriched beyond the schema, the compensation is partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Create a custom field" states a specific verb and resource, and the body clarifies what a custom field's key semantics are. It does not, however, position itself against siblings like update_custom_field or list_custom_fields, so an agent must infer the create-vs-update distinction 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Up to 15 active fields' clause gives an implied precondition that an agent can check before calling, but there is no explicit when-to-use vs. when-not guidance and no mention of the update_custom_field alternative for existing fields. Usage context 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.
create_faqB
Create an FAQ. Counts against the plan cap. The answer is embedded for retrieval right away; embedding_pending is true if indexing is still catching up.
| Name | Required | Description | Default |
|---|---|---|---|
| active | No | ||
| answer | Yes | ||
| keywords | No | Comma-separated hints for matching. | |
| question | Yes | ||
| category_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish non-readonly, non-destructive, non-idempotent behavior, so the description's job is to add context beyond that. It does so meaningfully: it warns about plan-cap consumption and discloses that embedding occurs immediately with a possible embedding_pending lag state, which is real behavioral information an agent cannot get from annotations. It does not describe what happens on cap exhaustion or how duplicates are handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then the cost warning, then the return-state note. No filler words; each sentence carries a distinct piece of information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does well to name the embedding_pending response field, which an agent would otherwise not anticipate. However, for a five-parameter creation tool at 20% schema coverage, leaving four parameters and all failure modes unexplained leaves the definition only partially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20% — only the keywords parameter carries a description — so the description is expected to compensate. It does not: question, answer, active, and category_id receive no explanation of meaning, defaults, or constraints, and "The answer is embedded" is the only hint about answer semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Create an FAQ" states a specific verb plus resource, which cleanly separates it from list_faqs, update_faq, get_faq and delete_faq in the sibling set. It does not explicitly name those siblings, so differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never says when to reach for this tool versus update_faq (for existing entries) or create_custom_field-style alternatives, nor does it state prerequisites. The only contextual signal is the plan-cap warning, which constrains use without guiding selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_flowA
Create a flow. Creates a DRAFT from a definition (see GET /flows/nodes for the catalogue). The definition is validated first: structure, per-node config, the plan's node cap, channel compatibility with the trigger source, keyword collisions with active flows, and references to custom fields, comment triggers and other flows (422 invalid_definition with errors[] and warnings[]). Nothing runs until you publish and activate. The visual builder lays the nodes out the first time the flow is opened.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| tag_id | No | Tag applied to people who enter the flow. Pro plans and above; ignored otherwise. | |
| channels | No | Must be channels the trigger source can fire on. | |
| definition | Yes | A flow as a graph. Read GET /flows/nodes for every node type, port and config field. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring non-read-only, non-destructive, non-idempotent, the description adds real behavior: upfront validation across structure, per-node config, node cap, channel compatibility and keyword collisions, with a 422 invalid_definition response carrying errors[] and warnings[]. The draft-only state and the layout side effect on first open are disclosed. It doesn't say whether a failed validation leaves any partial object behind.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the draft outcome, then the validation detail, then the lifecycle note. Dense but every sentence carries information; the final sentence about the visual builder layout is the least essential and could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a deeply nested tool with four parameters, nested definition graph, and no output schema, the description covers the creation semantics, the validation surface, the failure signal, and the downstream lifecycle. An agent has enough to call it correctly and interpret a 422.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so the schema carries most field-level meaning, but the description adds a layer the schema cannot express: which aspects of `definition` and `channels` are actually validated (per-node config, channel/trigger compatibility, cross-flow and custom-field references). Individual params like name and tag_id get no added meaning, which keeps it off a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Create a flow") and immediately narrows the effect to "Creates a DRAFT from a definition", which separates it from publish_flow/activate_flow and update_flow. The reference to GET /flows/nodes tells the agent where the definition schema comes from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context: use this to create a draft, and nothing runs until publish and activate. It doesn't explicitly route to validate_flow for pre-checks or to update_flow for changing an existing flow, nor does it state when not to use it, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_postA
Create a post. Creates a draft, or a scheduled post when scheduled_at is set (ISO-8601 with offset; a bare local time is read in the account timezone). Upload media afterwards with POST /posts/{id}/media, then publish or schedule. Rules: TikTok-only posts cannot be a carousel or story and carry no first comment or comment auto-reply; scheduling needs a caption (stories excepted) and a future time; the plan's monthly cap counts scheduled and published posts, a plain draft never holds a slot; a comment auto-reply on a scheduled post needs a free live comment-trigger slot (403 plan_limit_reached). tiktok.privacy_level must be one of the creator's options from GET /posts/capabilities.
| Name | Required | Description | Default |
|---|---|---|---|
| tiktok | No | TikTok settings. Ignored unless TikTok is a target. | |
| caption | No | ||
| hashtags | No | Without the #. | |
| platform | No | A target set. both = Instagram + Facebook; all = all three. | |
| post_type | No | feed_post | |
| scheduled_at | No | ISO-8601. Null on PATCH turns a scheduled post back into a draft. | |
| collaborators | No | Instagram usernames to invite as collaborators. Instagram only. | |
| first_comment | No | Posted under the post right after publish. Instagram and Facebook only. | |
| cover_offset_ms | No | Reels: which frame is the cover. | |
| comment_auto_reply | No | Becomes a comment trigger scoped to this post when it publishes, one per Instagram/Facebook target, with the comment trigger rules. Past the live-trigger cap it is saved paused (see comment_triggers). Instagram and Facebook only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly=false, destructive=false, idempotent=false) the description discloses non-obvious behavior an agent could not guess: a plain draft never consumes a plan slot while scheduled/published posts do, TikTok-only posts reject carousel/story and carry no first comment, and a scheduled-post auto-reply without a free live-trigger slot fails with 403 plan_limit_reached. The timezone interpretation of a bare local time and the paused-save behavior for triggers are exactly the kind of consequences annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and draft-vs-scheduled behavior are front-loaded, then media flow, then a compact "Rules:" block of exceptions. The prose is dense and the TikTok/comment-trigger rule sentences are long, but each clause encodes a real constraint rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with a nested tiktok and comment_auto_reply object, no output schema, and plan-tier gating, the description covers the failure modes and side effects well. The remaining gap is that with zero required parameters it never states the minimum needed to create anything meaningful, nor what the create response returns for the subsequent media upload step.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so the baseline would be 3, but the description adds real meaning on top: scheduled_at accepts ISO-8601 with offset and a bare local time is resolved against the account timezone, and tiktok.privacy_level is constrained to the creator's live options from a sibling endpoint. It does not, however, add anything for platform, post_type, hashtags or caption beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ("Create a post") and immediately narrows the outcome type: a draft by default, a scheduled post when scheduled_at is set. That distinction separates it in spirit from schedule_post/publish_post/update_post, though those siblings are never named, so an agent must infer the boundary rather than read it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear operational sequence (create, then POST /posts/{id}/media, then publish or schedule) and states concrete preconditions: scheduling requires a caption and a future time, TikTok privacy_level must come from GET /posts/capabilities. What's missing is explicit when-not guidance or a named alternative tool for the cases this tool refuses (e.g., where to go for an existing-post edit).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_serviceA
Create a service. Counts against the plan cap. is_virtual is honoured only when Google Calendar is connected and Meet links are on; otherwise it is stored as false. Images are added in the portal.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| price | Yes | ||
| active | No | ||
| currency | No | ISO 4217 code such as USD or EUR. Null means the account default. | |
| is_virtual | No | Bookings get a Google Meet link. Honoured only when Google Calendar is connected and Meet is on. | |
| price_unit | No | ||
| category_id | No | ||
| description | No | ||
| display_order | No | ||
| duration_minutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly=false, destructive=false, idempotent=false), the description discloses two behaviors an agent cannot infer from structured fields: the call consumes plan quota, and is_virtual is silently coerced to false when Google Calendar/Meet conditions are not met. The coercion is the standout detail. It stops short of saying what is returned or whether creation fails on hitting the plan cap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no filler; the core action leads and the caveats follow. The telegraphic phrasing ('Meet links are on') is slightly compressed but still parseable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-idempotent mutation with 10 parameters, low schema coverage and no output schema, the description covers the trickiest parameter and the quota side effect but leaves the price/duration/display_order semantics undefined. An agent would need to guess how price interacts with price_unit before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20% across 10 parameters, so the description is expected to compensate and largely does not. The is_virtual explanation repeats the schema's own description almost verbatim, while price_unit's enum semantics (fixed vs hourly vs per_unit vs quote), duration_minutes, display_order, category_id and active receive no explanation at all. Only the image-exclusion note adds genuine beyond-schema meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a service'), which an agent can immediately place alongside list_services, get_service, update_service and delete_service. It does not explicitly name those siblings to differentiate, but the create/read/update/delete naming makes the split unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Counts against the plan cap' flags a real precondition (quota consumption) an agent should weigh before calling, and the create-vs-update distinction is implied by the name. However, there is no explicit when-to-use/when-not guidance and no pointer to update_service for modifying an existing record.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_tagB
Create a tag. Idempotent on name: 201 when created, 200 when it already existed (colour unchanged).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| color | No | #5046E5 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states "Idempotent on name", but the annotations declare idempotentHint=false. That is a direct conflict about whether a repeated call has additional effect, which is exactly the question an agent needs answered before retrying. The status-code detail (201 vs 200) and the colour-unchanged rule are genuinely valuable, but they are undermined by contradicting the structured metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the operation stated first and the idempotency/status-code behaviour immediately after. Nothing needs trimming.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter create tool with no output schema, the description usefully explains both return paths (201/200), which is what an agent needs to interpret a result. However, the idempotency conflict with annotations leaves the retry-safety question ambiguous, and nothing is said about permissions or what the returned tag looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it does add real semantics: name is the identity key for idempotency, and colour is only applied on first creation ("colour unchanged" on the 200 path). It still omits the colour format/default (#5046E5, hex pattern) and the name length bounds, so it only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ("Create a tag"), which unambiguously separates it from the sibling read/delete/link operations (list_tags, delete_tag, tag_contact). 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the tool is the way to mint a tag before it can be attached via tag_contact. There is no explicit when-to-use/when-not, no statement about prerequisites (e.g. whether the tag must not already exist), and no named alternative for the 'tag already exists' case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_comment_triggerADestructiveIdempotent
Delete a comment trigger. Soft delete: the trigger stops firing and disappears from lists, its stats are kept, and any linked flows are detached and paused (detached_flows says how many).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the annotations: the trigger stops firing, disappears from lists, retains stats, and causes linked flows to be detached and paused. It also notes that a detached_flows count is returned, which is useful operational context for a destructive action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, with the core action stated first and the important soft-delete consequences following immediately. Every clause adds useful information without redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter delete operation with full schema coverage and no output schema, the description is complete enough. It explains the non-obvious soft-delete effects and the detached_flows result, which are the main details an agent would need before invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage and documents the single required id parameter as a numeric id. The description does not add further meaning about the id, but the schema already covers the parameter adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: deleting a comment trigger. It also clarifies that this is a soft delete, which distinguishes the operation from merely updating or pausing a trigger.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb 'Delete' and the soft-delete consequences, but the description does not explicitly say when to use this tool instead of alternatives such as updating or pausing a trigger. There are no exclusions or named sibling alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_documentBDestructiveIdempotent
Delete a document. Removes the document and its embeddings.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, and openWorldHint=true, so the safety profile is fully covered by structured data. The description adds one genuinely useful piece of context beyond that: the document's embeddings are deleted as well, a cascade effect the annotations do not express. It stops short of stating irreversibility, permission requirements, or behavior when the id does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and with zero filler. The second sentence earns its place by adding the embedding cascade, though "Removes the document" slightly restates the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter mutation with rich annotations and no output schema, the description is barely adequate. It omits irreversibility, error behavior for unknown ids, and side effects on anything referencing the document, which matter for a destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a single required integer, so baseline is 3. The description adds nothing beyond the schema and does not clarify that the id is the document id returned by list_documents or get_document, leaving the identifier's origin implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Delete a document") plus a scope detail, so the agent knows exactly what is removed. The resource is unique among siblings (delete_flow, delete_post, delete_tag target other entities), so no explicit sibling differentiation is needed, though none is offered.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 prerequisites or permissions, and no statement about alternatives (e.g., update_document or archiving instead). The agent must infer context 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.
delete_faqADestructiveIdempotent
Delete an FAQ. Removes the FAQ and its embeddings.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description earns credit for disclosing something annotations cannot express: that the FAQ's embeddings are deleted along with the record, a cascading effect an agent should know before calling. It stops short of saying what happens with a nonexistent id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler, and the primary action is front-loaded ahead of the side-effect detail. Nothing redundant is included.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 full annotation coverage and no output schema, the description supplies what matters most: the action and the non-obvious cascade to embeddings. It could add error behavior for missing or already-deleted ids, but overall it is adequate for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter exists and schema description coverage is 100%, so the schema fully documents 'id' as a numeric id. The description adds nothing about the parameter, which matches the baseline 3 for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Delete an FAQ') and adds the side effect that the FAQ's embeddings are removed too, which distinguishes it from siblings like update_faq or get_faq. It doesn't explicitly contrast itself with those siblings, but the verb-resource pairing is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 such as update_faq (for retiring content without deletion) or get_faq, and no stated prerequisites or warnings. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_flowADestructiveIdempotent
Delete a flow. Deletes the flow, its versions, sessions and media. A linked comment trigger is detached and paused. Permanent: the flow, its versions, sessions and analytics are gone. Confirm with the user, and prefer pause_flow.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint and idempotentHint, but the description goes further by disclosing exactly what is destroyed (versions, sessions, media, analytics), the side effect on a linked comment trigger (detached and paused), and the irreversibility of the operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its consequences, then the safety guidance. Slight redundancy between 'Delete a flow' and 'Deletes the flow, its versions...' but every clause carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 scope, side effects, permanence, and the safer alternative — nothing an agent needs to call it responsibly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter ('id') and schema coverage is 100%, so the schema fully documents it. The description adds no format or sourcing detail for the id, which is acceptable at this coverage level but earns only the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a flow') and immediately enumerates the cascade scope (versions, sessions, media), which distinguishes it from siblings like pause_flow or discard_flow_draft.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the preferred alternative ('prefer pause_flow') and adds a procedural guardrail ('Confirm with the user'), so the agent knows both the safer path and the required confirmation step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_postADestructiveIdempotent
Delete a post. Removes the post and its media files. Published posts cannot be deleted (409 not_editable); the live post stays on the platform.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true, so the safety profile is covered structurally. The description adds real value beyond that by disclosing cascading effects (media files are removed), the specific failure mode and error code for published posts, and the resulting external state (the live post remains on the platform). It does not address reversibility or required permissions, which keeps it off 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then effects, then the blocking condition and its consequence. No filler and no repetition of annotation content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive single-parameter mutation with no output schema, the description covers the essential behavior: what gets removed, what fails, and what happens to the external resource. Reversibility and permission prerequisites are the only notable omissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single required parameter at 100% schema description coverage, the schema already tells the agent everything about the `id` field. The description adds no additional meaning about the identifier, such as where to obtain it or whether it refers to an internal post id versus a platform-side id, so it lands at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Delete a post" names a specific verb and resource, and the following sentences define the exact scope of deletion (post plus media files) and its limiting condition. An agent can distinguish this from siblings like update_post, unschedule_post, or publish_post 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-not-to-use rule: published posts cannot be deleted and will surface a 409 not_editable. It stops short of naming the alternative action an agent should take instead (e.g., unschedule or check status first), so the routing guidance is clear but not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_serviceADestructiveIdempotent
Delete a service. Removes the service, its embeddings and its image file.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds valuable behavioral detail beyond annotations by specifying that embeddings and the image file are also removed, which is important cascade information for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the action and followed by the key side effects. Every sentence carries useful information with no wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter destructive tool with rich annotations and full schema coverage, the description provides enough context to call it safely, especially the cascade effects. It could say more about irreversibility or downstream impact, but the essential information is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single id parameter is documented as "Numeric id." The description adds no additional parameter meaning, so the baseline of 3 is appropriate when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: "Delete a service." It is immediately distinguishable from sibling deletion tools such as delete_flow, delete_faq, and delete_document because the resource is explicitly named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states what the tool does but gives no explicit guidance on when to use it versus alternatives such as update_service or get_service. Usage is only implied by the verb "Delete," with no exclusions or prerequisite context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_tagADestructiveIdempotent
Delete a tag. Removes the definition and detaches it from every contact and conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description earns credit for disclosing exactly what is destroyed and the cascade effect on contacts and conversations, which annotations cannot express. It stops short of stating irreversibility or behavior when the id does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the operation and followed by the consequence. Every clause carries information an agent needs; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 annotations and no output schema, the definition covers what an agent must know: what is deleted and the blast radius. A line on irreversibility or on the error case for an unknown id would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required parameter with 100% schema coverage, though the schema text ("Numeric id.") is uninformative about which object the id belongs to. The description adds no clarification about the id's origin or format, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Delete a tag") and immediately qualifies the scope: the definition is removed and the tag is detached from every contact and conversation. That scope sentence is what separates it from untag_contact, which only removes the tag from a single entity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the destructive scope statement, but the description never says when to reach for this versus untag_contact (detach one at a time) or update_tag-style renaming. No prerequisites or warnings about confirming before a global detach are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discard_flow_draftA
Discard a flow draft. Throws away the unpublished draft; the live version stands. Send {} as the body.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare destructiveHint=false, yet the description says the draft is "thrown away" — the description usefully discloses that the draft content is lost while the live version survives, which the annotations do not convey. Remaining gaps: it does not say whether discarding a non-existent draft errors or no-ops (relevant given idempotentHint=false), nor whether confirmation is advisable. The tension with destructiveHint=false is mild and consistent with the common convention that discarding transient draft state is not a destructive update to live resources.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: identity of the action first, the consequence and the preserved state second, the call mechanics last. Nothing is redundant and the most important fact (live version is untouched) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 what is affected, what is preserved, and how to form the call — annotations carry the rest of the safety profile. It lacks only failure/no-draft behavior, which is a minor omission at this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the single `id` parameter is already documented, and the baseline is 3. "Send {} as the body" adds the useful detail that no body payload is needed, but it sits awkwardly against a schema that marks `id` as required with additionalProperties=false, leaving the agent to infer that `id` travels in the path rather than the body.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Discard a flow draft" names a specific verb and resource, and "the live version stands" immediately separates it from the sibling delete_flow, which removes the whole flow. It stops short of naming delete_flow or update_flow explicitly, so the 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase "the unpublished draft" implies the precondition (an unpublished draft must exist) and implies when not to use it (when you want the live flow removed, use delete_flow). There is no explicit when/when-not statement or named alternative, so an agent must infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate_comment_triggerA
Duplicate a comment trigger. Copies every setting into a new trigger named "(Copy)", paused, with fresh stats. Activate it with PATCH active: true. Send Content-Type: application/json with an empty object body; the server refuses a bodiless POST.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, idempotentHint=false, destructiveHint=false), the description discloses the concrete side effects: the copy is named '(Copy)', starts paused, and gets fresh stats. It also reveals two non-obvious invocation requirements — an empty JSON object body and a Content-Type header — which an agent would otherwise get wrong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each with a distinct job: what it does, what the result looks like, and the exact call mechanics. The most important facts (copy semantics, paused state) are front-loaded with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should say what comes back — critically, the new trigger's id, which the agent needs to perform the suggested 'PATCH active: true' step. The invocation mechanics and side effects are well covered, but the return value and how to obtain the copy's id are left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single 'id' parameter, so the schema already carries the meaning. The description adds nothing about which trigger id is expected (source vs. copy), leaving the schema to do all the work, which matches the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb and resource ('Duplicate a comment trigger') and immediately clarifies it produces a new trigger rather than modifying the existing one. This cleanly separates it from create_comment_trigger and update_comment_trigger 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the use case clear: copy an existing trigger instead of rebuilding one, and it explains the follow-up step ('Activate it with PATCH active: true'). It does not explicitly say when to prefer create_comment_trigger over this, but the context is strong enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate_flowB
Duplicate a flow. Copies the flow as a new draft. Send {} as the body.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-destructive, non-idempotent write with no open-world access, so the safety profile is covered. The description adds the genuinely useful fact that the copy lands as a draft rather than being published or activated. However, it says nothing about naming/collision behavior, permissions required, or side effects on the source flow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and result, with no filler. The trailing 'Send {} as the body' is efficient but slightly cryptic in a schema that marks 'id' as required, which costs a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter duplication tool with no output schema, the core action is covered, but the definition never says what comes back — most importantly the new flow's id, which the agent needs to subsequently update or publish the copy. Prerequisite conditions for the source flow are also unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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, so the baseline applies. 'Send {} as the body' does add a little meaning by hinting that id travels as a path parameter and the request body must be empty, but it is terse and an agent could still misread it as meaning id is omitted entirely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Duplicate a flow') and adds the resulting state ('Copies the flow as a new draft'), which distinguishes it from create_flow or get_flow. It does not explicitly contrast itself with any sibling, so it sits just below 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: wanting a copy of an existing flow rather than authoring one from scratch. There is no guidance on prerequisites (must the source flow be published? does it copy the draft or the live version?), no mention of when to prefer create_flow, and no note on what happens to the original.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_accountARead-onlyIdempotent
Get the account. Identity, plan, the calling key and its scope, and the configured webhook endpoints. The cheapest call to prove a key works.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds what the caller actually gets back (identity, plan, key scope, webhook endpoints) and signals low cost, which matters because there is no output schema. It does not describe failure behavior for an invalid key, a notable omission given the key-verification use case.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short clauses with zero filler: purpose first, returned content second, and the cheapest-usage hint last. Every sentence earns its place and the most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read with no output schema, the description covers the essentials by enumerating the returned fields and giving a primary use case. It leaves the error path (invalid or expired key) implicit, which is the one gap an agent hitting a failure would want addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters there is nothing for the description to disambiguate, so the baseline applies. The description correctly implies a no-input call and does not invent parameter language that would confuse the caller.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 the account") and then enumerates what that resource contains: identity, plan, calling key and scope, webhook endpoints. That is far more concrete than a tautology. It stops short of distinguishing itself from nearby siblings such as get_overview or get_account_insights, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"The cheapest call to prove a key works" gives a clear, actionable usage context — validating credentials — which is exactly the kind of guidance an agent needs for a zero-argument tool. It does not state when-not to use it or name an alternative for account analytics, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_insightsARead-onlyIdempotent
Get account insights. Reach, profile views, interactions, saves, shares and follows for your own account over the last 1, 7 or 30 days. This one calls Instagram live, so it takes a moment and counts against Meta's rate limit. 403 permission_required when the account was connected without the insights permission; reconnect it in the portal to fix that.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | 1, 7 or 30. Default 7. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Substantial disclosure beyond the annotations: the call hits Instagram live, is slow, and consumes Meta rate-limit quota. It also documents the exact failure mode (403 permission_required) and the remedy (reconnect the account with the insights permission in the portal) — behavior an agent could not infer from readOnlyHint/idempotentHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler: what it returns, then the operational cost, then the failure mode. The opening 'Get account insights' is a mild restatement of the name, but it front-loads the scope and metrics immediately after.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating the returned metrics, and for a single-parameter read tool it also covers latency, rate limits, and the permission error path. Nothing an agent needs in order to call it correctly and interpret a failure is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the enum already constrains the single parameter, so the description's mention of 'last 1, 7 or 30 days' adds no new semantics. The schema-implied default of 7 is not reiterated, which is fine given full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 enumerates the exact metrics returned (reach, profile views, interactions, saves, shares, follows), scoped to 'your own account' — which separates it from competitor-facing siblings like get_competitor_leaderboard and get_audience_demographics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the eligible time windows (1, 7 or 30 days) and makes clear this is a live Instagram call that costs latency and rate-limit budget, which implicitly tells an agent to call it sparingly and not inside tight loops. It does not explicitly name alternatives (e.g. get_overview or get_audience_demographics) for related metrics, so routing between them is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ai_channelsARead-onlyIdempotent
Get the per-channel AI switches. For meta (Facebook + Instagram share one switch), sms, whatsapp and telegram: whether the channel is connected, whether the AI answers on it, and whether automations run on it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuine behavioral detail beyond that: with no output schema, it discloses the exact response shape (connected / AI answers / automations run per channel) and the non-obvious quirk that Facebook and Instagram share a single meta switch, which would otherwise mislead an agent counting channels.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero padding, with the resource front-loaded in sentence one and the return fields enumerated in sentence two. The parenthetical about meta sharing a switch is the only aside and it earns its place by preventing a miscount.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must carry the return-value burden and largely does by naming all channels and all three per-channel flags. A small gap remains: it does not say the shape is an object/map keyed by channel, nor whether disconnected channels are omitted or returned with false values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. It does still usefully name the fixed channel set (meta, sms, whatsapp, telegram) that the implicit result keys will cover.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Get the per-channel AI switches") and then enumerates exactly which channels and which three properties per channel. This is far more specific than the name alone. It does not, however, differentiate itself from the sibling get_ai_config, so an agent must infer that this is the per-channel view while get_ai_config is presumably the global config.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the description makes clear this is a read of channel status, which an agent would call before toggling anything, but there is no explicit when-to-use, no prerequisite, and no reference to get_ai_config as the alternative for account-wide settings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ai_configBRead-onlyIdempotent
Get the AI configuration. All nine sections in one call. available on file_handling, followups, csat and comment_ai says whether the plan includes that feature.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, closed-world and non-destructive, so the safety profile is fully covered. The description adds that the response contains all nine sections and that file_handling, followups, csat and comment_ai are plan-entitlement booleans — useful return-content context, though it omits what the other five sections are.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, but the last one is awkwardly constructed ("available on file_handling, followups, csat and comment_ai says whether the plan includes that feature") and forces re-parsing. Front-loading the purpose is good; the labeling of the four flags could be far cleaner.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining the return value, and it only partly does: it names four of the nine sections and gives no shape for the rest. Adequate to call correctly, but an agent cannot predict the payload structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 disambiguate; baseline 4 applies. The description correctly implies a no-argument call that returns the full configuration.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get the AI configuration") and adds scope ("All nine sections in one call"), which distinguishes it from narrower siblings like get_ai_channels. The final sentence is understandable as a description of entitlement flags but is grammatically garbled enough to slow an agent down.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the name — an agent can infer it should call this to inspect AI settings. There is no explicit statement of when to prefer it over get_ai_channels or other config-reading siblings, and no prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_appointmentCRead-onlyIdempotent
Get an appointment. One appointment by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is fully covered structurally. The description adds no behavioral context beyond that — no note on missing-record behavior, no fields returned, no permissions. With annotations the bar is lower, but nothing extra is contributed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two brief sentences, front-loaded with the action, with no filler. It is efficient but so sparse that brevity comes at the cost of substance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 rich annotations, the description is minimally sufficient to invoke correctly. It stops short of describing the returned appointment or error behavior, which would matter given there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one required integer 'id', and the description's 'by id' merely echoes it. Baseline 3 applies since the schema carries the parameter semantics and the description adds no format or lookup nuance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a generic verb with the resource and adds cardinality ('One appointment by id'), which implicitly distinguishes it from list_appointments. However, it is close to a restatement of the name/title and does not explicitly contrast with siblings like list_appointments or get_availability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 alternative for looking up appointments by other criteria, and no mention of what happens if the id is unknown. The agent must infer everything except the single-id retrieval case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audience_demographicsARead-onlyIdempotent
Get audience demographics. The latest stored breakdown of your followers: gender and age as percentages, top countries and cities with counts, and followers online by hour when Instagram supplies it. 404 until the first refresh. Instagram withholds all of it for accounts under roughly 100 followers, which comes back as zeros rather than an error. Includes followers online by hour, which is what "when should I post" is answered from.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds information they cannot carry: the 404-before-first-refresh behavior and the zeros-not-errors degradation for small accounts. Those are exactly the failure modes an agent needs to interpret a bad-looking response correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core statement, then the data availability caveats, then the use case. Mostly tight, but 'followers online by hour' is stated twice (mid-description and again in the closing sentence), which is a small redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema, and no nested objects, the description carries the full explanatory load and does so: it describes the return shape field by field and covers both empty-state conditions. Nothing needed to interpret a successful or failing call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 spends its budget on return content and edge cases instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get audience demographics') and immediately enumerates the breakdown: gender/age percentages, top countries and cities, followers online by hour. That content profile implicitly separates it from a generic sibling like get_account_insights, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real operating context: 404 until the first refresh, and Instagram withholding data for accounts under ~100 followers. It also names the downstream question this answers ('when should I post'). It stops short of explicitly routing to or away from alternatives such as get_account_insights or get_follower_history.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_availabilityARead-onlyIdempotent
Get availability. The open slots for one day, from business hours, the service duration, the buffer, the minimum notice and existing bookings. What the bot and the portal picker offer. Empty on a closed day.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Location-specific availability. | |
| date | Yes | YYYY-MM-DD in the account timezone. | |
| state | No | Location-specific availability. | |
| service_type | No | A bookable service name; sets the slot length. Default 30 minutes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuine behavioral context beyond that: the slot computation draws on business hours, service duration, buffer, minimum notice and existing bookings, and the 'Empty on a closed day' note flags an important edge case an agent would otherwise misread as an error.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence and the whole text is three short sentences with no filler. The middle sentence is a verbless list fragment, which reads as telegraphic rather than flowing prose, but it is dense with useful information rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with full schema coverage and no output schema, the description covers what is computed, what the result represents, and the empty-result case. Return shape details (list of timestamps vs. free/busy windows, timezone of the returned slots) are not stated, which is the main remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented in the schema, making 3 the baseline. The description reinforces that the output is scoped to a single day and hints that service duration affects slot length, but it adds no syntax, format or interaction detail (e.g. how city/state interact with service_type) beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Get availability... the open slots for one day') and enumerates the inputs that shape the result: business hours, service duration, buffer, minimum notice, existing bookings. It is clear what the tool returns, but it never names a sibling such as book_appointment or list_appointments, so differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 pre-booking slot lookup, and 'What the bot and the portal picker offer' signals that results match the customer-facing surfaces. There is no explicit 'call this before book_appointment' instruction and no statement of when not to use it or what to do if the result is empty.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_comment_manager_statsBRead-onlyIdempotent
Get comment manager stats. How many replies are waiting for approval, and today's and this month's handled, replied and moderated counts against the plan's caps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is a read-only, idempotent, non-destructive operation, so the safety profile is covered. The description adds useful behavioral context by saying the counts are measured against plan caps and by identifying the approval queue metric, but it does not explain update frequency, timezone boundaries for 'today', 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loads the purpose before listing metrics. The first sentence largely restates the tool name, but it is short enough that it does not obscure the useful metric details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only stats tool, the description identifies the main metric categories and the plan-cap comparison. It is slightly incomplete because there is no output schema and the description does not specify the exact response structure, but it is sufficient for an agent to understand what the call returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
This tool has zero parameters, so there is no parameter semantics to add. The baseline for a zero-parameter tool is 4, and the description does not create any misleading parameter expectations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 comment manager stats) and enumerates the exact metrics covered: pending reply approvals plus today/month handled, replied, and moderated counts versus plan caps. It is clear what the tool does, but it does not explicitly distinguish itself from the sibling get_comment_trigger_stats tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description describes the stats returned but gives no explicit guidance on when to use this tool versus alternatives such as list_handled_comments or get_comment_trigger_stats. Usage is only implied by the metric list, so an agent must infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_comment_triggerBRead-onlyIdempotent
Get a comment trigger. One trigger by id with its linked flows.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered elsewhere. The description's one addition is that the response embeds the trigger's linked flows, which is useful return-shape context absent from any output schema. It reveals nothing about not-found behavior or error cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the verb and resource, with no filler. The first sentence largely restates the annotation title, which is a minor redundancy rather than waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with complete annotations, this is nearly sufficient: it identifies the target, the lookup key, and the notable return content. Only not-found and error semantics are left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema description coverage, the schema already documents the id field. The description's "by id" is consistent with the schema but adds no new meaning such as id source or format caveats. Baseline 3 applies when the schema carries the documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get a comment trigger") and clarifies the scope as a single record retrieved by id, which distinguishes it from the sibling list_comment_triggers by singular vs plural. It does not explicitly name the listing sibling as an alternative, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance and no mention of alternatives such as list_comment_triggers. The single-record framing implies a lookup, but the agent must infer the selection criteria entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_comment_trigger_statsARead-onlyIdempotent
Get comment trigger stats. Lifetime counters for one trigger: fires, public replies, DMs (and how many were AI-written), link clicks, unique people, split by channel.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description still adds real behavioral value by specifying that the counters are 'lifetime' (i.e. cumulative with no date-range filtering available) and that results are 'split by channel', which an agent cannot learn from the annotations or the one-field schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and scope, followed by a compact enumeration of returned counters. No filler, no restatement of the title beyond the necessary opening clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns, and it does list every notable counter and the channel split. It stops short of saying how those values are shaped (flat numbers vs. per-channel breakdown objects) or what is returned when a trigger has never fired, which is a minor gap for a read-only stats tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter at 100% schema coverage, where the schema says 'Numeric id.' The phrase 'for one trigger' clarifies that the id identifies a comment trigger rather than a post or flow, but no further meaning (where to obtain the id, error behavior for unknown ids) is added. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get comment trigger stats') and immediately scopes it to 'one trigger', then enumerates exactly what is counted (fires, public replies, DMs, AI-written DMs, link clicks, unique people, per channel). This clearly separates it from a config-read sibling like get_comment_trigger and from the account-wide get_comment_manager_stats, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 metrics view rather than the configuration view, but the description gives no explicit 'use this when you want performance numbers, use get_comment_trigger for settings, use get_comment_manager_stats for the aggregate' guidance. No prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_competitorARead-onlyIdempotent
Compare against one competitor. That competitor and your own account side by side, with the per-metric differences the portal shows. Stored snapshots, no Meta call.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description still earns credit by adding data-freshness context that annotations cannot express: results come from 'stored snapshots, no Meta call', telling the agent figures may be stale and that the call is cheap and offline. It does not explain behavior for an unknown or unlinked competitor id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and followed by the result shape and the data-source caveat. Nothing is wasted, though 'the per-metric differences the portal shows' is slightly circular phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the work of telling the agent what comes back: competitor and own account side by side plus per-metric deltas. For a one-parameter read tool with full annotation coverage this is nearly complete; only error/empty-competitor behavior is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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's param text is just 'Numeric id.', but the description's 'compare against one competitor' usefully implies the id identifies that competitor rather than an account or post; it adds no format, validation or lookup hints beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and scope: compare against exactly one competitor. It implicitly separates this from list_competitors and get_competitor_leaderboard via the 'one competitor' framing, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: reach for this when you need a head-to-head for a single competitor. There is no explicit when-not guidance and no pointer to the leaderboard/overview tools for the multi-competitor or aggregate case, so the agent must infer the routing itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_competitor_leaderboardARead-onlyIdempotent
Get the leaderboard. Your account and every competitor ranked together: followers, engagement rate, posts per week, average likes and comments, follower growth per day and the content mix (reels, photos, carousels). This is the table behind the portal's Market Intel page. Stored snapshots, so it is instant and spends no Meta quota. Your account and every competitor ranked together. Start here for any "how do I compare" question.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Window in days. Default 30. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive and closed-world, so the bar is lower; the description still adds real value by disclosing that results come from stored snapshots, are instant, and consume no Meta quota. It doesn't say how stale the snapshot may be or that refresh_market_intel exists to update it, which is the one behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Metrics are front-loaded and the quota/snapshot note earns its place, but "Your account and every competitor ranked together" is repeated verbatim in two separate sentences, which is unambiguous waste. The "table behind the portal's Market Intel page" line is useful orientation but adds length to an already-redundant paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with full annotation coverage and no output schema, the description supplies what the schema cannot: what fields the ranking actually contains. Only the snapshot freshness/refresh path is unaddressed, which is minor for a cached read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single enum parameter already documents the 7/30/90 window and default of 30. The description adds no syntax, default, or interpretation 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource and enumerates exactly what is ranked: followers, engagement rate, posts per week, average likes/comments, follower growth per day, and content mix. It also disambiguates from neighbors like get_competitor and get_wins_and_opportunities by framing the tool as the combined account-vs-competitor comparison table.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Start here for any 'how do I compare' question" gives explicit entry-point guidance for a whole class of queries. It stops short of naming an alternative (e.g. get_wins_and_opportunities for the diagnostic follow-up, refresh_market_intel for fresher data), so the when-not-to-use case is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contactCRead-onlyIdempotent
Get a contact. One contact by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds no behavioral context beyond that — it says nothing about error behavior when the id doesn't exist, permissions required, or what a contact record contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded, but the second sentence ('One contact by id.') largely restates the first instead of earning its place with new information. Two sentences where one well-built sentence would carry the same payload.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple one-parameter read tool with full schema coverage and rich annotations, and there is no output schema, so the description needn't explain return values in depth. However, nothing indicates what identifying key 'id' refers to (CRM contact id vs. external id) or what the agent gets back, leaving a small but real gap for a retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (the single 'id' parameter is documented as 'Numeric id.'), so the schema carries the parameter semantics. The description only restates 'by id' and adds no meaning such as id source, format constraints, or what happens with an unknown id; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 a contact') plus the addressing mode ('One contact by id'), so an agent knows this is a single-record retrieval. It does not distinguish itself from siblings like list_contacts, get_account, or upsert_contact, which is the one thing keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'One contact by id' weakly implies 'use this when you have an id and need exactly one contact', but there is no explicit when-to-use, when-not-to-use, or named alternative. With list_contacts and upsert_contact in the sibling list, the agent must infer the routing decision on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conversationCRead-onlyIdempotent
Get a conversation. One conversation by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds nothing beyond that — no note on what happens when the id is unknown, no indication of what a conversation record contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two very short sentences with the core action front-loaded; no padding or preamble. The second sentence largely restates the first, so it is efficient but slightly redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 minimum: what it fetches and by what key. It omits error behavior for a missing id and any hint about the shape of the returned conversation, leaving the agent to discover those.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter, and the schema already documents it as a numeric id. The description's "by id" merely echoes that, adding no format, range, or provenance detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get a conversation" names a specific verb and resource, and "One conversation by id" scopes it to a single record, which implicitly separates it from list_conversations. It does not explicitly name that sibling, so the differentiation is inferable 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance: nothing says to call this only after obtaining an id from list_conversations, or how it relates to list_messages or update_conversation. 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.
get_documentARead-onlyIdempotent
Get a document. One document by id, metadata only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered without the description. The one genuinely additive fact is "metadata only", which tells the agent the document body is not returned — a real behavioral detail not encoded in any structured field. Beyond that (error behavior for missing ids, what metadata fields exist) nothing is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and immediately narrowed to the by-id, metadata-only scope. "Get a document." is partially redundant with the sentence that follows, but the total length is small enough that nothing meaningfully burdens the agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 rich annotations and no output schema, the description covers invocation adequately. It is thin on returns, though: with no output schema present, the phrase "metadata only" is the sole signal about what comes back, and it doesn't indicate which metadata fields or what happens for an unknown id.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single id parameter, so the schema already carries the semantics and the baseline is 3. The description's "by id" phrasing matches and lightly reinforces the lookup key, but adds no format, range, or error semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get a document. One document by id, metadata only." names a specific verb and resource and constrains the scope to a single item by id, plus a key qualifier that only metadata is returned. It does not, however, differentiate itself from siblings like list_documents or update_document, so an agent must infer the boundary 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: fetch a single document when you already have its numeric id and want metadata. There is no explicit when-not guidance, no mention of what to use instead if the document body is needed, and no pointer to list_documents for discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_faqCRead-onlyIdempotent
Get an FAQ. One FAQ by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered without the description. The description adds nothing beyond that: no error behavior for a missing id, no note on response contents. With the annotations carrying the burden, this is thin but not contradictory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the verb and resource. The second sentence largely restates the first, so it is slightly redundant but far from verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple single-parameter getter with rich annotations and full schema coverage, so little is required. However, with no output schema, the description says nothing about what an FAQ record contains or what a not-found response looks like, leaving a modest gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a single documented integer id parameter, so the schema does the work. The phrase "by id" adds no format, range, or lookup semantics beyond what the schema states; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get an FAQ" gives a specific verb and resource, and "One FAQ by id" clarifies the singular scope, implicitly distinguishing it from the sibling list_faqs. It stops short of naming the sibling or describing what an FAQ record contains, so it is clear but not maximally differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no mention of the list_faqs alternative, and no preconditions such as required permissions or behavior when the id does not exist. The usage is only implied by the word "Get."
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flowBRead-onlyIdempotent
Get a flow. One flow by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish a read-only, idempotent, non-destructive operation, and the description does not conflict with them. Beyond restating single-record retrieval, it adds no behavioral context such as draft or published-state handling, not-found behavior, or the returned representation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely compact and puts the operation first, with the second sentence adding single-record lookup scope. Its wording is somewhat redundant and fragmentary, but there is no substantial unnecessary material.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter getter, the definition is sufficient to construct a call, and the annotations cover its safety profile. It is less sufficient for choosing confidently among get_flow, list_flows, and get_flow_definition, or for knowing whether the result is metadata, a full flow, or a draft, with no output schema to fill that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and id is already required, integer-typed, and described as "Numeric id." The description's "by id" adds retrieval cardinality but no new parameter semantics such as ID provenance or lookup constraints, so the fully documented schema baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description supplies a clear verb and resource and narrows the operation to retrieving one flow by ID. It does not distinguish the returned flow from the sibling get_flow_definition, so it is clear but not differentiated from relevant siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase "One flow by id" implies use when a specific numeric ID is already known, so the usage context is partially inferable. It never directs agents to list_flows for discovery or get_flow_definition for definition content, and provides 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.
get_flow_analyticsARead-onlyIdempotent
Get flow analytics. The builder's Analytics panel for one flow: runs, completions, completion rate and median time for the window, the same numbers for the preceding window (comparison), lifetime totals, outcomes (emails and phones collected, leads marked, bookings, link clicks, handoffs), per-node reach, continue, response and loss rates, and per-port branch splits. Analytics are per published version: version defaults to the current one; versions lists the others. Only sessions with tracking are counted; other_version_runs_excluded says how many ran under another version in the window.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. | |
| range | No | Window: 7d, 30d, 90d or all. Default 30d. Comparison is null for all. | 30d |
| channel | No | Only sessions on this channel. | |
| version | No | A published version number from versions[]. Default: the current version. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds genuinely non-obvious behavioral caveats: only tracked sessions are counted, other_version_runs_excluded quantifies runs under a different version, and comparison is null for range=all. It does not mention auth or rate limits, but for a read-only reporting call those gaps are minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded, and the long metric enumeration is dense but each item is informative for an agent that cannot see an output schema. There is minor redundancy (the comparison-window point is stated twice, once in prose and once in the schema) and the single-paragraph form makes the metric list hard to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, this description carries the full burden of explaining the return payload, and it does so thoroughly — window metrics, comparison window, lifetime totals, outcomes, per-node reach/continue/response/loss rates, per-port branch splits, and the versions list. Combined with the tracking-only caveat, an agent has enough to interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 id, range, channel and version, including the 7d/30d/90d/all enum and the comparison-null note. The description adds only modest value beyond that — chiefly that the response's 'versions' list is how an agent discovers valid version numbers not covered by an enum — so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Get flow analytics') and immediately scopes it to 'the builder's Analytics panel for one flow', then enumerates the exact metrics returned. This distinguishes it clearly from siblings that deal with raw flow data (list_flow_sessions, list_flow_events, get_flow_definition) without the agent needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives useful scoping context — analytics are per published version, version defaults to the current one, and 'versions lists the others' — which tells the agent how to get meaningful results. However, it never names an alternative tool or states when to prefer raw session/event listings over aggregate analytics, so the when-to-use-with-what 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.
get_flow_definitionARead-onlyIdempotent
Get a flow definition. The definition alone: the draft when one exists, else the published version.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive behavior, but the description adds genuinely new information: the returned definition is the draft when one exists, otherwise the published version. That resolution logic is real behavioral context an agent could not derive from the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and immediately followed by the scoping/fallback rule. Every clause carries information; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does some work on the return value by stating it is the draft-or-published definition, but it says nothing about the structure or size of that definition. For a single-parameter read tool this is nearly complete, with only the shape of the returned payload left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 ("Numeric id."), so the schema already carries the burden. The description adds no further meaning about what the id refers to or how to obtain it, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 a flow definition") and clarifies scope with "The definition alone," which implicitly separates it from siblings like get_flow. However, it never names those siblings, so an agent must infer the distinction rather than being told.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: "the definition alone" hints that this fetches the raw definition body whereas other flow tools fetch metadata or catalogues. There is no explicit when-to-use guidance, no named alternative, and no stated preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flow_node_catalogueARead-onlyIdempotent
Get the node catalogue. Everything needed to build a flow: every trigger source (channels it can fire on, whether it needs keywords, its config), every node type (input and output ports, config fields and allowed values, which are terminal), the enums, the placeholders, the structural rules, and this account's live options: custom fields, tags, bookable services, flows (for goto_flow), comment triggers (for linked comment flows), the plan's node and flow caps. Read it before composing a definition. Read this before writing a flow definition. It lists every node type, its config fields and output ports.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world, non-destructive behavior, so the safety profile needs no repeating. The description still adds real value beyond them by disclosing that the payload is partly account-scoped (custom fields, tags, services, existing flows, comment triggers, plan caps), which tells the agent the result varies per account and can be used to plan around limits. It says nothing about response size or shape, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is front-loaded and information-dense, but the last two sentences restate material already given: "Read this before writing a flow definition" duplicates "Read it before composing a definition," and "It lists every node type, its config fields and output ports" repeats the list in sentence two. Roughly a third of the description is redundant, which costs it on this dimension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no input parameters and no output schema, the description carries the full burden of telling the agent what comes back, and it does so thoroughly by inventorying trigger sources, node types, ports, enums, placeholders, rules, and account-specific options. What it omits is any sense of payload shape or size, which matters for a catalogue payload this broad, so it falls just short of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is no per-argument meaning to add; baseline 4 applies. The description correctly describes a zero-argument call, leaving nothing ambiguous about invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ("Get the node catalogue") and then enumerates exactly what the catalogue contains: trigger sources with channels and keyword requirements, node types with input/output ports and config fields, enums, placeholders, structural rules, plus live account data. That enumeration makes it unmistakable versus siblings like get_flow_definition or get_flow, which return actual flows rather than the build-time vocabulary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The directive is explicit and repeated: read it before composing a flow definition. That is clear when-to-use guidance. It stops short of naming alternatives (validate_flow, create_flow) or an explicit when-not-to-use case, so it lands at 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_flow_sessionCRead-onlyIdempotent
Get a flow session. One session by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, and destructiveHint=false, so the safety profile is fully covered. The description adds nothing beyond that: no note on what a session contains, whether ids are tenant-scoped, or what happens with an unknown id. With annotations doing all the work, this is a minimal contribution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments, front-loaded with the action and no filler. The second sentence is nearly redundant with the first, but the size is well matched to the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description carries the burden of explaining what is returned, and it says nothing about the session object's contents, shape, or error behavior. Combined with zero usage guidance among many flow-related siblings, an agent has to guess at both selection and interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema description coverage, the schema already documents the id. "By id" in the description merely echoes the schema's "Numeric id." and adds no format, provenance, or lookup 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.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get a flow session. One session by id." names a verb and resource, but it largely restates the tool name and title. The phrase "one session by id" adds a hint of singular retrieval, distinguishing it weakly from list_flow_sessions, yet the sibling is never named and the distinction is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 instead of list_flow_sessions, list_flow_session_events, or get_flow. The agent must infer that this is the single-record lookup from the word "one" alone, with no prerequisites or exclusions stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_follower_historyARead-onlyIdempotent
Get follower history. Follower count and engagement rate over the window, one series per account including your own, oldest point first. One point per day that a snapshot was taken, so gaps mean nobody refreshed that day.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Window in days. Default 30. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so the safety profile is covered. The description adds genuinely non-obvious behavior: one series per account including the caller's own, oldest-point-first ordering, one point per snapshot day, and that gaps mean nobody refreshed — all of which prevents misreading the data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core purpose, then output composition, then the data-granularity caveat. Nothing is redundant with the title or schema, and every sentence carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description bears responsibility for explaining return values, and it does so well: metrics, per-account series, ordering, and gap semantics. The only gap is the concrete container/shape of the response (e.g., whether series are keyed by account id), which would make it fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'period' parameter is fully documented with its enum and default, so the schema carries the load. The description only refers to 'the window' without adding format or interpretation detail beyond that, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (follower history) and immediately specifies the metrics returned — follower count and engagement rate — plus the per-account series structure. It is clearly distinguishable from sibling analytics tools like get_overview or get_account_insights, though it never explicitly compares itself to them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by describing a time-windowed trend series, which tells an agent this is for historical/trend questions rather than a current-state lookup. However, there is no explicit when-to-use versus when-not, and no mention of the sibling insight tools an agent might otherwise pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_handled_commentBRead-onlyIdempotent
Get a handled comment. One log row by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered without the description. The sentence "One log row by id" adds a small amount of behavioral context about the result shape (a single record identified by id), but it says nothing about error behavior when the id does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the operation and then the return shape, with no filler. The second sentence is a fragment, which slightly reduces readability but wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Wait — recomputing against complexity: the tool is a simple one-parameter read with full schema coverage and complete annotations plus no output schema, so the description does not need to explain return fields. What is genuinely missing is the meaning of a 'handled comment' and the not-found behavior. Hmm, that gap is real. Reassessing: the definition is adequate for a trivial get-by-id, but the term 'handled comment' is the whole resource and is left undefined, and no fallback is described for a missing id. That is a moderate gap rather than a severe one, so 3 fits better than 4. Final: 3.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required parameter with 100% schema description coverage, so the schema already carries the burden. The description only restates that lookup is 'by id' and adds no format, range, or provenance guidance (for example, where valid ids come from), so it does not exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a verb and resource ("Get a handled comment") and clarifies the return granularity as "one log row by id," so the basic operation is discernible. However, "handled comment" is never explained, and with a sibling named list_handled_comments the description does nothing to distinguish single-fetch from list behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 prerequisites such as needing an id from list_handled_comments, and no named alternative. The agent must infer the relationship to list_handled_comments and the approve/reject sibling tools entirely on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_knowledge_usageARead-onlyIdempotent
Get knowledge base usage. How many items exist against the plan cap, broken down by FAQs, services and documents, plus document storage. Check can_add before creating.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds value beyond that by disclosing the shape of the result (counts vs plan cap, per-category breakdown, storage) and its role as a gating check before creation. No auth or rate-limit context, but that is minor for a read-only usage endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the purpose, then the return contents, then the actionable workflow hint. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of explaining return values, and it does so adequately by naming the counts, breakdown and storage figure. It could be slightly richer (e.g. whether the cap is a hard limit or what happens at 100%), but an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 disambiguate; the baseline for a parameterless tool applies. The description correctly implies no filtering or scoping inputs are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get knowledge base usage') and then enumerates exactly what is returned: item counts against the plan cap broken down by FAQs, services and documents, plus document storage. This clearly separates it from listing siblings like list_faqs or list_documents, though it doesn't name those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing sentence 'Check can_add before creating' gives a concrete pre-flight workflow, which is real when-to-use guidance. It stops short of stating when not to use it or naming a direct alternative, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_overviewARead-onlyIdempotent
Get the account overview. The numbers behind the portal's Overview page, computed by the same data layer: a rolling window against the same length of time before it (current/previous pairs). Messages per channel, AI vs automation replies, flow entries (with an attached comment trigger's fires on the flow's own row so a comment is never counted twice), standalone comment trigger fires, contacts, appointments with the next few, knowledge gaps by status, what needs a human, API sends, and plan usage for the billing cycle. Usage is always the billing cycle, whatever the range.
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | Window: 7d, 30d or 90d. Default 30d, which is what the page shows. The previous window is the same length, so 7d compares against the 7 days before it. | 30d |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and idempotent annotations, it discloses same-data-layer parity with the portal, rolling current/previous comparisons, comment-trigger attribution that prevents double counting, and the billing-cycle exception for usage. These are material calculation and scope behaviors that affect interpretation of the results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the three sentences contain substantial useful information with little redundancy. The long middle sentence and nested parenthetical make the metric inventory harder to scan than a structured list would.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with one optional parameter, it supplies enough scope, comparison, and content information to support correct selection and invocation despite the absence of an output schema. It is less complete about response organization and leaves phrases such as 'what needs a human' and appointments 'with the next few' somewhat ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the allowed ranges, default, and equal-length previous window. The description adds the important scope rule that plan usage remains billing-cycle based regardless of range, though it does not further define window boundaries or timezone behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening verb and resource are specific, and mapping the result to the portal's Overview page establishes this as an account-wide aggregate. The cross-domain metric inventory also distinguishes it from narrower siblings covering flow analytics, comment-trigger statistics, or knowledge gaps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly supports cases where the agent needs the portal Overview numbers or a broad current-versus-previous account summary. It does not explicitly say when to prefer specialized alternatives such as get_account_insights, get_flow_analytics, or get_comment_trigger_stats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_postARead-onlyIdempotent
Get a post. One post with its media, published ids and any error.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare read-only, idempotent, non-destructive, closed-world behavior. Beyond that, the description adds useful detail about the returned payload: media, published ids, and any error. It does not describe auth requirements, not-found behavior, or pagination, but for a simple get-by-id tool it adds meaningful context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences and front-loads the core operation. The first sentence ('Get a post.') is slightly redundant with the tool name and title, but the second sentence efficiently adds return-content detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with annotations covering safety and no output schema, the description is largely complete because it explains the key returned contents. It could be more complete by mentioning lookup-by-id or error conditions, but the essential context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the sole 'id' parameter documented as a numeric id. The description does not mention the parameter at all, so it adds no meaning beyond the schema; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 a post') and clarifies the scope as one post rather than a list, which distinguishes it implicitly from list_posts. It does not explicitly name a sibling alternative, but the singular scope makes the purpose clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: retrieving a single post by its id, with list_posts presumably used for listing. There is no explicit when-to-use or when-not-to-use guidance, nor any mention of alternatives such as list_recent_posts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_posting_capabilitiesARead-onlyIdempotent
Get posting capabilities. What to read before building a post: which targets are connected, the TikTok creator's allowed privacy levels and video limit (live from TikTok, with a safe fallback), the post types, and the plan's monthly post cap and storage cap with current usage.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds real behavioral context beyond that: values are live from TikTok, degrade to a safe fallback, and caps are reported with current usage (i.e. a mutable snapshot). It does not explain the fallback's shape 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A short lead sentence followed by a single colon-delimited list, so the purpose is front-loaded. The list is dense and each item names a distinct returned fact, though the long clause about the TikTok creator's privacy levels and video limit is slightly run-on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry the return payload, and it does so by enumerating every category of data returned. It stops short of describing the response's structure, nesting, or how the TikTok fallback is signaled, which leaves a small gap for a discovery-type tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 disambiguate and the baseline applies. The description correctly implies the call is argument-free and result-deterministic per account.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Get posting capabilities') and then enumerates exactly what is returned: connected targets, TikTok privacy levels and video limit, post types, and plan caps with current usage. An agent can tell this apart from siblings like get_account or get_overview 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'What to read before building a post' explicitly frames the call as a pre-flight step before create_post/schedule_post. It gives a clear trigger condition but does not name an alternative tool or state when not to call it, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_serviceCRead-onlyIdempotent
Get a service. One service by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds nothing beyond that — no note on what happens when the id does not exist, or whether the id refers to a service record vs. a flow/etc. For an annotated tool this is minimal added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded, but the second sentence is redundant with the first and the brevity stems from under-specification rather than tight editing. One sentence could have carried the same plus more.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 rich annotations and no output schema, little is strictly required. Still, the description says nothing about what a 'service' is in this domain or what the response contains, leaving the agent to guess relative to siblings like get_faq or get_flow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter 'id' is documented as a numeric id. The description's "by id" adds no format, source, or lookup semantics (e.g., how to obtain a valid id, whether it comes from list_services). Baseline 3 applies when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb and resource are named ("Get a service"), which is more than a bare restatement of the name, but the second sentence ("One service by id.") only rephrases the first. Nothing distinguishes it from siblings like list_services or get_faq, so an agent gets the gist but no differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 list_services for enumeration vs. single retrieval, and no prerequisites or error conditions. The agent must infer usage 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_top_postsARead-onlyIdempotent
List your top posts. Your own recent posts with their stored performance: reach, impressions, likes, comments, saves, shares, video views, engagement rate and save rate. Newest first. Stored, so refresh first for current numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1 to 50. Default 12. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, idempotent, closed-world safety profile, yet the description still adds real behavior: results come from stored data and may be stale, ordering is newest-first, and the exact metric set is enumerated. It does not mention pagination or result caps, but the staleness and ordering disclosure is exactly the kind of context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the returned fields, then ordering, then the staleness caveat — a sensible information order with no filler. Slight redundancy between "top posts" and "your own recent posts," which reads like a hedge rather than two distinct facts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates well by listing returned metrics and stating sort order and data freshness. The remaining gap is that a tool named "top posts" never explains whether anything is ranked by performance, nor how it differs from list_recent_posts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single optional limit parameter at 100% schema description coverage, so the schema already conveys range and default. The description says nothing about limit, which is acceptable given full coverage, but it adds no meaning beyond the schema and does not explain whether limit applies before or after any ranking.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ("List your top posts") and immediately enumerates the metrics returned, so an agent knows what it gets. The phrase "Your own recent posts" clarifies scope, but it leaves ambiguity against the sibling list_recent_posts, which is not named or distinguished.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: "Stored, so refresh first for current numbers" is a useful prerequisite hint, but there is no explicit when-to-use statement, no exclusions, and no routing to alternatives despite list_posts, list_recent_posts and get_post all being plausible substitutes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wins_and_opportunitiesARead-onlyIdempotent
Get wins and opportunities. The comparisons already computed against each competitor over the last 30 days: where you are ahead (wins) and where they are (opportunities), each with the metric and the size of the gap. Derived from stored snapshots, no AI involved.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description still adds real context beyond them: the 30-day comparison window and the fact that values come from stored snapshots with no AI involved, which tells an agent the data may be stale and is deterministic. It does not say how to force freshness, but that is what the sibling refresh tool is presumably for.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the resource name and immediately followed by the definitions an agent needs. Every clause carries information — the time window, the two categories, the per-item fields, and provenance — with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description carries the burden of describing return content, and it does: a per-competitor set of wins and opportunities, each with a metric and gap size over a 30-day window. What is missing is any sense of scale, ordering, or whether an empty result means 'no competitors configured' versus 'no gaps found' — minor, but an agent would want it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 disambiguate and the baseline of 4 applies. The description does not invent implicit filters, correctly matching the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete verb+resource (get wins and opportunities) and then defines both terms precisely: wins are where you are ahead, opportunities are where the competitor is, each carrying a metric and gap size. That definition removes most ambiguity. It stops short of naming a sibling (e.g. get_competitor_leaderboard or refresh_market_intel) for contrast, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: phrasing the output as 'comparisons already computed' and 'derived from stored snapshots' hints this is a read of precomputed data rather than a recomputation, which subtly points an agent away from refresh_market_intel. There is no explicit when-to-use, when-not-to-use, or prerequisites (e.g. whether competitors must be added first).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_appointmentsBRead-onlyIdempotent
List appointments. In-chat bookings, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1 to 100. Default 25. | |
| status | No | Exact match on the stored status, for example confirmed or cancelled. Not validated. | |
| starting_after | No | The next_cursor from the previous page. | |
| conversation_id | No | Appointments booked in one conversation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds two genuinely new facts beyond those annotations: results are scoped to in-chat bookings and are ordered newest first. It omits pagination behavior (cursor paging, default page size of 25) even though that is the main operational trait of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler. The second is a sentence fragment that packs ordering and scope together, which is efficient but makes the scope constraint slightly harder to parse than a full clause would be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter, read-only list tool with full schema coverage and no output schema, most of what an agent needs is in structured fields. Still missing is how pagination terminates and whether the "in-chat bookings" scope means non-chat appointments are excluded entirely, both of which affect correct invocation and interpretation of results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so limit, status, starting_after and conversation_id are each documented in the schema, including the default of 25, the 1-100 range, the next_cursor convention, and the note that status is unvalidated. The description adds nothing about parameters beyond the ordering claim, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ("List appointments") plus a scope qualifier ("In-chat bookings") and an ordering ("newest first"), which distinguishes it from get_appointment and book_appointment. It stops short of saying explicitly that it is the enumeration counterpart to get_appointment, and "In-chat bookings" is left slightly ambiguous as to whether it is a hard filter or just a hint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word "List" plus the plural resource implies the browse/enumerate case, and the ordering hint supports that. However there is no explicit when-to-use/when-not guidance, no mention of using get_appointment for a single record, and no statement of prerequisites or auth requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_blocked_usersARead-onlyIdempotent
List blocked users. Everyone the AI is currently refusing to answer. Not paginated.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds one real behavioral fact beyond that: results are not paginated, meaning the caller receives the complete set in one response and needs no cursor handling. It stops short of describing what fields each entry contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and immediately followed by the definition of the resource and the pagination caveat. There is no filler or restated name/title boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read tool with no output schema, the description covers what is returned, the scope of "blocked," and the response shape constraint (unpaginated). The one gap is the absence of any hint about the fields or count returned per entry, which matters slightly given there is no output schema to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 disambiguate and the baseline is 4. The description correctly implies a single unscoped call with no filters, consistent with the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 blocked users") and disambiguates the term "blocked" as "everyone the AI is currently refusing to answer," which is genuinely clarifying. It does not explicitly contrast with neighboring list tools such as list_opt_outs or the block_user/unblock_user pair, 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.
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 read-side companion to block_user/unblock_user, but the description never says when to call it versus list_opt_outs or how it relates to those tools. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_comment_triggersARead-onlyIdempotent
List comment triggers. Standalone comment triggers, newest first, each with the flows linked to it. A flow whose own trigger node carries keywords (native) is not a trigger and appears only on /flows as a comment source with mode native.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1 to 100. Default 25. | |
| active | No | true for live triggers only, false for paused. | |
| post_id | No | Triggers scoped to this post. | |
| platform | No | Triggers that fire on this channel (a both trigger matches either). | |
| source_type | No | What the trigger listens to. | |
| starting_after | No | The next_cursor from the previous page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, so the safety profile is covered. The description adds genuinely new behavior: results are ordered newest first and each entry is joined with its linked flows, which an agent cannot infer from the schema. The native-trigger exclusion is also scope-relevant, though phrased in a way that takes effort to parse.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core scope is front-loaded in the first two sentences, which earns the opening. The third sentence is a single 30-plus-word clause with an aside in parentheses and a raw path reference ('/flows', 'mode native'), which reads as internal spec leakage rather than agent-facing guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description sensibly discloses the return shape (triggers plus linked flows) and ordering, which is what an agent needs before iterating. Pagination is handled by the documented starting_after parameter, so the remaining gap is minor; only the confusing native-trigger wording weakens it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each of the six parameters, including the two enums, is already documented in-schema. The description adds no filter semantics beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
First sentence states a specific verb and resource ('List comment triggers') and the second narrows the scope to 'Standalone comment triggers, newest first, each with the flows linked to it.' It is distinguishable from get_comment_trigger and from list_flows by the standalone qualifier, though the scope distinction is buried in a dense third sentence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is an implied when-not: flow-embedded 'native' triggers are excluded and live on /flows instead, which routes the agent in one direction. However, nothing says when to prefer this over get_comment_trigger, get_comment_trigger_stats, or list_flows, and no prerequisites or pagination guidance are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_competitorsARead-onlyIdempotent
List tracked competitors. Every account you track, with the numbers from its latest stored snapshot, plus how many slots your plan allows. Free 1, Creator 3, Pro 5, Business 10. Whole set in one page. last_snapshot_date is null until the first refresh.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds real value beyond that: no pagination (whole set in one page), plan-based slot ceilings (Free 1, Creator 3, Pro 5, Business 10), and the fact that last_snapshot_date is null until the first refresh.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, front-loaded with the purpose and payload, then plan limits, then the no-pagination and null-date caveats. No sentence is filler; the plan-tier list is dense but earns its space by telling the agent what the slot numbers mean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters, rich annotations, and no output schema, the description covers enough to call it correctly: what is returned, that it is unpaginated, and a null-value edge case. It stops short of describing the per-entry shape beyond "numbers from its latest snapshot," which leaves some return-format ambiguity against the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies. There is nothing in the input schema for the description to clarify or contradict.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List tracked competitors") and immediately scopes the payload: every tracked account, its latest snapshot numbers, and plan slot counts. This is clearly distinguishable from get_competitor (single account), add_competitor, and remove_competitor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the return description – an agent can infer this is the discovery/enumeration call before drilling into get_competitor – and "Whole set in one page" signals no pagination loop is needed. However, there is no explicit when-to-use or when-not-to-use statement, and no named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contactsARead-onlyIdempotent
List contacts. Cursor-paginated, newest first. Filters combine with AND.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Exact tag name the contact carries. | |
| name | No | Substring match on the display name. | |
| No | Exact email match. | ||
| limit | No | Page size, 1 to 100. Default 25. | |
| phone | No | Exact phone match. | |
| stage | No | Pipeline stage. | |
| channel | No | Channel the contact was seen on. | |
| updated_since | No | ISO-8601 UTC. Contacts updated at or after this time. | |
| starting_after | No | The next_cursor from the previous page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, and the description adds genuinely new behavior: results are cursor-paginated (not offset), ordered newest first, and multiple filters intersect via AND. Gaps remain around auth/scope requirements and the response envelope, but for a read-only list tool this is solid added context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with purpose, then pagination/ordering, then filter semantics. Nothing is redundant and no sentence needs a second read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With nine all-optional parameters, the description correctly focuses on the two things the schema cannot express: result ordering/pagination and AND-combination of filters. The main remaining gap is return-shape disclosure (no output schema, so the contact object structure and next_cursor field are never described), and it does not state what an unfiltered call returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description earns an extra point by documenting the cross-parameter combining rule ('Filters combine with AND'), which no individual schema property conveys. It does not restate the per-field matching semantics (exact vs substring), but those are already covered by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('List contacts'), which cleanly separates it from get_contact, upsert_contact, and update_contact in the sibling set. It does not explicitly name the read-one alternative, so it falls short of the top mark, but an agent can place it correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the mention of filters and cursor pagination signals 'use this to browse/filter a contact collection,' but nothing states when to prefer get_contact for a single record or that all filters are optional. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_conversationsARead-onlyIdempotent
List conversations. Cursor-paginated, newest first. Deleted conversations are never returned.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1 to 100. Default 25. | |
| status | No | Conversation status. | |
| channel | No | Channel. | |
| assigned_to | No | Team member id. Negative values are owner-level assignments. | |
| updated_since | No | ISO-8601 UTC. | |
| starting_after | No | The next_cursor from the previous page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds genuinely new behavior: results are cursor-paginated, ordered newest-first, and soft-deleted records are silently excluded — the last being important context an agent would otherwise misinterpret as missing data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core purpose, then ordering and the exclusion caveat. No filler, no restatement of the title, every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-optional-parameter read-only list tool with full schema coverage and no output schema, the description covers the essentials: what it returns conceptually, how to page, and what is filtered out. It stops short of noting that no filters are required or whether filters compose, which would fully close the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so limit, status, channel, assigned_to, updated_since, and starting_after are all documented in the schema. The description only indirectly touches starting_after via "cursor-paginated" and says nothing about the enums or the negative-value convention on assigned_to, so it adds little beyond the structured fields — the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List conversations") and adds ordering (newest first) and a deletion exclusion, so an agent can distinguish it from get_conversation or list_messages. It never names a sibling explicitly, which keeps it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the list semantics and the cursor-pagination note; there is no explicit when-to-use, when-not-to-use, or pointer to alternatives such as searching or filtering by a specific conversation. An agent can infer the tool browses collections, but must reason about it rather than read it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_custom_fieldsBRead-onlyIdempotent
List custom field definitions. Active fields by default.
| Name | Required | Description | Default |
|---|---|---|---|
| include_archived | No | Include archived definitions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully carried by structured data. The description adds one genuinely new behavioral fact — that the default result set is filtered to active definitions — but says nothing about ordering, pagination, or result volume for what could be a long list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the purpose and followed by the default-scope note; nothing is redundant. It is however near the floor of what is useful, with no structural cues such as return shape or pagination.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter read tool with rich safety annotations and full schema coverage, the description covers the essentials. The remaining gaps — whether results are paginated and whether the list is capped — matter for a list endpoint against a potentially large definition set, so it is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter is documented as 'Include archived definitions,' so the schema does the heavy lifting. The description's 'Active fields by default' reinforces the default semantics of that flag, a marginal value-add that matches the baseline-3 expectation for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource pair, 'List custom field definitions,' which is unambiguous and immediately distinguishable from the write-oriented siblings create_custom_field and update_custom_field. It stops short of naming those siblings or stating scope (all fields vs. a subset), so it earns a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Active fields by default' implies the usage condition for the include_archived flag, but the reader must infer that archived fields are excluded unless requested. There is no explicit statement of when to reach for this tool over create_custom_field / update_custom_field, nor any prerequisite or exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_documentsARead-onlyIdempotent
List documents. Uploaded PDFs and text files. Content is not returned, only metadata and embedding state. Upload happens in the portal.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1 to 100. Default 25. | |
| starting_after | No | The next_cursor from the previous page. | |
| include_inactive | No | Include items switched off. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful context beyond that: the response excludes content and returns only metadata and embedding state, and uploads are out-of-band via the portal. It stops short of describing pagination behavior or the shape of the metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action and scope, then the return-value constraint, then the out-of-band upload note. No filler and nothing repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining returns and does so at a high level ('metadata and embedding state'). For a simple read-only list tool with fully documented parameters, that is nearly complete; only pagination mechanics and the specific metadata fields are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and all three parameters (limit, starting_after, include_inactive) are documented in the schema itself. The description adds no pagination or filtering semantics 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List documents') and immediately scopes what a document is ('Uploaded PDFs and text files'), which distinguishes it from unrelated siblings like list_posts or list_contacts. It does not explicitly name get_document as the content-fetching alternative, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: 'Content is not returned' hints that get_document is needed for content, and 'Upload happens in the portal' tells the agent there is no upload tool to look for. Neither is framed as explicit when-to-use guidance or an alternative recommendation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_faqsARead-onlyIdempotent
List FAQs. Question and answer pairs the AI answers from. Active only by default.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1 to 100. Default 25. | |
| starting_after | No | The next_cursor from the previous page. | |
| include_inactive | No | Include items switched off. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is fully covered. The description adds that results are active-only by default, which is meaningful behavioral context beyond annotations and usefully flags that the listing is filtered. Pagination behavior and return shape are not described, but annotations carry the main burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and resource, then scope and default behavior. No wasted words, though the sentence fragments are terse rather than fully structural.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A simple list tool with no output schema and full schema coverage, so little is required. However, the description never says what a returned FAQ looks like or how the AI answers from it, and the active-only default is easy to miss. Adequate but with clear gaps for a revealing-the-result tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents all three parameters, including defaults and the maximum of 100. The description adds context tying the default active-only filter to the include_inactive flag, reinforcing the meaning of the most consequential parameter. Baseline would be 3, and this slight reinforcement earns a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List FAQs") and clarifies the resource's meaning as question/answer pairs the AI answers from, which distinguishes it from sibling list tools like list_documents or list_services. It does not explicitly distinguish itself from get_faq or the create/update/delete FAQ siblings, though the plural/list verb makes the boundary reasonably clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Active only by default" implies the include_inactive switch context, but the description never names when to use list_faqs versus get_faq, list_services, or list_knowledge_gaps. Usage is implied by the name rather than stated; no exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_flow_eventsARead-onlyIdempotent
List flow events across sessions. Every session event in one feed, oldest first. Ids only increase, so starting_after is a durable high-water mark for a sync loop. Use flow_session, not session_id, to filter by session.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Event type. | |
| limit | No | 1 to 100, default 100. | |
| since | No | ISO-8601 UTC on occurred_at. | |
| flow_id | No | One flow. | |
| node_key | No | One step of the flow. | |
| flow_session | No | One session. | |
| starting_after | No | The next_cursor from the previous page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds behavior the annotations cannot convey: results are ordered oldest-first, ids are monotonically increasing, and cursors are durable across runs — exactly what an agent needs to reason about a sync loop.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, no filler, with the core scope stated first and the ordering/cursor guarantees following. Every sentence carries information an agent would otherwise have to guess.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter read tool with no required params and no output schema, the description covers ordering, cursor durability and the key parameter gotcha. It is slightly thin on how filters like since, type and starting_after interact, and on the shape of the returned feed, though the schema implies a next_cursor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3. The description earns more by warning "use flow_session, not session_id" — a genuine trap since additionalProperties is false and an invented session_id would fail — and by explaining that starting_after is a durable high-water mark rather than just "the next_cursor from the previous page."
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"List flow events across sessions" gives a specific verb and resource, and "every session event in one feed, oldest first" clarifies the scope and ordering. It does not explicitly contrast with the nearby list_flow_session_events or list_flow_sessions tools, so the agent has to infer that this is the cross-session feed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The line about starting_after being "a durable high-water mark for a sync loop" supplies one concrete usage pattern, which is real guidance. However, there is no statement of when to prefer this tool over list_flow_session_events or list_flow_sessions, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_flowsARead-onlyIdempotent
List flows. Automation flows with lifetime stats. The canvas definition is not exposed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1 to 100. Default 25. | |
| status | No | Flow status. | |
| trigger_type | No | What starts the flow. | |
| starting_after | No | The next_cursor from the previous page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond them: results carry lifetime stats, and the canvas definition is deliberately omitted, which stops the agent from calling this tool hoping to get definition data and points it toward get_flow_definition. Pagination behavior is left to 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the verb and resource and with zero filler. The sentence fragments ('Automation flows with lifetime stats.') are slightly telegraphic, but each carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema and four optional, fully documented parameters, the description covers what is returned at a high level (lifetime stats) and what is not (canvas definition). It stops short of describing result ordering or pagination semantics, but the cursor parameter in the schema partially covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with descriptions for limit (page size 1-100, default 25), status, trigger_type, and starting_after cursor, so the schema carries the parameter burden. The description adds nothing about these filters, which is acceptable at full coverage but leaves it at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List flows') and clarifies the domain as 'Automation flows with lifetime stats', so the agent knows it returns flow records with aggregated metrics. It does not distinguish itself from the many flow siblings such as get_flow, get_flow_definition, or list_flow_sessions, so an agent still has to reason about which flow-listing tool applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance: nothing says to call this to enumerate or filter flows rather than to fetch a single flow with get_flow or to inspect runs with list_flow_sessions. The only directional hint is the negative statement that the canvas definition is not exposed, which implicitly routes definition lookups elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_flow_session_eventsBRead-onlyIdempotent
List events for a session. The ordered path one person took through a flow, oldest first.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. | |
| type | No | Event type. | |
| limit | No | 1 to 100, default 100. | |
| starting_after | No | The next_cursor from the previous page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so safety is covered. The description adds the ordering guarantee ("oldest first"), which is genuinely behavioral information not present in the schema, but stops short of describing pagination flow across pages, filters interacting with ordering, or what an empty session yields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the action, followed by the interpretive gloss on what the returned events represent. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a filtered, paginated read tool with complete schema coverage and full annotations, the definition is nearly sufficient. The only shortfall is that pagination behavior and the session-id dependency are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, documenting id, the event type enum, the 1-100 limit defaulting to 100, and starting_after as a cursor. The description adds nothing beyond this, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"List events for a session" gives a specific verb plus resource, and the follow-on sentence clarifies the semantics: a single person's ordered path through a flow. However, with close siblings like list_flow_events and get_flow_session present, the description never states how this differs (session-scoped vs flow-wide).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool applies when you have a session id, but there is no explicit when-to-use, when-not, or mention of alternatives such as list_flow_events (all events for a flow) or get_flow_session (session summary). No prerequisite about sourcing the id from list_flow_sessions is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_flow_sessionsARead-onlyIdempotent
List flow sessions. One session per person per run of a flow. Attribution carries post_id, comment_id and matched_keyword only, never what anyone typed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1 to 100. Default 25. | |
| status | No | Session status. | |
| channel | No | Session channel. | |
| flow_id | No | One flow. | |
| contact_id | No | Sessions for one contact. Unknown contact is a 404. | |
| updated_since | No | ISO-8601 UTC. | |
| starting_after | No | The next_cursor from the previous page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world reads, so the safety profile is covered. The description adds genuine behavioral context beyond them: the one-session-per-person-per-run model and, notably, that attribution exposes only post_id/comment_id/matched_keyword and never user-typed content — a data-availability constraint an agent would otherwise get wrong. It does not describe pagination behavior despite the cursor parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler; the core purpose is front-loaded and each following sentence adds a distinct fact. Nothing is redundant with the title or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry return-value semantics, and it only partially does: attribution fields are explained but the rest of a session's shape (status, channel, timestamps) and the pagination contract (next_cursor) are unstated. For a seven-parameter list tool with full annotation coverage this is adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters (limit, status, channel, flow_id, contact_id, updated_since, starting_after) are already documented, including enums and the 404 behavior for unknown contact_id. The description adds no per-parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('List flow sessions') and adds the cardinality rule ('one session per person per run of a flow'), which an agent cannot infer from the name. It does not explicitly distinguish itself from siblings like get_flow_session or list_flow_session_events, but the list-vs-get distinction is largely self-evident from the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the listing semantics, but the description names no alternatives and gives no when-to-use/when-not guidance (e.g., use get_flow_session for a single session, list_flow_session_events for event history). The scope is clear enough that an agent can place it, but routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_handled_commentsARead-onlyIdempotent
List handled comments. Comments the AI Comment Manager handled, newest first, kept 30 days. Each carries the comment, its sentiment, what moderation did, the AI draft, and what happened to the reply. status=pending is the approval queue.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1 to 100. Default 25. | |
| since | No | ISO-8601 UTC on created_at. | |
| status | No | Where the comment is. | |
| channel | No | instagram or facebook. | |
| post_id | No | Comments on one post. | |
| starting_after | No | The next_cursor from the previous page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, not open-world), so the bar is lower. The description still adds real operational context: ordering is newest first, records are retained only 30 days, and each row includes the comment, sentiment, moderation action, AI draft, and reply outcome. It does not describe pagination behavior beyond the schema's cursor, but that gap is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the identity of the resource, then retention and ordering, then the payload, then the most important filter hint. No sentence is redundant with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing endpoint with six fully documented optional parameters and no output schema, the description supplies the missing return-shape information and retention constraint. Only the pagination/next_cursor follow-through is left implicit, which keeps it from a full 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3. The description earns above baseline by explaining what the status filter means in workflow terms ('pending is the approval queue'), giving the enum a purpose the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb and resource ('List handled comments') and the second narrows scope to comments processed by the AI Comment Manager, which distinguishes it from siblings like get_handled_comment and list_comment_triggers. It stops short of naming those siblings explicitly, so differentiation relies on inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'status=pending is the approval queue' implicitly routes the agent toward approve/reject comment reply tools, which is genuinely useful. However, there is no explicit when-to-use versus when-to-use-get_handled_comment guidance and no statement about what this tool cannot do.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_knowledge_gapsARead-onlyIdempotent
List knowledge gaps. Questions the AI could not answer well, flagged by the gap detector with the customer message, the AI reply, a canonical form of the question, and a suggested answer and target. Open gaps by default; status=all for everything. Read-only: fix a gap with POST /knowledge/faqs or by editing identity.instructions, and dismiss it in the portal.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1 to 100. Default 25. | |
| since | No | ISO-8601 UTC on last_seen_at. | |
| status | No | Default open. Use all for every status. | open |
| channel | No | Channel the question came in on. | |
| signal_type | No | Why it was flagged. | |
| starting_after | No | The next_cursor from the previous page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint, but the description goes further by naming the remediation paths and the portal action, which is real operational context an agent can't infer from structured fields. It also enumerates the payload fields the detector attaches, useful given there is no output schema. It stops short of describing ordering or how to page beyond the schema's starting_after hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the identity of the resource, then payload shape, then default scope, then what to do instead of writing. No filler and no repetition of the tool name as a purpose statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter, zero-required, read-only listing tool with full schema coverage and no output schema, the description supplies the two things the schema can't: the meaning of a 'gap' and the field set returned. The gap is filter semantics for since/signal_type, which are only defined as terse schema strings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 limit, since, status, channel, signal_type and starting_after; the description only restates the status default and the 'all' escape hatch. It adds nothing about since (last_seen_at windowing) or the signal_type meanings (no_knowledge vs weak_match vs escalation), which are the least self-explanatory filters. Baseline 3 applies when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb+resource ('List knowledge gaps') and the second defines what a gap actually is ('Questions the AI could not answer well, flagged by the gap detector'), which no sibling tool covers. The five field names (customer message, AI reply, canonical question, suggested answer, target) further pin down the record type, so an agent can distinguish this from list_faqs or get_knowledge_usage without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Open gaps by default; status=all for everything' states the default scope and the override, and the closing clause tells the agent what to do instead of trying to mutate via this tool (create an FAQ, edit identity.instructions, or dismiss in the portal). What's missing is any explicit contrast with the neighbouring knowledge tools (list_faqs, get_knowledge_usage, list_documents) for the 'should I look here or there' decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_messagesARead-onlyIdempotent
List messages in a conversation. The transcript, newest first. Purged bodies appear with text null and body_purged true.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. | |
| limit | No | 1 to 100, default 50. | |
| starting_after | No | The next_cursor from the previous page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds genuinely new behavioral detail: results are ordered newest-first and purged message bodies surface as text null with body_purged true, which an agent could not learn from the annotations or schema. It omits pagination behavior, noting only indirectly via the schema's starting_after.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, then ordering, then the edge case. No filler, repetition, or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter, fully documented read tool with no output schema, the description covers the action, the sort order and the null-body edge case, which is what an agent most needs. It would be complete with one clause on pagination or on how it relates to get_conversation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 id, limit (1-100, default 50) and starting_after (next_cursor). The description adds only the implication that id refers to a conversation rather than a message, which is useful but marginal over the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List messages') scoped to a conversation, which is unambiguous against siblings like send_message or get_conversation. It does not explicitly say how it differs from get_conversation, which also returns conversation data, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the object described ('The transcript, newest first'), with no statement of when to prefer this over get_conversation or list_conversations, and no prerequisites or exclusions. An agent can infer the use case but gets no routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_opt_outsBRead-onlyIdempotent
List opt-outs. Who has opted out, on which channel, when, and how. starting_after is an opaque cursor here, not an id.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1 to 100. Default 25. | |
| scope | No | Meta channels only. | |
| since | No | ISO-8601 UTC on recorded_at. | |
| status | No | opted_in returns SMS rows only; Meta channels are always opted_out. | |
| channel | No | Channel. | |
| starting_after | No | The next_cursor from the previous page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered structurally. The description's one contribution is warning that starting_after is an opaque cursor rather than an id, which prevents a real class of misuse, but it says nothing about result shape, ordering, or pagination termination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with purpose before the returned-field facets and the cursor caveat. No filler, though the fragment style ("Who has opted out, on which channel, when, and how.") reads more as a spec gloss than a grammatical sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter query tool with zero required params, a rich schema and full annotations, most burden is already carried elsewhere. What the description omits is any sense of the result shape or ordering implied by the cursor, and there is no output schema to compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented, including the enum semantics and the status/scope interaction. The description only reinforces the cursor meaning for starting_after, which 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ("List opt-outs") and immediately enumerates the facets surfaced (who, channel, when, how), so the agent knows this is a read over the opt-out records. It does not explicitly distinguish itself from neighbors like list_blocked_users or list_contacts, which is the only reason 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to reach for this tool versus alternatives, no prerequisite or permission context, and no exclusions. The only practical routing hint is the note about starting_after, which is about invocation 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.
list_postsARead-onlyIdempotent
List posts. Content Studio posts, newest first, each with its media. status=scheduled is the queue, status=failed needs attention.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1 to 100. Default 25. | |
| status | No | Where the post is. | |
| platform | No | The stored platform value (a target set). | |
| post_type | No | Post type. | |
| starting_after | No | The next_cursor from the previous page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint, idempotentHint, non-destructive), so the description's job is to add behavioral detail — and it does: results are ordered "newest first" and each post is returned "with its media", disclosing both ordering and payload shape. Pagination behavior via starting_after/next_cursor is left unmentioned, which is a modest gap but not fatal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what the tool returns, then scope, then the most actionable status semantics. No filler and nothing redundant with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns and does so adequately (ordering plus media inclusion). The main omission is pagination semantics — that starting_after takes the previous page's next_cursor is only in the schema, and the description never signals cursor-based paging.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description genuinely adds meaning by explaining what two status values signify operationally (scheduled = the queue, failed = needs attention) beyond the schema's vague "Where the post is." It does not interpret the remaining status values or the platform/post_type enums, so it falls short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb and resource ("List posts") and narrows scope to "Content Studio posts", which is more specific than the bare name. It does not, however, distinguish itself from the sibling list_recent_posts, so an agent cannot tell from the description alone which of the two list endpoints to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The line "status=scheduled is the queue, status=failed needs attention" gives practical interpretation of two status values, which is real usage guidance. But there is no explicit when-to-use/when-not guidance and no mention of the near-duplicate sibling list_recent_posts or get_post for single-post retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recent_postsARead-onlyIdempotent
List recent posts. Recent posts and Reels on the connected Instagram or Facebook account, newest first, straight from Meta. Use an id as post_id when creating a trigger scoped to one post. 409 not_connected when that channel is not connected.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1 to 50. Default 25. | |
| platform | No | Which account. Default instagram. | |
| starting_after | No | The next_cursor from the previous page (a Meta cursor). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the description's job is lighter. It still adds real behavior beyond them: results are ordered newest first, they come straight from Meta rather than a local store, and a 409 not_connected is returned when the channel isn't connected — an error contract the annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with what the tool returns and followed by the trigger-chaining note and the error case. Dense but each sentence carries information; no filler or restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description would ideally say something about the shape of returned posts and how to page using starting_after. It covers ordering, source, chaining and the main error, but leaves pagination behavior and the returned fields unaddressed for a three-parameter list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so limit (1-50, default 25), platform (instagram/facebook enum) and starting_after (Meta next_cursor) are already fully documented in the schema. The description adds no parameter-level meaning — it never mentions pagination or which platform default applies — so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ("List recent posts") and adds scope detail: Instagram or Facebook posts and Reels, newest first, sourced live from Meta. It does not, however, distinguish itself from the sibling list_posts, leaving the agent to infer the difference between a live recent fetch and whatever list_posts returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is implied usage (fetch recent content from the connected channel) plus a useful chaining hint that an id can be reused as post_id when creating a trigger scoped to one post. But it never states when to prefer this over list_posts or get_top_posts, and gives no exclusions, so the routing decision is left partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_servicesARead-onlyIdempotent
List services. Services and pricing the AI can quote and, with booking on, offer. Active only by default.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1 to 100. Default 25. | |
| starting_after | No | The next_cursor from the previous page. | |
| include_inactive | No | Include items switched off. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a read-only, idempotent, non-destructive, closed-world listing, so the safety profile is covered. The description adds useful domain context about what a service represents (quotable pricing, booking eligibility) but says nothing about result ordering, page size behavior, or what fields come back.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the verb and resource, then meaning, then the default filter. Slight redundancy between "List services" and the following sentence, but nothing wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A simple read-only list tool with three fully documented parameters and no output schema; the description plus annotations cover what an agent needs to call it. Minor gap: no note on how to page through results beyond the cursor parameter's own schema text.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so limit, starting_after, and include_inactive are all fully documented in the schema. The description's "active only by default" restates the include_inactive default rather than extending it, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List services") and adds domain meaning by explaining that services carry the pricing the AI can quote and, when booking is enabled, offer. It is distinguishable from siblings like get_service or create_service, but it does not name them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage signal is "Active only by default," which implies the include_inactive escape hatch but is already captured by the schema default. There is no guidance on when to call this versus get_service for a single item, or on pagination workflows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsARead-onlyIdempotent
List tags. Every tag definition, ordered by name. Not paginated.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this read-only, idempotent and non-destructive, so the safety bar is low; the description nonetheless adds two real behaviors: results are ordered by name and the response is not paginated, meaning the caller gets the complete set in one shot. It does not say what fields a tag definition contains or whether archived tags are included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and then the two facts an agent needs (scope, ordering, no pagination). Nothing is wasted or repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 full annotation coverage, the description covers scope, ordering and result-set size. With no output schema, the only remaining gap is the shape of a tag object, which the agent must infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 disambiguate; the base expectation is met. The "not paginated" note usefully confirms the caller cannot pass paging arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"List tags. Every tag definition" gives a specific verb and resource, and the scope word "every" separates it from the single-tag mutations (create_tag, delete_tag) among siblings. It does not explicitly differentiate from list_custom_fields or clarify whether tag_contact results are included, but the 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied — fetch the full tag catalogue, presumably before calling tag_contact — but the description never states when to prefer this over other listing tools or any prerequisites. 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.
list_team_membersARead-onlyIdempotent
List team members. Everyone a conversation can be assigned to. Not paginated. channels is null when the member can see every channel. Use it to find the member id for assign_conversation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world and non-destructive, so the safety profile is covered. The description adds real behavior beyond that: "Not paginated" and the meaning of a null channels field. However, with no output schema, the return shape is only partially disclosed — one field explained, the rest of the member object undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences that are front-loaded with the identity of the resource before the usage hint. Every sentence carries information. Minor cost: "Everyone a conversation can be assigned to" is a fragment whose antecedent is slightly unclear on first read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument list tool with no output schema, the description supplies the key context an agent needs: no pagination to loop over, what a null channels means, and where the returned member id is consumed. Only the remaining fields of the member object are left undisclosed, which is a modest gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 disambiguate and the baseline is 4. The mention of a channels field is about results, not inputs, and does not confuse the parameter story.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List team members") and sharpens the scope with "Everyone a conversation can be assigned to", which rules out contacts and blocked users. It stops short of explicitly contrasting itself with a named sibling list tool, so it lands at clear-but-not-differentiating rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit use case and names the downstream sibling: "Use it to find the member id for assign_conversation." That is a clear positive trigger. There is no guidance on when not to use it (e.g. versus list_contacts) or on caching, but the alternative is effectively named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_flowA
Pause a flow. Stops the flow and cancels its open sessions. A linked comment trigger is paused with it. Fires flow.paused. Send {} as the body.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false) the description discloses real behavior: the flow stops, open sessions are cancelled, a linked comment trigger is paused, and a flow.paused event fires. That is unusually rich. The one tension is that cancelling open sessions reads as a destructive side effect while destructiveHint=false; not a flat contradiction, but worth noting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, front-loaded with the action, then effects, then the event, then the call convention. No filler, and the unusual "Send {} as the body" detail is placed at the end where it is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 important unknowns: what stops, what gets cancelled, what else is affected, and what event is emitted. It stops short of stating reversibility (i.e. that activate_flow resumes it) or preconditions on the flow's state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema description coverage, the schema already carries the parameter meaning. The description's only addition is the invocation hint "Send {} as the body," which clarifies body handling but says nothing about what the required id refers to or what a valid id looks like.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Pause a flow" gives a specific verb and resource, and the following sentences sharpen it with side effects (open sessions cancelled, linked comment trigger paused). It is clearly distinguishable from delete_flow or update_flow, but it never explicitly names the counterpart (activate_flow) or states how it differs from deletion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the disclosure that sessions are cancelled signals this is a consequential state change, so an agent can infer pause-vs-delete tradeoffs. There is no explicit when-to-use, when-not-to-use, or prerequisite (e.g. whether the flow must be active/published first) guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_flowADestructive
Publish a flow draft. Makes the draft the live definition (new version). Runs the full validation and keyword-conflict check (422 invalid_definition). Publishing a flow that was never live also activates it when the plan has a free live-flow slot (403 plan_limit_reached otherwise). Fires flow.published, and flow.activated when it went live. Send {} as the body.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructive/idempotent/openWorld annotations, the description discloses the validation and keyword-conflict check with its error code, the plan-limit failure mode, the activation side effect for never-live flows, and the exact events fired (flow.published, flow.activated). That is a genuinely complete behavioral profile for a mutating operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with the core action, then side effects and error codes, with no filler sentences. It is dense but slightly overpacked in the middle where the activation and plan-limit clause runs long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive mutation with no output schema, it covers errors, side effects, events, and body shape. The only gap is that it does not indicate what a successful response contains, though the absent output schema makes that a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, and the description adds real value by specifying 'Send {} as the body', clarifying that the required id is supplied outside the request body despite being listed in the input schema. That resolves a genuine ambiguity an agent could otherwise get wrong.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Publish a flow draft') and immediately defines the outcome ('Makes the draft the live definition (new version)'), which implicitly separates it from siblings like update_flow or activate_flow. It never names an alternative explicitly, so the boundary with activate_flow is inferable 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when publishing also activates a flow and the plan-slot condition (403 plan_limit_reached), plus the validation gate (422 invalid_definition). There is no explicit 'do not use this when…' or a named alternative such as activate_flow, 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.
publish_postADestructive
Publish a post now. Publishes to every target at once, the portal's Publish Now. Needs a caption (stories excepted), media for any Instagram target, and two or more items for a carousel (400). A draft, scheduled or failed post can be published (409 not_editable otherwise). When a platform rejects it the post becomes failed and the call is 422 publish_failed with the post and per-platform results. post.published or post.failed fires either way. Send {} as the body.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which only flag non-read-only, non-idempotent, destructive, open-world): it discloses validation failure codes (400, 409 not_editable), cross-platform partial failure becoming 422 publish_failed with per-platform results, that the post is left in a failed state, and that post.published or post.failed events fire regardless. It also tells the caller to send {} as the body, which prevents a common malformed call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and target scope, then requirements and error behavior in a compact sequence. The parenthetical error codes are efficient but the telegram-style compression makes it slightly harder to parse than a fully structured description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers what the agent needs for a one-parameter destructive write: preconditions, per-platform requirements, failure semantics, event side effects, and request body shape, with no output schema to explain. Only the explicit alternative tool for future publishing is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single id parameter, so the schema already carries the meaning. The description still adds useful semantics by specifying that the request body must be empty ({}), clarifying that the id alone identifies the post and no body fields are accepted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Publish a post now') and immediately scopes it as publishing to every target at once, the portal's Publish Now. This lets an agent separate it from sibling publish/schedule tools such as schedule_post or retry_post without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete preconditions and eligibility: a draft, scheduled or failed post can be published, otherwise 409 not_editable, and requirements include a caption (stories excepted), media for any Instagram target, and two or more items for a carousel. It does not explicitly name schedule_post as the alternative for future-dated publishing, so the routing guidance is clear but not fully spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_market_intelA
Refresh from Meta. Pulls current numbers from Meta for your account and every tracked competitor and writes today's snapshot, exactly like the portal's Refresh button. One Meta call per account, so it takes several seconds; every other Market Intel read serves the snapshots this writes. Five minutes are enforced between refreshes (429 too_soon carries retry_after_seconds). Send {} as the body. Slow: one Meta call per tracked account. Only call it when the stored snapshot is stale.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations: it discloses latency ("takes several seconds"), the per-account call pattern, the write side effect on snapshots, and the exact 429 too_soon error with retry_after_seconds. The only thing not covered is what the response body contains, though the error contract covers the main failure mode.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the when-to-use condition, and the 429 contract is stated compactly. It loses a point for redundancy: "One Meta call per account, so it takes several seconds" and "Slow: one Meta call per tracked account" say the same thing twice.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is needed here because the description already establishes what the call produces (today's snapshot) and how other tools consume it. Combined with annotations and rate-limit details, an agent has everything needed to call it correctly and handle the common failure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
This tool has zero parameters, so the baseline is 4; the description correctly notes "Send {} as the body," which prevents an agent from inventing fields. There is no further parameter meaning to convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Refresh from Meta ... writes today's snapshot") and explicitly scopes the write to the account plus every tracked competitor. It also distinguishes itself from the sibling read tools by noting "every other Market Intel read serves the snapshots this writes."
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use condition ("Only call it when the stored snapshot is stale") and implicitly routes the agent to the read siblings otherwise. It also surfaces the operational constraint (five minutes enforced between refreshes) that governs repeated invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reject_comment_replyA
Reject a reply. Drops the pending draft. Nothing is posted. Only a pending comment can be rejected (409 not_pending). Send an empty JSON object as the body.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses the actual outcome (the pending draft is dropped), the negative guarantee ('Nothing is posted'), and the failure mode with status code (409 not_pending) — exactly the kind of context annotations cannot carry. It stops short of saying whether the rejection is reversible or what the response contains; there is also mild tension with destructiveHint=false, since a draft is discarded, though that is defensible for an unpublished proposal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action and its effect, then the precondition, then the body requirement. Every sentence carries distinct information and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter action with no output schema, the definition covers action, side effect, precondition, error code, and call shape. The remaining gap is the response payload and any permission/auth requirement, which the agent must discover at runtime.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 value by clarifying that the request body must be an empty JSON object — resolving how `id` is supplied (path, not body) given `additionalProperties: false`. It still never says what the `id` identifies (reply id vs. comment id).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb and resource ('Reject a reply'), and the follow-ups clarify the resulting state ('Drops the pending draft. Nothing is posted.'). It does not explicitly name the counterpart approve_comment_reply or bulk_reject_comment_replies, so a reader must infer the distinction from the names alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states an applicability precondition ('Only a pending comment can be rejected (409 not_pending)'), which is genuine when-to-use guidance. However, it never routes the agent between reject vs. approve, or single reject vs. bulk_reject_comment_replies, leaving the main selection decision implied by tool names only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_competitorAIdempotent
Stop tracking a competitor. Frees the slot. History is kept, so re-adding the same handle picks up where it left off.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=true, but the description adds genuinely new behavioral facts: a tracking slot is freed (quota effect) and history is retained rather than deleted (reversibility). These are the details an agent needs before firing a removal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and its immediate effect, then the reversibility caveat. No filler or restated metadata.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter removal tool with no output schema this covers what matters: what it does, side effect on quota, and that data survives. It could go further on whether dependent artifacts (leaderboard history, wins) remain accessible or whether confirmation is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required parameter with 100% schema description coverage, so the baseline is 3. The description's phrase 'the same handle' loosely hints at competitor identity but does not clarify that the parameter is a numeric id rather than a handle — a mild ambiguity worth noting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Stop tracking a competitor') that is unambiguously the inverse of the sibling add_competitor, and adds the concrete effect ('Frees the slot'). 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through lifecycle language — 're-adding the same handle picks up where it left off' tells the agent this is reversible and that re-adding exists. There is no explicit when-to-use or when-not-to-use statement, and no named alternative (add_competitor) to route against.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reschedule_appointmentADestructive
Reschedule an appointment. Moves a pending or confirmed appointment to a new date and time after checking the slot is free, updates the connected calendars, fires appointment.rescheduled, and DMs the customer when the booking came from a conversation. 409 slot_unavailable when the slot is taken, 409 not_active when the appointment is not pending or confirmed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. | |
| date | Yes | ||
| time | Yes | HH:MM, 24-hour, in the appointment timezone. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the supplied annotations, the description discloses real side effects: connected calendars are updated, an appointment.rescheduled event fires, and the customer is DM'd when the booking originated in a conversation. It also names both error responses with their condition, which is exactly the operational context an agent needs for a destructive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and its precondition are front-loaded in the first clause, followed by side effects and then error codes in a tight sequence. Every clause adds information; there is no filler or restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter mutation with no output schema, the definition covers the trigger condition, the slot-availability check, downstream effects, and failure modes. What remains unstated is whether notification is skipped for non-conversation bookings and what the success response contains, though the annotations already signal the mutation profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 67% schema description coverage, the schema already carries the date pattern and the HH:MM/24-hour/timezone rule for time. The description only mentions 'a new date and time' generically and adds no meaning about the id parameter or validation behavior, so it operates at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Reschedule an appointment') and elaborates the exact effect: moving a pending or confirmed appointment to a new date/time. It does not explicitly distinguish itself from siblings such as update_appointment, book_appointment, or cancel_appointment, which keeps it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear precondition for use ('pending or confirmed') and reveals the failure route for anything else via 409 not_active, plus the slot-check behavior. What is missing is explicit routing guidance versus update_appointment or book_appointment when the caller is unsure which mutation to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retry_postBDestructive
Retry a failed post. Publishes a failed post again, up to the retry cap. Send {} as the body.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is carried by structured data. The description adds the genuine extra fact that retries are bounded by a cap, but does not disclose what happens at the cap (error vs. silent no-op) or what a retry does to the post's timestamps/engagement state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences do their job efficiently, but the third sentence ("Send {} as the body") is not merely filler — it is misleading given the required id. Every sentence should earn its place, and this one costs the definition accuracy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter mutation with rich annotations and no output schema, little prose is needed, and the cap disclosure is a useful addition. However, the missing explanation of cap-exhaustion behavior and the contradictory body instruction leave an agent unsure how to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema requires a single integer "id", yet the description instructs "Send {} as the body" — a direct conflict with the required parameter that would lead an agent to call the tool with no id. Rather than adding meaning to the parameter, the description actively undermines the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Retry a failed post" gives a specific verb plus resource and narrows scope to posts in a failed state, which separates it from publish_post and schedule_post without naming them. It stops short of an explicit sibling comparison but the resource and precondition are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The condition for use is implied by "a failed post" — you would not call it on a healthy post — but no alternative is named (e.g. use publish_post for a fresh publish, or what to do once the cap is hit). The retry cap is mentioned without saying what produces it or what happens when it is exhausted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_postADestructive
Schedule a post. Sets or moves the publish time of a draft, failed or scheduled post. The scheduler publishes it within a minute of that time. Same rules as scheduling on create. post.scheduled fires.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. | |
| scheduled_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses real behavioral traits: the scheduler publishes within a minute of the given time, create-time scheduling rules also apply, and a post.scheduled event fires. It does not explain whether rescheduling overwrites an existing time silently, which matters given destructiveHint=true and idempotentHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences with the action front-loaded and no filler. The trailing fragment 'post.scheduled fires.' is terse to the point of being cryptic, but it earns its place by flagging an event side effect.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with safety already covered by annotations and no output schema, the essentials are present. Gaps remain around timezone semantics, what happens to a previously scheduled time, and what 'same rules as scheduling on create' actually refers to – an agent without that context can still call the tool but may schedule incorrectly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% – scheduled_at has only a date-time format and no prose. The description usefully reframes it as the 'publish time' rather than a generic timestamp, but says nothing about timezone handling or acceptable ranges, leaving the most error-prone parameter partly undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Schedule a post') and immediately narrows scope to setting or moving the publish time of a draft, failed, or scheduled post. That scope language lets an agent distinguish this from publish_post or unschedule_post, though those siblings are never named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The eligible post states (draft, failed, scheduled) give a clear condition for when this tool applies, and 'Same rules as scheduling on create' signals an existing policy to follow. It stops short of naming the alternative tools (unschedule_post, publish_post) or stating when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageADestructive
Send a message. Send text, a WhatsApp template, a reaction, or a typing indicator on any channel. Route by conversation_id, by platform plus platform_user_id, or by to_phone for SMS and WhatsApp. SMS, WhatsApp and Telegram can start a conversation cold; Facebook and Instagram need an inbound message first. idempotency_key is required in the body, or send the Idempotency-Key header. This reaches a real person on their phone. Confirm the recipient and the text with the user before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | send_message | |
| platform | No | With platform_user_id, route by the channel identity. | |
| reaction | No | For react, for example love. | |
| to_phone | No | E.164. SMS and WhatsApp only. Starts a conversation if none exists. | |
| message_text | No | For send_message. | |
| template_name | No | WhatsApp template, outside the 24-hour window. | |
| conversation_id | No | Route by conversation. | |
| idempotency_key | No | Required unless the Idempotency-Key header is sent. A replay returns the original result with status duplicate. | |
| platform_user_id | No | ||
| target_message_id | No | For react and unreact. | |
| template_language | No | ||
| template_components | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true and idempotentHint=false; the description adds context those annotations cannot carry — that delivery reaches a real person's phone, that a confirmation step is expected, that idempotency_key is mandatory (body or header) with duplicate-replay returning the original result, and that channel-specific cold-start constraints apply. It stops short of covering failure modes, per-channel rate limits, or what a partial failure returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and payload types, then routing, then channel constraints, then the safety warning — a logical progression with almost no filler. The opening 'Send a message.' is slightly redundant with the title and the annotations-supplied title text, but the rest of the prose is dense and purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 output schema, the description covers routing, channel eligibility, idempotency, and human-confirmation requirements. The remaining gap is mapping the action enum values (react/unreact/typing_on) to their parameter sets explicitly, though the schema's field descriptions largely bridge that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 12 parameters at 67% schema coverage and zero required fields, the description supplies the missing decision logic: which parameter combinations are valid routing keys and which two channels accept to_phone. It also ties payload type to parameter intent (template vs reaction vs typing indicator), adding meaning beyond the terse per-field schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Send a message') and immediately enumerates the payload types it covers (text, WhatsApp template, reaction, typing indicator). It is clearly distinguishable from read-side siblings like list_messages or get_conversation, so an agent can pick it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing selectors (conversation_id, platform plus platform_user_id, to_phone) and hard eligibility rules: SMS/WhatsApp/Telegram may start cold, Facebook and Instagram require a prior inbound message. It also states the pre-call obligation to confirm recipient and text with the user, which functions as an effective when-to-use gate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_commentARead-onlyIdempotent
Simulate a comment. Dry run: what would happen if this text were commented on this channel and post. Runs the live matcher over every trigger in id order and reports the first that fires, the reason each other one did not, the linked flow that would start, or the native flow that would answer if no trigger fires. Nothing is sent and nothing is recorded. Per-person rules (opt-out, blocklist, once-per-user) are not simulated. Dry run, nothing is sent. Use it to check a trigger matches before and after changing it.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The comment text. | |
| post_id | No | The post the comment would be on. Needed for post-scoped triggers to match. | |
| platform | Yes | Channel the comment would be on. | |
| source_type | No | Default comment. | comment |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations by explaining the evaluation order (every trigger in id order), the output shape (first that fires, why each other did not, the linked flow, or the native fallback), and the side-effect guarantee ('nothing is sent and nothing is recorded'). It also discloses a real behavioral gap: opt-out, blocklist and once-per-user rules are not simulated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the dry-run framing and the key output behavior, with no filler sentences. It loses a point for redundancy: the no-side-effects guarantee is stated twice ('Nothing is sent and nothing is recorded' and 'Dry run, nothing is sent').
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return values and does so thoroughly: match result, per-trigger failure reasons, linked flow, and native fallback. Combined with the explicit non-simulated rules, an agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented, including the note that post_id is needed for post-scoped triggers. The description reinforces the text/channel/post framing but 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Simulate a comment') and immediately scopes it as a dry run over a given text, channel and post. This is clearly distinguishable from siblings like list_comment_triggers or get_comment_trigger, which read configuration rather than evaluate a hypothetical comment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit use case: 'Use it to check a trigger matches before and after changing it,' which tells the agent when to reach for it. It also carves out a limitation (per-person rules are not simulated), though it does not name a specific alternative tool for those cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tag_contactB
Attach a tag. Attach by name. The tag is created if it does not exist. Re-attaching is a no-op.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. | |
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds genuinely non-obvious behavior beyond the annotations: the tag is auto-created when absent and re-attaching is a no-op, which tells an agent that retries are safe. However, that no-op claim sits in tension with the declared idempotentHint: false, so the two signals disagree about whether a repeat call is safe to retry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action, and the most load-bearing fact (auto-creation) arrives early rather than buried. "Attach a tag. Attach by name." is slightly redundant but costs little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 covering semantics, the definition covers the key side effect but omits what the call returns (the created tag? the association?) and what happens if the contact id does not exist. Adequate, not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: name has no description at all and id is only "Numeric id." "Attach by name" usefully establishes that name is the tag's name rather than its id, but the description never says what id identifies (contact vs. tag), leaving the more ambiguous parameter unresolved.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Attach a tag" states a specific verb and resource, and "The tag is created if it does not exist" implicitly separates it from the sibling create_tag (which would be a separate step) and from untag_contact. It never names a sibling explicitly, so an agent must infer the boundaries rather than being told them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The auto-create sentence gives useful implied guidance: you do not need to call create_tag first before attaching. Beyond that there is no stated when-to-use, no exclusion against create_tag/untag_contact, and no note on prerequisites such as the contact existing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unblock_userAIdempotent
Unblock a user. The AI answers their next message. The block row is kept for audit, so the id is not reusable.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing two non-obvious behaviors: the AI resumes answering the user's next message, and the block row persists for audit so the identifier cannot be reused. This is exactly the kind of side-effect context annotations cannot convey. It does not mention permission requirements or error behavior, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then the consequence and the identifier caveat. Every sentence adds information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, non-destructive mutation with no output schema, the description covers the surprising side effects an agent needs. It leaves minor gaps around error cases and how to discover valid ids.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the only parameter is documented as 'Numeric id.', which is ambiguous on its own; the description resolves this by implying the id is the block record identifier that is not reusable. That is meaningful disambiguation beyond the schema, though it could be stated more directly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Unblock a user') and immediately clarifies the effect on the AI, which distinguishes it from block_user and list_blocked_users. It does not explicitly name those siblings, keeping it just 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied — you call it to reverse a block — but there is no explicit guidance such as where to obtain the id (presumably list_blocked_users) or what to do if the user was never blocked. Context is clear but no alternatives or exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unschedule_postB
Unschedule a post. Turns a scheduled post back into a draft. Send {} as the body.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds real value beyond the annotations by disclosing the resulting state (draft, content preserved), which is not derivable from destructiveHint=false or idempotentHint=false. However it is silent on what happens if the post is not currently scheduled, and its body instruction is wrong, which undermines trust in the rest of the behavioral claim.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with purpose, which is good structure. But the final sentence is not just filler, it is incorrect, so brevity does not earn it a higher score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, likely idempotent-in-practice state change, the description covers purpose but omits error behavior and, more seriously, contradicts the required parameter contract. With no output schema to explain results, the description needed to be accurate about the call shape and is not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3, but the description actively misleads: it says "Send {} as the body" while the schema requires an integer `id` and forbids additional properties. An agent following the description literally would send an invalid request.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Unschedule a post" names a specific verb and resource, and "Turns a scheduled post back into a draft" states the concrete state transition, which clearly separates it from schedule_post, publish_post, and delete_post in the sibling list. It stops short of explicitly naming those alternatives, but the effect is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The draft outcome implies when to use this rather than delete_post (you want to keep the content), but the description never says so outright and gives no preconditions such as the post currently being scheduled. Usage 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.
untag_contactAIdempotent
Detach a tag. Detach by tag id or URL-encoded name. Detaching a tag the contact does not have is a 200.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. | |
| tag | Yes | Tag id or name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description still adds real operational detail beyond that: the tag may be supplied as a URL-encoded name, and detaching an absent tag returns 200 rather than an error, which tells the agent not to guard the call with an existence check.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, with the core action front-loaded and the edge-case behavior placed last where it belongs. Nothing could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter association-removal tool with full schema coverage and a clear annotation set, this is close to complete; the missing piece is the return shape, since there is no output schema and the description never says whether the call returns the contact, the remaining tags, or nothing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented and the baseline of 3 applies. The description adds the URL-encoding requirement for the name form, which is genuinely useful, but it never states that "id" is the contact id, which the schema only calls "Numeric id."
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Detach a tag" names a specific verb and resource, and the second sentence clarifies the mechanism (by id or URL-encoded name). It is clearly distinct from delete_tag (removes the tag itself) and tag_contact, though the description never explicitly says the detachment is scoped to a contact, leaving that to the tool name and the third sentence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied rather than stated: an agent can infer this removes a tag association from a contact, and the 200-on-missing note tells it not to pre-check existence. However, there is no explicit routing guidance against the closest siblings, delete_tag (deletes a tag globally) or tag_contact (the inverse operation), which is exactly where an agent is most likely to choose wrong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_appointmentADestructive
Update an appointment. Edit details and/or status, the portal's edit form. Send only what changes. Detail edits are pushed to the connected calendars; a status change to cancelled removes the calendar event and fires appointment.cancelled. To move the time use reschedule, which checks the slot. Edits are pushed to the connected calendar, and a status of cancelled removes the event. To move the time, use reschedule_appointment.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. | |
| cost | No | ||
| notes | No | ||
| status | No | ||
| customer | No | ||
| location | No | ||
| timezone | No | ||
| service_type | No | ||
| vehicle_info | No | ||
| duration_minutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and openWorldHint=true, but the description adds real value beyond them: detail edits propagate to connected calendars, a cancelled status deletes the calendar event, and the appointment.cancelled event fires. It stops short of saying whether omitted fields are left untouched or cleared, which matters for a partial-update mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead sentence is well front-loaded, but the calendar-push/cancelled behavior and the reschedule pointer are each stated twice in near-identical wording, wasting roughly a third of the text. Trimming the duplicated clauses would lose no information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent mutation with no output schema, the description covers side effects and event emission well. However, with 10 parameters at 10% schema coverage and nested objects, an agent still lacks guidance on what most fields mean or how partial updates treat omitted values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 10% across 10 parameters, including nested customer and location objects, so the description must compensate and largely does not. Only the status field gets behavioral context (cancelled removes the calendar event); cost, notes, timezone, service_type, vehicle_info, duration_minutes, and the nested objects are never explained. "Send only what changes" is the sole semantic hint about the update model.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Update an appointment") and scopes it to detail and/or status edits via the portal's edit form. It explicitly distinguishes itself from reschedule_appointment, so an agent can route between 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear operating rule ("Send only what changes") and an explicit alternative for time changes ("To move the time, use reschedule_appointment"). It does not address the cancel_appointment sibling, even though setting status to cancelled overlaps with that tool, leaving one routing ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_comment_triggerADestructive
Update a comment trigger. Send only what should change; the rest is kept and the whole trigger is re-validated. active: true activates (refused with plan_limit_reached at the live cap, or flow_conflict if the linked flows are not ready); active: false pauses and pauses the linked flows. Changing button titles or types on a trigger with linked flows pauses those flows and the trigger for branch review; the response carries flow_impact. Edits a trigger that may be live. The whole trigger is re-validated, so a draft needs its DM text and a button before any edit saves. It never switches a trigger on unless you send active: true; confirm with the user before you do.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. | |
| name | No | ||
| active | No | true activates, false pauses. | |
| tag_id | No | Tag applied to the commenter when the trigger fires. Pro plans and above; silently ignored below. | |
| buttons | No | Buttons under the DM. Optional, three at most. | |
| post_id | No | Scope to one post (an id from GET /recent-posts). Null means every post. Ignored for story and live. | |
| keywords | No | Any one of these matches. | |
| platform | No | both | |
| post_url | No | Label only; post_id is what scopes the trigger. | |
| dm_use_ai | No | Let the AI write the DM from dm_ai_goal, the knowledge base and the configured tone. Needs dm_ai_goal. | |
| dm_ai_goal | No | What the AI-written DM should achieve. | |
| match_type | No | exact = whole word; contains = anywhere in the text; fuzzy = tolerates a typo or two. | contains |
| dm_file_url | No | https PDF attached to the DM. | |
| source_type | No | comment = post and Reel comments; story = replies to your stories; both = either; live = comments during an Instagram Live. story and live are Instagram only. | comment |
| dm_image_url | No | https image attached to the DM. | |
| dm_templates | No | Up to five DM variations. Required when the mode includes a DM unless dm_use_ai is true. | |
| response_mode | No | both = public reply and DM; public_only; dm_only. | both |
| public_replies | No | Up to five variations, one is picked per fire. {name} is the commenter. Required when the mode includes a public reply. | |
| exclude_keywords | No | If any of these appear the trigger does not fire. | |
| hide_comment_after_dm | No | Hide the comment once the DM is sent (post comments only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already flagging destructive=true and idempotent=false, the description adds real behavioral context: specific failure modes (plan_limit_reached at the live cap, flow_conflict when linked flows aren't ready), the side effect that changing button titles/types pauses linked flows and the trigger for branch review, and that the response carries flow_impact. That is well beyond what the annotations convey and is exactly what an agent needs before a destructive write.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The most important constraint ('send only what should change', activation safety) is front-loaded, but the sentence 'the whole trigger is re-validated' appears twice in near-identical form, and the final paragraph repeats the 'never switches on without active: true' idea already implied earlier. Trimming the duplication would tighten it without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 20-parameter destructive mutation with no output schema, the description covers the risky surfaces: activation, re-validation prerequisites, flow side effects, and the flow_impact return field. It leaves most data fields to the schema, which is acceptable at 90% coverage, though the absence of any note on how partial arrays (e.g. buttons, keywords) are merged versus replaced is a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 90%, so the baseline is 3; the description earns above that by adding cross-parameter semantics the schema can't express—'a draft needs its DM text and a button before any edit saves' and the linkage between button edits and flow pausing. It does not explain the remaining fields (platform, source_type, keywords), but those are already documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Update a comment trigger') and clarifies that it 'Edits a trigger that may be live', which distinguishes it from create/duplicate/delete siblings. It does not explicitly name those siblings, so differentiation is inferred from the verb 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete operating guidance: 'Send only what should change; the rest is kept', which tells the agent this is a partial update, and it warns 'It never switches a trigger on unless you send active: true; confirm with the user before you do.' What's missing is any explicit routing against alternatives such as create_comment_trigger or duplicate_comment_trigger.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_contactA
Update a contact. Partial update. Only the fields you send change. An empty string clears name, email, phone or notes. custom_fields merges per key; null clears one value.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. | |
| name | No | Empty string clears. | |
| No | Valid email, or empty string to clear. | ||
| notes | No | ||
| phone | No | Digits, +, spaces, dashes, brackets. Empty string clears. | |
| stage | No | ||
| custom_fields | No | Merged per key. Null clears one value. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), and the description adds genuinely useful behavior: only sent fields change, empty string clears text fields, and custom_fields merges per key with null clearing a single value. The one gap is that it does not say what happens when `id` does not exist, which matters for a non-idempotent mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short, front-loaded sentences with no filler; the partial-update rule comes first and the field-level edge cases follow. The opening 'Update a contact' slightly duplicates the title, but the rest of the text is dense with meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation with nested custom_fields and no output schema, the description covers the risky parts well (partial semantics, empty-string clearing, per-key merge). Missing only error/edge behavior for unknown IDs and any note on how the updated contact is returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 71% schema description coverage, the baseline is 3, and the description mostly restates what the schema already says about empty-string clearing and per-key merging. It does add the clearing behavior for `notes`, which is undocumented in the schema, but leaves `stage` and `id` semantics untouched.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update a contact') and immediately qualifies the semantics as a partial update. It is clear what the tool does, but it never names or contrasts with the close sibling `upsert_contact`, so an agent must infer 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through its partial-update framing (use when you want to change only some fields), but it gives no explicit when-to-use/when-not guidance and does not route to `upsert_contact` for create-or-update cases. Usage has to be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_conversationA
Update a conversation. Two optional fields. status: active, resolved or archived; resolving or archiving hands the thread back to the AI, like the inbox. ai_paused: true takes the thread away from the AI as the account owner (the inbox Claim button, reopens a resolved thread); false hands it back (the inbox Transfer to AI). Resume is refused with 409 when the pause came from a solicitation pause, a fraud flag or a connected-account pause; those are lifted in the portal. status is applied first, then ai_paused.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. | |
| status | No | resolved or archived clears the assignment. pending and escalated are set by the system only. | |
| ai_paused | No | true pauses the AI on this thread as the owner; false hands it back to the AI. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the mutation is non-read-only, non-destructive and non-idempotent; the description goes well past that. It discloses that resolving or archiving clears the assignment and returns the thread to the AI, that ai_paused=true reopens a resolved thread, that resume is refused with 409 for solicitation pauses, fraud flags and connected-account pauses (liftable only in the portal), and that status is applied before ai_paused — all behavior an agent could not derive from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the operation, then dense but purposeful detail; every clause about 409 refusals and field ordering earns its place. The sentence "Two optional fields" is redundant with the schema, and the stacked parentheticals make it harder to scan than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter mutation with no output schema, the definition covers side effects, ordering, and error paths thoroughly. The remaining gap is idempotency: the annotations mark idempotentHint=false, yet the description never explains what happens on a repeat call with the same status or ai_paused value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline would be 3, but the description adds real meaning beyond it: the inbox-button equivalents for ai_paused, the cross-field ordering rule, and the failure conditions for resuming. That is exactly the kind of semantic freight the schema cannot carry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Update a conversation") and immediately enumerates the two mutable fields, so an agent knows exactly what surface is touched. It does not, however, distinguish itself from siblings like assign_conversation or get_conversation, which also concern a conversation; the reader must infer that assignment changes belong elsewhere.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Guidance is concrete on when each field applies, mapping ai_paused=true to the inbox Claim button and false to Transfer to AI, and noting that resolving or archiving hands the thread back to the AI. Exclusions are partial: the 409 refusal cases are named, but there is no explicit statement about when to prefer this tool over assign_conversation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_custom_fieldA
Rename or archive a custom field. Change the label, or archive and unarchive. Archived fields keep their values but stop appearing on contacts.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. | |
| label | No | ||
| archived | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the description is not carrying the full safety burden. It still adds genuinely non-obvious state semantics: archiving retains stored values while removing the field from contacts, and the operation is reversible via unarchive. It does not address partial-update semantics or what happens to omitted fields, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences with zero filler: the action first, then the parameter mapping, then the consequence of archiving. Every sentence earns its place and nothing is repeated from the annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter mutation with no output schema and reasonable annotation coverage, the description supplies the important behavioral detail (archived-but-retained fields) and covers both optional parameters. Missing are partial-update semantics and any permission or error context, but these are secondary for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% — 'label' and 'archived' have no schema descriptions — so the description must compensate, and it largely does by mapping each parameter to its effect ('change the label', 'archive and unarchive'). What it does not clarify is that supplying only one parameter leaves the other unchanged, which matters for a PATCH-style update.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (rename or archive a custom field) and enumerates the two supported mutations (label change, archive/unarchive), which is clearly distinct from create_custom_field and list_custom_fields. It stops short of explicitly naming a sibling to disambiguate against, but the 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the note that archived fields keep their values but stop appearing on contacts hints at why you would archive instead of delete, but there is no explicit when-to-use or when-not-to-use instruction, no mention of partial-update behavior, and no prerequisites such as permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_documentB
Rename or toggle a document. Change the name or switch it off without deleting it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. | |
| name | No | ||
| active | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false; the description usefully confirms the non-destructive nature ("without deleting it"), which supports destructiveHint=false. However, it does not disclose that "off" maps to setting active=false, whether the state is reversible, or that idempotency is false despite this looking like a set operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the operations and no filler. The second sentence largely restates the first, which costs a little density but adds the useful non-destructive qualifier.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter, no-output-schema mutation tool this is close to adequate, but gaps remain: "toggle" is ambiguous next to a boolean `active` setter, reactivation is never mentioned, and partial-update behavior is unstated. An agent could call it correctly on the common path but may misread toggle semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% (only id is documented), so the description must compensate: it does map "name" to rename and "switch it off" to the active flag, adding real meaning over the bare schema. It still does not explain that active also accepts true (reactivation), that omitted fields are untouched, or the maxLength/format constraints on name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Rename or toggle a document" gives a concrete verb pair and a clear resource, and the follow-up sentence clarifies the two supported mutations (name change, deactivation). It implicitly differentiates from delete_document via "without deleting it", though it never names the sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Switch it off without deleting it" implies the when-to-use case (deactivate instead of destroy), but there is no explicit statement of when to use this over delete_document, update on other resources, or how to reverse the deactivation. Usage 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.
update_faqA
Update an FAQ. Partial update. Changing question, answer or keywords re-embeds it; changing only active does not.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. | |
| active | No | ||
| answer | No | ||
| keywords | No | Comma-separated hints for matching. | |
| question | No | ||
| category_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the mutation profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false). The description adds a real behavioral trait beyond that: which field edits trigger re-embedding and which do not, which is exactly the kind of side effect an agent needs before editing an FAQ. It stops short of saying what happens on a missing id or whether errors surface.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place, with the core action and the partial-update semantics front-loaded before the re-embedding caveat. No repetition of the name or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 output schema and low schema coverage, the description covers the most consequential behavior (re-embedding) well. It leaves gaps on category_id handling, non-existent ids, and whether the updated record is returned, so an agent still has open questions when invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% (id and keywords are the only documented properties), so the description has to carry weight and it does explain the effect of question, answer, keywords, and active. But category_id is never mentioned in either schema or description, leaving one of six parameters' effect on re-embedding completely ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Update an FAQ. Partial update." gives a clear verb and resource, and the partial-update qualifier separates it from create_faq/get_faq/delete_faq in the sibling list. It never names those siblings explicitly, so the differentiation is inferable 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Partial update" tells the agent it may send only the fields to change, which is genuine usage guidance. However, there is no explicit when-to-use versus get_faq/list_faqs guidance, no statement of prerequisites, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_flowA
Update a flow. Rename, retarget channels, set the tag, and/or replace the definition. A new definition is saved as the DRAFT and validated the same way as on create; the live version keeps running until you publish. Positions are dropped when the definition changes (the builder re-lays it out).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. | |
| name | No | ||
| tag_id | No | ||
| channels | No | ||
| definition | No | A flow as a graph. Read GET /flows/nodes for every node type, port and config field. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations, which only say the call is not read-only, not idempotent, and not destructive. The description discloses the key non-obvious behaviors: a new definition lands as DRAFT rather than live, it is validated like on create, the running version is unaffected until publish, and node positions are discarded on definition change.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action and capabilities, followed by the side-effect warnings. No filler or restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nested, non-idempotent mutation tool this covers the critical mental model: draft-versus-live, validation parity with create, and layout reset. The main residual gap is whether omitted fields are preserved, plus no mention of auth or rate limits, though the safety profile is partly carried by annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 40% schema description coverage and a deep nested definition object, the description compensates by tying each optional parameter to an outcome (rename, retarget, tag, replace) and by explaining what happens to the definition payload. It stops short of clarifying null/omission semantics for tag_id or how partial updates treat untouched fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Update a flow') and enumerates the four updatable facets (rename, retarget channels, set tag, replace definition), which map directly onto the optional schema properties. An agent can distinguish this from create_flow, publish_flow, or validate_flow 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the draft/publish narrative ('the live version keeps running until you publish'), which hints that publishing is a separate step via publish_flow, but no sibling is named and there is no explicit when-not guidance. An agent must infer the workflow ordering rather than being told it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_postA
Update a post. Edit a draft, scheduled or failed post (409 not_editable otherwise). Send only what changes; tiktok merges field by field; other arrays and objects replace. scheduled_at set moves or schedules it (post.scheduled fires); scheduled_at null turns a scheduled post back into a draft.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. | |
| tiktok | No | TikTok settings. Ignored unless TikTok is a target. | |
| caption | No | ||
| hashtags | No | Without the #. | |
| platform | No | A target set. both = Instagram + Facebook; all = all three. | |
| post_type | No | feed_post | |
| scheduled_at | No | ISO-8601. Null on PATCH turns a scheduled post back into a draft. | |
| collaborators | No | Instagram usernames to invite as collaborators. Instagram only. | |
| first_comment | No | Posted under the post right after publish. Instagram and Facebook only. | |
| cover_offset_ms | No | Reels: which frame is the cover. | |
| comment_auto_reply | No | Becomes a comment trigger scoped to this post when it publishes, one per Instagram/Facebook target, with the comment trigger rules. Past the live-trigger cap it is saved paused (see comment_triggers). Instagram and Facebook only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-readOnly, non-idempotent, non-destructive mutation. The description adds meaningful behavior beyond that: partial-update semantics, TikTok field-by-field merge versus replacement of other objects/arrays, the post.scheduled side effect, and the editable-status restriction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the action, then adds constraints and semantics in a compact sequence. Every clause adds useful information about editability, merge behavior, or scheduling side effects, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex nested PATCH tool with 11 parameters and no output schema, the description covers the most important update semantics: allowed statuses, partial-update behavior, replacement rules, and scheduled_at transitions. It appropriately leaves detailed field rules to the schema, though it could say more about nested comment_auto_reply updates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high at 82%, so the baseline is 3. The description adds useful meaning for key parameters, especially partial updates and the set/null behavior of scheduled_at, but does not clarify every parameter such as platform, post_type, or nested comment_auto_reply behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific verb and resource ('Update a post') and immediately narrows editable states to draft, scheduled, or failed, with 409 not_editable otherwise. This distinguishes it from sibling post operations like create_post, publish_post, schedule_post, and unschedule_post.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly says when editing is allowed and when it is not ('409 not_editable otherwise'). It also explains that only changed fields should be sent and how scheduled_at moves between scheduled and draft states, though it does not explicitly name alternative sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_serviceA
Update a service. Partial update. Any content change re-embeds; changing only active does not. The service image is never touched by the API.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric id. | |
| name | No | ||
| price | No | ||
| active | No | ||
| currency | No | ISO 4217 code such as USD or EUR. Null means the account default. | |
| is_virtual | No | Bookings get a Google Meet link. Honoured only when Google Calendar is connected and Meet is on. | |
| price_unit | No | ||
| category_id | No | ||
| description | No | ||
| display_order | No | ||
| duration_minutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the generic mutation profile (readOnly=false, destructive=false, idempotent=false), so the description adds real value: content changes trigger re-embedding while toggling only `active` does not, and the service image is never modified by this API. These are non-obvious side effects an agent should know before writing. It stops short of describing latency/async behavior of re-embedding or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, zero filler, with the core operation and partial-update semantics front-loaded and the caveats following. Every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutation with low schema coverage and no output schema, the description covers the most surprising behavior (re-embedding) and one hard constraint (image untouched). It leaves unclear what is returned, whether re-embedding is synchronous, and how nullable fields (currency, category_id, duration_minutes) behave on update.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 11 parameters and only 27% schema description coverage, most fields (name, price, price_unit, category_id, duration_minutes, display_order) get no explanation in either place. The description explains the side-effect distinction for `active` versus content fields, which is useful, but it does not define what counts as "content" among the parameters or cover the remaining undocumented fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Update a service. Partial update." states a specific verb plus resource and clarifies the mutation style (partial, not full replacement). It clearly separates itself from create_service/delete_service/get_service siblings, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Partial update" implicitly tells the caller to send only the fields being changed, which is actionable guidance. However, there is no explicit when-to-use vs. alternatives (e.g., create_service vs. update_service), no prerequisite/permission notes, and no statement about what happens to omitted fields.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_contactA
Create or update a contact. Upsert keyed by (channel, platform_user_id). 201 when created, 200 when an existing contact was updated. Fields you omit on an existing contact are left untouched, tags included.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| tags | No | Tag names, created if missing. | |
| No | |||
| notes | No | ||
| phone | No | ||
| stage | No | ||
| channel | Yes | ||
| custom_fields | No | ||
| platform_user_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds real behavior beyond the annotations: HTTP status semantics (201 created vs 200 updated), upsert keying, and the partial-write rule that omitted fields including tags are preserved. One tension: the annotations set idempotentHint=false while 'upsert keyed by' implies repeated identical calls converge on the same state, and the description never resolves which interpretation an agent should trust.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the create-or-update verb and the keying rule, with zero filler. Each sentence adds a distinct fact (key, status codes, partial-update semantics).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 9 parameters, a nested custom_fields object, no output schema, and near-zero schema coverage, this mutation tool needs more than four sentences. The key and merge-by-omission behavior are covered well, but nested-object merge semantics and per-field constraints (enum values for stage/channel, maxLengths) remain undocumented on the description side.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 11% (only tags is documented inline), so the description has to carry the load. It explains the two required parameters as a composite key and clarifies that omitted fields are left untouched, but it says nothing about name, email, phone, stage, or — most importantly — whether custom_fields is merged or wholesale replaced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Create or update a contact" gives a specific verb pair and resource, and "Upsert keyed by (channel, platform_user_id)" tells an agent exactly which identity determines create-vs-update, which is the crucial distinction from the sibling update_contact. It stops short of naming update_contact as the alternative, so the boundary must still be inferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the upsert key implies 'use this when you only have channel + platform_user_id,' and the side-effect note implies repeated calls are safe for partial payloads. There is no explicit when-not guidance and no mention of update_contact, create_tag/tag_contact, or what happens if you have an internal contact id instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_flowARead-only
Validate a flow definition. Dry run of the same validation create and update apply. Nothing is saved. Validate a definition without saving it. Loop on errors[] until it is clean, then call create_flow.
| Name | Required | Description | Default |
|---|---|---|---|
| channels | No | ||
| definition | Yes | A flow as a graph. Read GET /flows/nodes for every node type, port and config field. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false; the description reinforces this by stating nothing is saved and that the checks are identical to what create/update enforce, which is behavior the schema cannot express. It also names the errors[] field, valuable since there is no output schema, but never describes that field's shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The key facts are front-loaded, but three of four sentences restate the no-save/dry-run point ('Dry run...', 'Nothing is saved', 'Validate a definition without saving it'). Tightening to two sentences would lose nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nested, two-parameter validation tool with no output schema, the description covers the mutation-free nature and the next step but leaves the reader guessing about the errors[] structure and the channels parameter's effect. Adequate to call it, not adequate to call it well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50% and the tool takes a deeply nested definition object plus an undocumented 'channels' array. The description says nothing about either parameter, not even that channels scopes which channel-specific rules are validated, leaving a real gap in an otherwise complex schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Validate a flow definition') and immediately disambiguates it as a dry run of the validation that create_flow and update_flow apply, which separates it from those siblings. It does not reach 5 because the same idea is restated three times rather than refined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete workflow: loop on errors[] until clean, then call create_flow. That is real when-to-use routing. It stops short of explicitly saying to use this instead of calling update_flow blind, or whether validation is required at all.
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.
105 tool updates
v0.2.2- First observed
activate_flow - First observed
add_competitor - First observed
approve_comment_reply - First observed
assign_conversation - First observed
block_user - First observed
book_appointment - First observed
bulk_approve_comment_replies - First observed
bulk_reject_comment_replies - First observed
cancel_appointment - First observed
create_comment_trigger - First observed
create_custom_field - First observed
create_faq - First observed
create_flow - First observed
create_post - First observed
create_service - First observed
create_tag - First observed
delete_comment_trigger - First observed
delete_document - First observed
delete_faq - First observed
delete_flow - First observed
delete_post - First observed
delete_service - First observed
delete_tag - First observed
discard_flow_draft - First observed
duplicate_comment_trigger - First observed
duplicate_flow - First observed
get_account - First observed
get_account_insights - First observed
get_ai_channels - First observed
get_ai_config - First observed
get_appointment - First observed
get_audience_demographics - First observed
get_availability - First observed
get_comment_manager_stats - First observed
get_comment_trigger - First observed
get_comment_trigger_stats - First observed
get_competitor - First observed
get_competitor_leaderboard - First observed
get_contact - First observed
get_conversation - First observed
get_document - First observed
get_faq - First observed
get_flow - First observed
get_flow_analytics - First observed
get_flow_definition - First observed
get_flow_node_catalogue - First observed
get_flow_session - First observed
get_follower_history - First observed
get_handled_comment - First observed
get_knowledge_usage - First observed
get_overview - First observed
get_post - First observed
get_posting_capabilities - First observed
get_service - First observed
get_top_posts - First observed
get_wins_and_opportunities - First observed
list_appointments - First observed
list_blocked_users - First observed
list_comment_triggers - First observed
list_competitors - First observed
list_contacts - First observed
list_conversations - First observed
list_custom_fields - First observed
list_documents - First observed
list_faqs - First observed
list_flow_events - First observed
list_flow_session_events - First observed
list_flow_sessions - First observed
list_flows - First observed
list_handled_comments - First observed
list_knowledge_gaps - First observed
list_messages - First observed
list_opt_outs - First observed
list_posts - First observed
list_recent_posts - First observed
list_services - First observed
list_tags - First observed
list_team_members - First observed
pause_flow - First observed
publish_flow - First observed
publish_post - First observed
refresh_market_intel - First observed
reject_comment_reply - First observed
remove_competitor - First observed
reschedule_appointment - First observed
retry_post - First observed
schedule_post - First observed
send_message - First observed
simulate_comment - First observed
tag_contact - First observed
unblock_user - First observed
unschedule_post - First observed
untag_contact - First observed
update_appointment - First observed
update_comment_trigger - First observed
update_contact - First observed
update_conversation - First observed
update_custom_field - First observed
update_document - First observed
update_faq - First observed
update_flow - First observed
update_post - First observed
update_service - First observed
upsert_contact - First observed
validate_flow
TDQS
Scored across 105 tools
Most tools have distinct verbs and resource names, and the descriptions are unusually detailed, but the 105-tool surface creates real overlap: list_posts vs list_recent_posts, get_account vs get_overview, update_contact vs upsert_contact, and publish_flow vs activate_flow can be confused. Flow and comment-trigger lifecycle tools are numerous and require careful reading to choose correctly.
Tool names consistently use snake_case verb_noun patterns such as list_contacts, create_flow, publish_post, and cancel_appointment. Minor variations like bulk_approve_comment_replies and get_wins_and_opportunities still fit the convention.
At 105 tools, this is far beyond a practical MCP server scope and fits the rubric's extreme-mismatch range. The breadth spans contacts, conversations, flows, comment triggers, posts, competitors, knowledge, and AI config, creating heavy selection load even though individual tools are purposeful.
Coverage is broad and most domains have full lifecycle support: contacts, appointments, flows, comment triggers, posts, competitors, FAQs, services, and documents. Notable gaps remain, especially media upload for posts despite create_post referencing POST /posts/{id}/media, and there is no mutation tool for AI configuration beyond read-only getters.
Maintenance
Related MCP Connectors
Agent-first social media publishing, scheduling, analytics, and unified inbox API + 16-tool MCP server across 18 social platforms (X, LinkedIn, Instagram, YouTube, TikTok, Threads, Bluesky, Reddit, Telegram, Discord, Mastodon, Facebook, Pinterest).
Schedule and publish social posts across 9 platforms (Instagram, LinkedIn, X, TikTok, Facebook, Threads, Pinterest, Bluesky, Mastodon) straight from Claude, ChatGPT, Cursor, or any MCP client. Create, edit, and reschedule posts, upload media, and pull account and post analytics, follower demographics, and best-time windows. 20 tools, free on every plan.
Instagram MCP for DM and comment automation, AI Agent and content publishing via Meta's official API
1Social media API for AI agents: publish, DMs, comments, Meta ads and leads.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceExposes Instagram actions (posts, media, comments, DMs, insights, Messenger profile) to Claude and ChatGPT via MCP.1MIT
- AlicenseCqualityCmaintenanceProvides AI assistants with access to all public GoHighLevel API endpoints as MCP tools, enabling contact, conversation, opportunity, calendar, and other CRM operations with configurable safety gates for writes and deletes.5565 npm2MIT
- AlicenseBqualityAmaintenanceConnects an MCP-compatible agent to a real Instagram, WhatsApp, or Messenger inbox, exposing 29 tools, 11 playbook prompts, and 2 resources for reading and writing conversations, messages, contacts, templates, journeys, campaigns, comments, and tickets. Includes guided zero-key setup, plan recommendation, and destructive-action hints so cautious agents can confirm state-changing operations.31299 npmMIT
- AlicenseBqualityAmaintenanceEnables AI agents and clients to discover accounts and channels, read scheduling and analytics data, and manage posts, content items, and templates through 41 GraphQL-backed tools with private credential profiles and confirmation-gated mutations.4127 npmAGPL 3.0