Courier
Server Details
Send notifications, manage templates, and configure integrations with Courier.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- trycourier/courier-mcp
- GitHub Stars
- 2
- Server Listing
- Courier MCP Server
Available Tools
144 toolsadd_bulk_usersBInspect
Add users to an existing bulk job.
| Name | Required | Description | Default |
|---|---|---|---|
| users | Yes | Array of user objects to add | |
| job_id | Yes | The bulk job ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only but not destructive; the description adds nothing beyond the operation itself. It does not disclose whether users are appended or replaced, whether duplicates are allowed, whether the job must be in a draft state, or any effects on an already-running job.
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 a single, front-loaded sentence with no filler. It is efficient, though the brevity comes at the cost of behavioral and workflow context.
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 mutation with no output schema, the description is minimally adequate, especially since the schema covers both parameters. It omits the lifecycle relationship with create_bulk_job/run_bulk_job and any constraints, leaving an agent to guess the intended workflow.
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?
Input schema coverage is 100%, with descriptions for both job_id and users, so a baseline of 3 applies. The description adds no additional parameter semantics beyond restating that users are added to an existing job.
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 clear action ('Add users') and the target resource ('an existing bulk job'), which distinguishes it from creation and execution tools such as create_bulk_job and run_bulk_job. It does not, however, clarify what a 'bulk job' is or how this differs from list/tenant/user bulk operations, leaving some ambiguity.
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 'existing' conveys that this must be used only after a bulk job has been created, which is an implicit usage condition. No alternative tools or when-not-to-use guidance are provided, so an agent must infer placement in the create→add→run workflow from the sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_subscribers_to_listAInspect
Append subscribers to a list without removing existing subscribers.
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | Yes | The list ID | |
| recipients | Yes | Recipients to set on the list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only, not idempotent, and not destructive. The description adds one useful behavioral guarantee—existing subscribers are preserved—but does not disclose duplicate handling, failure modes, or response behavior. This is acceptable given the annotations but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It states the action, the target, and the key non-destructive qualifier in eleven 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?
Given the simple two-parameter schema, 100% parameter documentation, and safety-relevant annotations, the description is largely complete for selecting and invoking the tool. It could mention duplicate behavior or the response format, but for a straightforward append operation this is not a critical 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 the schema already documents list_id and recipients. The description adds little beyond framing recipients as subscribers. Notably, the schema's 'Recipients to set on the list' wording slightly conflicts with the append semantics, but that is a schema issue, not compensated by the description.
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 ('Append'), a resource ('subscribers to a list'), and the key behavioral qualifier 'without removing existing subscribers.' This clearly conveys the core operation, though it does not explicitly distinguish itself from sibling tools like bulk_subscribe_to_list or subscribe_user_to_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 phrase 'without removing existing subscribers' implies this tool is appropriate when preservation of existing list membership matters, and not for replacement-style updates. However, it provides no explicit when-to-use guidance or mention of alternatives among the many sibling list/subscription tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_user_to_tenantCIdempotentInspect
Add a user to a tenant.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Tenant-scoped profile overrides | |
| user_id | Yes | The user ID | |
| tenant_id | Yes | The tenant ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides no behavioral traits beyond the annotation block: it only restates the action. It does not explain idempotent behavior, whether existing memberships are replaced, or what profile overrides do; the annotations already supply the read-only/destructive hints but the description adds no extra 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?
The description is a single sentence with no filler or repetition, and the core action is front-loaded. It is not overly verbose, though its brevity comes at the cost of useful context.
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, a nested profile object, and ambiguous sibling operations, the description leaves users without return-value expectations, membership semantics, or profile-override behavior. It is barely adequate for a tool with only two required scalar fields but insufficient given the surrounding toolset.
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 already documents user_id, tenant_id, and profile. The description adds no parameter-specific meaning beyond echoing the roles of user and tenant, which keeps 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?
The description is a plain-language restatement of the tool name — 'Add a user to a tenant' adds no information beyond the name/title. It gives no detail about tenant-scoped profiles or how this differs from add_bulk_users and bulk_add_user_tenants, so it does not achieve 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?
No guidance is given about when to call this tool instead of add_bulk_users, bulk_add_user_tenants, or remove_user_from_tenant. The core operation can be inferred from the name, but the description does not state contexts, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_journeyADestructiveIdempotentInspect
Archive a journey. Archived journeys cannot be invoked but existing runs continue to completion.
| Name | Required | Description | Default |
|---|---|---|---|
| journey_id | Yes | The journey template ID to archive |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate destructive, idempotent, and non-read-only behavior. The description adds the specific impact not present in annotations: archived journeys cannot be invoked and existing runs continue. This is valuable extra context for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences: the action first, then the key consequence. No filler, no redundant restating of 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?
For a single-required-parameter archive operation with no output schema, the description covers the essential behavior and outcome: the journey is archived, future invocations stop, and running executions finish. It could add reversibility or permanence details, but the destructiveHint annotation already signals that risk.
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 journey_id with 'The journey template ID to archive' and has 100% coverage, so the description need not repeat parameter details. It adds no additional parameter-level nuance beyond what the schema provides, so a 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 uses a specific verb and resource ('Archive a journey') and clarifies the consequence of archiving: future invocations are blocked while existing runs continue. It does not explicitly differentiate from the sibling 'archive_journey_template', whose name overlaps, but the resource naming is still 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?
The phrase 'cannot be invoked but existing runs continue to completion' explains the scenario where this tool applies: you want to stop new invocations without interrupting active runs. It does not explicitly name alternatives like cancel_journey or archive_journey_template, but the behavioral context is enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_journey_templateADestructiveIdempotentInspect
Archive a journey-scoped notification template. Archived templates cannot be sent.
| Name | Required | Description | Default |
|---|---|---|---|
| journey_id | Yes | The journey template ID that owns this notification | |
| notification_id | Yes | The notification template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=true, so the description does not need to re-state those traits. It adds genuine behavioral context by warning that archived templates cannot be sent, which is not present in the annotations or schema. No contradiction exists between the description and annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with the action and scope front-loaded, followed by the most important behavioral consequence. Every sentence earns its place, with no filler or redundant 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 two-parameter archive operation with no output schema, the description plus the fully documented input schema provides enough context to call the tool safely and correctly. It could be slightly richer by mentioning whether archiving is reversible or how it relates to siblings, but nothing essential 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%: both journey_id and notification_id already have meaningful descriptions in the input schema. The tool description only reinforces that the notification is journey-scoped and does not add new parameter-level meaning, so the schema-driven 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 uses a specific verb ('Archive') and identifies the resource as 'a journey-scoped notification template,' which clearly differentiates it from siblings like archive_journey and archive_notification. It also states the practical consequence ('Archived templates cannot be sent'), making the tool's purpose 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 'journey-scoped' qualifier implies this tool is for notification templates owned by a journey, but the description does not explicitly name alternatives or state when not to use this tool (e.g., using archive_notification for standalone templates). Usage guidance is therefore more implied than explicitly contrasted with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_notificationBDestructiveIdempotentInspect
Archive a notification template by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| notification_id | Yes | The notification template ID to archive |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, and the description aligns with those. However, the description adds no extra behavioral context beyond the annotations—it does not mention irreversibility, soft-delete semantics, or what happens to the notification template after archiving.
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 one tight sentence with no filler. The verb, resource, and selection mechanism are all present and front-loaded, making it efficient and easy to parse.
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?
The tool is simple and the annotations cover the destructive profile, but the description still leaves gaps: no return/output information, no postcondition details, and no differentiation among the many archive_* siblings. It is minimally adequate but not fully 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 parameter description already states the notification template ID is to be archived. The tool description adds no new parameter semantics, so the 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 uses a specific verb, 'Archive', and a clear resource, 'notification template', with the selection method 'by ID'. This distinguishes it from other archive_* siblings such as archive_journey_template or archive_routing_strategy without opening their schemas.
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 about when to use this tool versus alternatives like archive_journey_template or archive_request. The description states only the action and resource; no when-not conditions, prerequisites, or alternative references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_preference_sectionADestructiveIdempotentInspect
Archive a preference section. The section must be empty: delete its topics first, otherwise the request fails with 409.
| Name | Required | Description | Default |
|---|---|---|---|
| section_id | Yes | Id of the preference section to archive |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true. The description adds valuable behavioral context beyond those annotations by stating that non-empty sections cause a 409 and that topics must be removed first. This operational constraint is not inferable from the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is just two sentences with no filler. The core action is stated first, followed immediately by the critical precondition. Every word contributes to effective tool invocation.
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 mutation with no output schema, the description covers the essential operational context: what the tool does, what must be true before calling it, and what happens if that condition is violated. The annotations cover idempotency and destructiveness, so nothing important 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 schema already provides full coverage for the single parameter, section_id, with a clear description. The tool description does not add extra parameter-level detail, but the schema handles that sufficiently, 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 uses a specific verb ('Archive') and a clear resource ('a preference section'), making the tool's function immediately identifiable. It also distinguishes itself from sibling tools like create_preference_section, replace_preference_section, and archive_preference_topic by naming the exact object being acted upon.
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 gives an explicit precondition: the section must be empty, and topics must be deleted first. It also specifies the failure mode (409) if this precondition is not met. It does not explicitly name an alternative tool such as archive_preference_topic, but the guidance is clear enough for an agent to understand the required workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_preference_topicBDestructiveIdempotentInspect
Archive a topic within a section.
| Name | Required | Description | Default |
|---|---|---|---|
| topic_id | Yes | Id of the subscription preference topic to archive | |
| section_id | Yes | Id of the preference section |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the safety profile is covered. The description adds only the section-scoping context, not extra behavioral detail such as whether archiving affects subscribers or is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler; the verb and object are front-loaded and the sentence is easy to parse.
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 full schema coverage and safety annotations, the description is minimally sufficient. However, there is no explanation of what archiving does semantically or what a successful call returns, and the wording is thin 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%, so the schema already documents both topic_id and section_id. The description's 'within a section' conveys a slight relationship hint but does not add meaningful parameter 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?
States a specific verb ('Archive') and a specific resource ('topic within a section'), which already separates it from archive_preference_section and archive_journey. It does not explicitly name the sibling for section archiving, so it doesn't fully earn 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?
No guidance on when to use this tool versus sibling archive_preference_section, get_preference_topic, or delete_user_preference_topic. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_requestBDestructiveIdempotentInspect
Archive a send request and all its associated messages by request ID.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes | The request ID (requestId returned from /send) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already carry idempotentHint=true and destructiveHint=true, lowering the description's burden. The description adds useful context by stating that archiving affects 'all associated messages', not just the request. It does not explicitly mention irreversibility or post-archive effects, but the annotation coverage mitigates that 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 description is a single 12-word sentence with a clear verb-object structure and no filler. It is front-loaded with the action and resource, making it easy for an agent to quickly parse.
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 one well-documented parameter and annotations declaring destructive and idempotent behavior, the description covers the operation's scope adequately. It lacks an explicit note about irreversibility or return value, but this is a simple operation and the schema plus annotations fill most gaps.
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 documents the sole parameter request_id with a clear description ('The request ID (requestId returned from /send)'), so schema coverage is 100%. The description only rephrases 'by request ID' and adds no format, source, or validation 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?
The description states a specific action ('Archive'), a resource ('a send request'), and the scope ('all its associated messages'), with the lookup method ('by request ID'). It is clear enough to distinguish from sibling archive_* tools that target journeys, templates, notifications, and preferences, though it does not explicitly name an alternative.
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?
No when-to-use guidance, prerequisites, or exclusions are provided. It does not tell an agent to prefer this tool over related message tools like cancel_message or resend_message, nor when not to use it. The only usage signal is the inherent action of archiving, requiring the agent to infer applicability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_routing_strategyADestructiveIdempotentInspect
Archive a routing strategy. The strategy must not have associated notification templates; unlink all templates before archiving.
| Name | Required | Description | Default |
|---|---|---|---|
| routing_strategy_id | Yes | The routing strategy ID to archive |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive and non-read-only behavior. The description adds that archiving is gated on absence of notification templates and tells the caller to unlink first, which is meaningful context beyond annotations. It doesn't discuss reversibility or failure cases, but the annotation coverage lowers the 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?
Two sentences, action first, precondition second, and no filler. The clause about unlinking templates is essential and earns its 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 single-parameter archive operation with annotations covering destructiveness and idempotency, the description covers the action and the central precondition. It doesn't identify the tool used to unlink templates or describe the response, but these are minor for this simple 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 covers routing_strategy_id at 100%, so the parameter is fully documented in the schema. The description adds no extra detail about ID format, source, or how to obtain it, 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 precise verb and object: 'Archive a routing strategy.' The resource is specific and uniquely identifies this operation among sibling archive_* tools, distinguishing it from archive_notification, archive_journey, and similar.
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 prerequisite: the strategy must not have associated notification templates and instructs to unlink templates before archiving. It doesn't name alternative tools or explicitly say when not to use it, but the precondition provides usable call-condition guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_add_user_tenantsAIdempotentInspect
Add a user to multiple tenants at once. A custom profile can be supplied per tenant.
| Name | Required | Description | Default |
|---|---|---|---|
| tenants | Yes | Array of tenant associations | |
| user_id | Yes | The user ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already communicate that this is a mutating but idempotent, non-destructive operation. The description adds the useful detail that a custom profile can be applied per tenant, but does not disclose anything about partial failures, existing associations, or what happens after the operation. No contradiction exists between text and annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The first states the core action and scope; the second adds the optional per-tenant profile behavior. Every word contributes useful 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 mutation with fully described schema fields and an idempotency annotation, the description covers the essential invocation context. The only nuance not addressed—such as behavior when the user already belongs to a tenant—is not necessary to make a correct first call.
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 provides descriptions for both user_id and the tenants array, giving 100% coverage. The description's mention of a custom profile per tenant slightly reinforces the schema's 'Tenant-scoped profile overrides', but does not add substantial meaning beyond what the schema already 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 uses a specific action ('Add a user to multiple tenants at once') and clearly distinguishes this tool from the single-tenant sibling add_user_to_tenant by emphasizing the bulk, multi-tenant nature. It also adds the per-tenant custom profile capability, which makes the purpose unmistakable.
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 this is the right choice when multiple tenants need to be handled in one call, but it does not explicitly name add_user_to_tenant as the alternative for single-tenant operations or state any exclusion criteria. An agent must infer the usage boundary from the tool name and wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_add_user_tokensAInspect
Add multiple push/device tokens for a user in one request. Overwrites matching existing tokens.
| Name | Required | Description | Default |
|---|---|---|---|
| tokens | Yes | Token records to upsert | |
| user_id | Yes | The user ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a write operation, so the description adds value by disclosing that matching existing tokens are overwritten rather than appended, preventing duplicate accumulation. It does not cover failure modes or what counts as a 'matching' token, but the overwrite behavior is a meaningful disclosure beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences: the first delivers the primary action and scope, and the second adds the critical overwrite behavior. There is no filler or redundant 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 bulk mutation with a nested token schema and no output schema, the description covers the core semantics but leaves gaps: it does not explain the key used to match existing tokens, how duplicates inside the same request are handled, or what response/error behavior to expect. It is serviceable for basic invocation but not fully 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 input schema fully documents both parameters and nested fields like token, provider_key, expiry_date, and device metadata, so the description does not need to repeat them. The description adds only the generic framing of 'push/device tokens,' which does not elevate it beyond 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?
The description states a specific action—adding multiple push/device tokens for a user in one request—and distinguishes it from singular token tools like create_or_replace_user_push_token by emphasizing batch operation. The overwrite note further clarifies the operation's semantics.
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 batch use case with 'multiple tokens in one request' and upsert behavior with 'overwrites matching existing tokens,' but it never explicitly names alternatives or states when to prefer this over a singular token tool. No exclusions or conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_replace_user_preferencesADestructiveIdempotentInspect
Replace a user's complete set of preference overrides in one request. The topics in the body become the recipient's entire override set: listed topics are created or updated, and every existing override not included is reset to its topic default. An empty topics array clears all overrides. Validation-atomic (all-or-nothing).
| Name | Required | Description | Default |
|---|---|---|---|
| topics | Yes | The complete set of topic overrides. An empty array resets every existing override. | |
| user_id | Yes | The user ID | |
| tenant_id | No | Scope the replacement to a specific tenant context |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses destructive behavior in detail: omitted overrides are reset to defaults and an empty array clears all overrides, going beyond the annotations' destructiveHint=true. It also adds the validation-atomicity trait, which annotations do not convey, and there is no contradiction with readOnlyHint=false or idempotentHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences plus one atomicity tag; each sentence carries a distinct fact (scope, reset behavior, empty-array behavior, transactional guarantee). The purpose is front-loaded and there is 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?
The description is complete enough for a destructive bulk replace: it explains the full replacement contract, the empty-array edge case, and atomicity, while annotations and full schema coverage handle safety and parameter meaning. It does not mention an alternative for partial updates or describe the response/return value, but given no output schema and a clear mutation contract, those are minor gaps.
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 already documents all parameters (100% coverage), so the description does not need to repeat definitions. It adds meaningful behavior for `topics`—listed topics are created or updated, omitted ones are reset to defaults—which goes slightly beyond the schema's 'complete set' summary. Other parameters like `user_id` and `tenant_id` are adequately covered by schema descriptions.
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 object ('Replace a user's complete set of preference overrides'), and the second sentence clarifies the exact scope of replacement ('entire override set', 'every existing override not included is reset'). This clearly distinguishes the full-replace semantics from partial-update siblings even 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?
The description makes the use case explicit: use this tool when the caller wants to set a user's full override set in one atomic request. It implies that partial updates or single-topic changes belong elsewhere, though it does not explicitly name alternatives like bulk_update_user_preferences, so the routing guidance is slightly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_subscribe_to_listADestructiveIdempotentInspect
Replace all subscribers on a list with the given recipients.
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | Yes | The list ID | |
| recipients | Yes | Recipients to set on the list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true. The description adds useful context by specifying that the destructive effect is replacing all existing subscribers with the supplied recipients, which is consistent with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the core behavior ('Replace') and the object ('all subscribers on a list'). Every word earns its place, with no redundant 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?
Given the low complexity, complete parameter schema, and annotations covering destructive and idempotent behavior, the description fully enables an agent to call the tool correctly. No critical usage detail, such as the replacement semantics, 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%, with list_id and recipients documented. The tool description reinforces that recipients become the full replacement set, but it adds no parameter-level detail beyond what the schema already provides, such as format, constraints, or edge cases.
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 ('Replace') and clearly identifies the resource ('all subscribers on a list') and the action ('with the given recipients'). This immediately distinguishes it from additive siblings like add_subscribers_to_list or subscribe_user_to_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?
'Replace all subscribers' clearly conveys that this tool is for setting the exact subscriber set rather than incrementally adding subscribers. It does not explicitly name alternative tools or state when not to use it, but the context is clear enough for an agent to select the correct operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_update_user_preferencesAInspect
Additively create or update a user's preferences for one or more topics in a single request. Only the topics in the body are touched; existing overrides for other topics are left untouched. Partial-success: valid topics are written and returned in items, unapplicable ones collected in errors.
| Name | Required | Description | Default |
|---|---|---|---|
| topics | Yes | Topics to create or update | |
| user_id | Yes | The user ID | |
| tenant_id | No | Scope the update to a specific tenant context |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations carry the basic safety profile (readOnly=false, idempotent=false, destructive=false), and the description adds genuinely valuable behavior on top: the partial-success contract ('valid topics are written and returned in items, unapplicable ones collected in errors') and the non-destructive scoping to only topics present in the body. It does not contradict annotations; 'create or update' aligns with readOnlyHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, roughly 40 words, each earning its place: core purpose, scoping behavior, and partial-success behavior. The most decision-relevant fact (additive, not replace) is front-loaded in the first 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?
For a bulk mutation with partial-success semantics, the description covers the essential facts: additive create-or-update behavior, touched-topic scoping, and the items/errors result split that compensates for the absent output schema. Minor gaps remain — it does not route explicitly to bulk_replace_user_preferences for replacement needs, explain tenant_id's effect, or detail the exact shape of items/errors entries — but none block correct 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?
Schema description coverage is 100%, so the schema already documents user_id, topics, and tenant_id with individual descriptions; baseline 3 applies. The description reinforces that topics entries are processed individually via the partial-success split but adds no syntax or format details beyond what the schema provides.
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?
Begins with a specific verb+resource ('Additively create or update a user's preferences') and bounds the scope to 'one or more topics in a single request.' The phrase 'Only the topics in the body are touched; existing overrides for other topics are left untouched' clearly differentiates it from the sibling bulk_replace_user_preferences without needing to open 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?
The 'Additively' qualifier and 'existing overrides for other topics are left untouched' effectively convey when this tool is appropriate: partial, additive updates rather than wholesale replacement. However, it stops short of explicitly naming bulk_replace_user_preferences as the alternative for full-replacement scenarios or stating a when-not-to-use condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_automationAIdempotentInspect
Cancel a running automation by its cancelation_token. This invokes a second ad-hoc automation with a single cancel step. The token must match the cancelation_token set when the original automation was started. Note: spelling is "cancelation_token" (single "l").
| Name | Required | Description | Default |
|---|---|---|---|
| cancelation_token | Yes | The cancelation_token that was set when the automation was originally invoked |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral details beyond annotations: it reveals that cancellation works by invoking a second ad-hoc automation with a single cancel step, which is non-obvious and useful. The spelling note also helps avoid invocation errors. Annotations already cover idempotence and non-destructive nature, so the bar is partially lowered.
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 purpose. Four sentences are used, but each earns its place: the cancellation mechanism, the token matching prerequisite, and the spelling note are all relevant. Minor redundancy exists between 'cancelation_token' appearing in the first and third sentences.
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 tool, the description is largely complete: it explains the action, the mechanism, and the token requirement. The lack of an output schema is acceptable since return values are not critical for invocation. It could briefly mention when not to use it, but this is not a significant 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 input schema already documents the single parameter with 100% coverage. The description reinforces the matching requirement and adds a spelling clarification, but does not substantially expand parameter semantics beyond what the schema provides.
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 an unambiguous action ('Cancel a running automation') and specifies the exact resource and identifier mechanism ('cancelation_token'). It clearly differentiates from sibling tools like cancel_journey and cancel_message by targeting automations specifically.
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 provides clear context: use this tool to cancel a running automation, and the token must match the original cancelation_token. It does not explicitly exclude other scenarios or name alternatives, but the context is clear 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.
cancel_journeyADestructiveIdempotentInspect
Cancel journey runs. Supply EXACTLY ONE of cancelation_token (cancels every run associated with the token) or run_id (cancels a single run). Cancelation is idempotent: a run that already finished or was already canceled is left unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | No | Cancels a single run by id. Mutually exclusive with cancelation_token. | |
| cancelation_token | No | Cancels every run associated with this token. Mutually exclusive with run_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint and idempotentHint, but the description goes further by spelling out what idempotency means in practice: already-finished or already-canceled runs are left unchanged. It also discloses that cancelation_token affects every run associated with the token, which is key behavioral context beyond the annotation flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences deliver the essential information in order: what the tool does, the parameter selection rule, and idempotency behavior. There is no filler, repetition, or unnecessary elaboration.
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 cancellation tool with strong annotations and full schema coverage, the description is sufficient. It covers the action, the parameter constraint, and the idempotency behavior. No output schema exists, but none is needed for an agent to invoke this tool 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 input schema already documents both parameters and their mutual exclusivity with 100% coverage. The description adds value by emphasizing 'EXACTLY ONE' as a hard invocation rule and summarizing the semantic difference between canceling a single run and canceling every run tied to a token, which helps an agent select the right parameter without opening the schema definitions.
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: 'Cancel journey runs,' which distinguishes this tool from siblings like cancel_automation, cancel_message, and cancel_notification_submission. It also clarifies the two scopes of cancellation (token-wide vs single run), making the tool's purpose 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 description gives explicit invocation guidance: supply EXACTLY ONE of cancelation_token or run_id. It also explains the consequence of each choice. It does not explicitly state when to prefer this tool over sibling cancel tools, but the resource-focused name and 'journey runs' phrasing make the intended context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_messageADestructiveIdempotentInspect
Cancel a message that is currently being delivered. Returns the message details with updated status.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | The message ID to cancel |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructive and idempotent behavior. The description adds meaningful context by specifying the in-delivery precondition and stating that the return value contains the message details with updated status. This goes beyond what annotations and schema provide, with no 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?
Two short sentences with no filler. The core action and precondition are front-loaded, and the return behavior is stated efficiently in the second 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 single-parameter destructive action, the description covers the action, the valid precondition, and the return value. Annotations cover idempotency and destructiveness, so nothing essential is missing for an agent 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?
The schema describes message_id as 'The message ID to cancel' with 100% parameter coverage, so the schema already carries the meaning. The description adds no additional syntax, format, or source guidance for the parameter, which lands at the expected 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 an explicit action ('Cancel'), a specific resource ('a message'), and a precondition ('currently being delivered'). This clearly differentiates it from sibling tools like cancel_automation, cancel_journey, and cancel_notification_submission without needing to inspect their schemas.
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 'currently being delivered' gives a clear condition for when this tool applies, which helps an agent decide whether cancellation is appropriate. It does not explicitly name alternatives or exclusions, but the precondition is contextually strong enough for basic routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_notification_submissionADestructiveIdempotentInspect
Cancel a notification template submission.
| Name | Required | Description | Default |
|---|---|---|---|
| submission_id | Yes | The submission ID to cancel | |
| notification_id | Yes | The notification template 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 by structured data. The description adds no additional behavioral context, such as whether cancellation is reversible or what happens to the submission, but it does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with no filler, redundant modifiers, or irrelevant context. The action and resource are front-loaded, and every word contributes.
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 destructive operation with annotations and full schema coverage, the definition is minimally sufficient. However, it is cryptic about what a 'notification template submission' is and what cancellation means in the overall workflow, with no output schema or additional context to clarify.
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 both notification_id and submission_id documented in the input schema. The description adds no parameter-level detail, but the schema already carries the burden of explaining each parameter.
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, 'Cancel', and a distinct resource, 'notification template submission,' which clearly differentiates it from sibling tools like cancel_automation, cancel_journey, and cancel_message. There is no ambiguity about which object is acted upon.
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 provides no guidance on when to use this tool vs. alternatives, no prerequisites, and no workflow context. It does not mention under what conditions a notification template submission should be cancelled or how it differs from similar cancellation operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
courier_installation_guideARead-onlyInspect
Get the Courier SDK installation guide for a specific platform. For client-side SDKs (React, iOS, Android, Flutter, React Native), also generates a sample JWT.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | User ID for JWT generation (client-side SDKs only). Defaults to "example_user". | |
| platform | Yes | The platform to get installation guide for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint=true, so the description only needs to add extra context. It discloses that client-side SDKs generate a sample JWT, which is a behavioral trait beyond a simple read operation and helps the agent understand side outputs.
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 concise sentences with no filler. The main purpose is front-loaded, and the JWT detail is a useful supplement rather than repetition.
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 read-oriented tool, the description covers the essential behavior: what it returns (installation guide) and the extra output for client-side platforms (sample JWT). No output schema exists, but the description provides enough for an agent to infer the basic return 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 description coverage is 100%, so the schema already documents both platform and user_id clearly. The description reiterates the client-side/JWT behavior, which is helpful context but doesn't add meaning beyond what the schema already 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 ('Get') and resource ('Courier SDK installation guide') scoped by platform. It also names the client-side platforms that trigger JWT generation, which clearly distinguishes this from other get_* tools 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 implies use when an installation guide is needed, and it notes that client-side SDKs also produce a sample JWT. However, it does not explicitly address alternatives such as generate_jwt_for_user, which could create ambiguity for agents trying to decide between standalone JWT generation and this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_brandBInspect
Create a new brand. The API requires settings — omitting it returns a 400. If you do not have specific brand colors, omit settings and a safe default will be used automatically (black primary, white secondary). Example: { name: "Acme", settings: { colors: { primary: "#1a73e8", secondary: "#ffffff" } } }.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Optional brand ID; auto-generated if omitted | |
| name | Yes | Brand display name | |
| settings | No | Brand appearance settings. If omitted, defaults to { colors: { primary: "#000000", secondary: "#ffffff" } }. | |
| snippets | No | Brand snippets |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a 400-on-omitted-settings behavior and a safe default, but the two statements contradict each other: it first says omitting settings returns 400, then says omitting settings uses a safe default. The schema already documents the default, and the annotations carry little behavioral content, so the contradictory claims reduce transparency rather than add 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?
The description is appropriately short at three sentences with an example, and it front-loads the core purpose. However, the self-contradictory middle sentence harms clarity, keeping this from 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?
With nested settings/colors objects and no output schema, the description needed to clearly explain when settings are required and what happens if omitted. Instead it gives conflicting answers, so an agent cannot reliably decide whether to send settings. The schema fills some gaps, but the tool-level description is not complete enough on its own.
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 example adds a concrete structure for settings.colors, and the second sentence offers a heuristic for omitting settings, but the contradictory 'requires settings' statement undercuts that guidance and prevents a higher score.
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 phrase 'Create a new brand' clearly states the verb and resource, and 'new' distinguishes this from update_brand, delete_brand, get_brand, and list_brands. Even without naming siblings, 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?
The description implies when to use the tool—creating a new brand—and offers guidance about when to omit settings (when no specific brand colors are available). However, it never explicitly states the alternative for updating an existing brand or gives a clear when-not-to-use condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_bulk_jobAInspect
Create a new bulk job for sending messages to multiple recipients. Workflow: create_bulk_job → add_bulk_users → run_bulk_job.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Bulk message definition with event/template and content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, idempotentHint=false, destructiveHint=false, but carry limited detail. The description adds the multi-step workflow context, implying the created job is not yet ready to send until users are added and run. However, it doesn't disclose behaviors like persistence, auth requirements, or side effects beyond creating a job. Without additional context, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. It front-loads the primary purpose and immediately follows with the workflow, which is essential context. Every sentence earns its place, making it highly concise and well-structured.
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 creation tool with one parameter and no output schema, the description is fairly complete. It explains the tool's role in the overall process via the workflow, which is crucial for an agent. However, it doesn't mention what the response looks like (e.g., job ID), which agents might need for subsequent steps. The open-ended message structure is also not detailed, but this is partially a schema issue. Overall, it's sufficient for basic usage.
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 single parameter 'message' has a schema description: 'Bulk message definition with event/template and content.' Schema description coverage is 100%, so the schema already documents the parameter. The tool description adds little beyond this—only the workflow context. The description of 'message' is vague (additionalProperties open), so no extra clarity is provided. Baseline 3 is appropriate since the schema carries the 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?
The description clearly states the tool's purpose: 'Create a new bulk job for sending messages to multiple recipients.' It uses a specific verb (create) and resource (bulk job), and the mention of sending messages distinguishes it from sibling tools that add users or run the job. The purpose is unambiguous and distinct from other bulk-related tools like add_bulk_users and run_bulk_job.
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 provides an explicit workflow: 'create_bulk_job → add_bulk_users → run_bulk_job.' This tells an agent exactly when to call this tool (as the first step in a multi-step bulk-sending process) and gives context for how it fits with siblings. It doesn't explicitly state alternatives to avoid, but the workflow sequence is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_journeyAInspect
Create a new journey. Always created as a draft; making it live is a separate step this tool cannot perform. Send two nodes: the trigger, and an exit node last. Both are required — a create with no exit node is rejected, and the API reports that as "exit node must be the last node in the journey" even when no exit was sent at all. Send and delay nodes are added afterwards by replace_journey, once journey-scoped templates exist. Node ids are server-generated; do NOT include an id field. Example: { name: "Welcome Journey", nodes: [{ type: "trigger", trigger_type: "api-invoke" }, { type: "exit" }], enabled: true }. The result carries a "verification" object read back from the server after the write — check it every time. verified:true means what you asked for is what saved. verified:false names what did not: "fieldMismatches" for node fields that failed to land, "nodeCountMismatch" for a node dropped or added, and "unknownTemplateReferences" for a send node pointing at a template id this journey does not have — almost always a mistyped id, so re-copy it from the create_journey_template or get_journey response it came from. Fix the specific thing named and send the corrected document. Re-sending an identical call changes nothing, and every replace_journey overwrites the whole draft again. An "errorKind" of "unauthorized" means the write itself succeeded and only the read-back was refused: report that as unconfirmed, never as a failed write.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Journey display name | |
| nodes | Yes | The trigger node, then a terminal exit node — both required. Send and delay nodes are added later by replace_journey. Node ids are server-generated — do NOT include an id field. Example: [{ type: "trigger", trigger_type: "api-invoke" }, { type: "exit" }]. | |
| state | No | Must be "DRAFT". These tools cannot publish. | |
| enabled | No | Whether the journey is active. Defaults to true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says "Re-sending an identical call changes nothing," implying idempotent behavior, but the annotations set idempotentHint to false. This is a direct contradiction on a critical behavioral property, so the description cannot be trusted as transparent.
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 long but information-dense; nearly every sentence adds operational detail or error-handling context. It is well front-loaded with the core draft-only and node-order rules, though the verification paragraph is verbose enough that it could 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?
With no output schema, the description does a strong job explaining the verification object, mismatch categories, unauthorized errorKind handling, and the relationship to replace_journey. However, the conflict between the stated idempotence and idempotentHint:false leaves an unresolved, operationally important inconsistency.
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. The description still adds meaning beyond the schema: nodes must be trigger then exit, exit is required even though only name and nodes are in the schema's required list, node ids are server-generated and must be omitted, and verification failure modes map to specific node/template parameters.
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 "Create a new journey," naming a clear verb and resource, then sharpens scope with "Always created as a draft; making it live is a separate step this tool cannot perform." It distinguishes itself from replace_journey by noting send/delay nodes are added there, so an agent can separate create from modify.
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 explicitly states when to use this tool versus replace_journey: send and delay nodes are added later by replace_journey once journey-scoped templates exist, and publishing is a separate step. It also gives corrective guidance for failed verification: fix only the named mismatch and resend.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_journey_templateAInspect
Create a notification template scoped to a journey. Always created as a draft; making it live is a separate step this tool cannot perform. The template can then be referenced in journey send nodes. Example: { journey_id: "j-abc", channel: "email", notification: { name: "Welcome Email", tags: [], brand: null, subscription: null, content: { version: "2022-01-01", elements: [{ type: "text", content: "Hello!" }] } } }. The result carries a "verification" object confirming the new id is really present on the journey. verified:true means the id in this response is safe to reference from a send node. verified:false means it is not visible yet — re-read the journey before referencing it, and do not create a second template to work around it. An "errorKind" of "unauthorized" means the template was created and only the check was refused.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Must be "DRAFT". These tools cannot publish. | |
| channel | Yes | Channel for this template (e.g. "email", "push", "sms", "inbox") | |
| journey_id | Yes | The journey template ID | |
| notification | Yes | Notification template definition | |
| provider_key | No | Specific provider key to target |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only provide basic flags, all false. The description goes well beyond them: it discloses draft-only creation, the separate publication step, verification semantics for the returned id, and the meaning of errorKind 'unauthorized' including the partial-failure case where the template was actually created. This is unusually transparent.
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 core action and draft limitation, then adds only high-value context: usage in send nodes, a concrete example, and essential verification/error behavior. Every sentence earns its place despite the length.
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 compensates by explaining the verification object, verified true/false meanings, and unauthorized errorKind. It does not document the full response shape, but it gives an agent enough information to invoke the tool correctly and interpret the critical post-call result.
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 all parameters and nested fields. The description's example illustrates the expected shape but does not add meaningfully new semantics for parameters beyond what the schema provides, 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: 'Create a notification template scoped to a journey.' This distinguishes it from standalone notification tools like create_notification. It also clarifies a key distinguishing constraint, that the template is always created as a draft and cannot be made live by this 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 gives clear context: use this for journey-scoped notification templates, and it explicitly warns that making the template live is a separate step this tool cannot perform. It does not name an alternative sibling directly, but the context is strong enough to route an agent to publish_journey_template for publication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_listAIdempotentInspect
Create or update a list by list ID.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for the list | |
| list_id | Yes | The list ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that the tool mutates (readOnlyHint=false), is idempotent, and is not destructive. The description adds the upsert behavior ('create or update'), but it does not disclose what happens to unspecified fields or whether update is a full replacement. This is modest additional context beyond the annotations, with no 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?
A single sentence that front-loads the action and resource while identifying the key parameter. There is no redundant or filler text; every word contributes to the tool's purpose.
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 tool with full schema coverage and annotations, the description plus schema are enough to invoke it correctly. It could be more complete by stating the update semantics explicitly (e.g., 'This is an upsert'), but the current wording already conveys that reasonably 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 100%, and both list_id and name already have clear descriptions. The description only restates the role of list_id ('by list ID') and does not add format, constraints, or relationship details beyond the schema, so it earns the baseline score.
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 action (create or update), the resource (a list), and the key identifier (list ID), which clearly separates it from CRUD siblings like get_list, delete_list, and restore_list. The action is unambiguous and not a tautology of the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies an upsert usage—use it to create a list or update an existing one by providing its list_id—but it does not explicitly state when to prefer this over sibling tools or what conditions trigger update vs. create. No alternatives or exclusions are mentioned, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_notificationAInspect
Create a V2 notification template. name is required. Content may be provided inline or set separately afterwards. A newly created template is a draft and cannot be sent until it is published; publishing is a separate operation (or pass state: 'PUBLISHED' on create). Link a routing strategy via notification.routing.strategy_id to control which channels are used. Example: { notification: { name: 'welcome-email', tags: [], brand: null, subscription: null, routing: { strategy_id: 'rs_01abc' }, content: { version: '2022-01-01', elements: [] } } }.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Template state after creation (defaults to DRAFT) | |
| notification | Yes | Notification template payload |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate non-readonly, non-idempotent, non-destructive behavior, so the description carries the behavioral burden. It discloses that templates start as drafts, cannot be sent until published, and that content can be provided inline or later. This is meaningful behavioral context beyond 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?
The description is information-dense with no filler. It front-loads the core purpose, then covers key constraints, workflow, and a realistic example. Every sentence adds necessary guidance, and the structure flows logically from purpose to parameters to example.
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 nested objects and no output schema, the description covers the critical decision points: required name, draft vs published state, inline vs later content, and routing strategy linkage. It does not detail every nested subfield, but the schema already documents those. The description is sufficient for an agent to construct a valid initial request.
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 description adds value by noting that name is required, content may be set later, and routing.strategy_id controls channel selection. The included example concretely illustrates how state, branding, routing, and content map into the request 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?
The description uses a specific verb and resource: 'Create a V2 notification template.' It clearly distinguishes this tool from siblings like create_journey_template and send_message by scoping to notification templates. The V2 qualifier and draft/publish details further pin down exactly what is created.
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 explains the draft-to-publish workflow, stating that a newly created template cannot be sent until published and that publishing is a separate operation or can be done via state: 'PUBLISHED'. It gives context for when to use this tool versus later publishing. It does not explicitly name the alternative sibling 'publish_notification', but the workflow is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_or_merge_userAIdempotentInspect
Create a new user profile or merge supplied values into an existing profile (POST). Existing fields not included are preserved.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Profile data to create or merge (e.g. { email: "...", phone_number: "..." }) | |
| user_id | Yes | The user ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating, idempotent, non-destructive operation. The description adds valuable behavioral detail beyond those flags by explaining that omitted fields are preserved, which clarifies the upsert semantics. It does not disclose response behavior or error conditions, but the annotations cover the core safety profile.
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 single sentence conveys the core action, the update behavior, and the crucial preservation guarantee. Every clause earns its place, with no filler or repetition of schema 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?
The tool has only two parameters and a clear behavior, and the description plus schema cover what an agent needs to invoke it correctly. There is no output schema, so return-value details are absent, but that gap is not critical for an upsert operation whose inputs and semantics are well specified.
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 user_id and profile with an example. The description's phrase 'supplied values' loosely maps to the profile parameter but adds little new semantic detail beyond what the schema provides. Baseline 3 is appropriate given full schema 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 clearly identifies the action (create or merge), the resource (user profile), and the critical merge behavior ('Existing fields not included are preserved'). This also distinguishes it from sibling tools like replace_profile and patch_profile without naming them, because preservation semantics are explicit.
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 provides clear context for when the tool is appropriate: when creating a new profile or updating an existing one with a partial set of values. However, it does not explicitly state when to use an alternative (e.g., patch_profile or replace_profile) or list exclusions, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_or_replace_user_push_tokenBIdempotentInspect
Create or replace a push/device token for a user.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | The token string | |
| device | No | Device metadata | |
| user_id | Yes | The user ID | |
| provider_key | Yes | Push provider |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the 'replace' behavior, which is not explicitly stated in the annotations (they only mark idempotentHint true). However, it does not add context about auth requirements, side effects beyond replacement, or rate limits, so it adds only marginal value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, compact sentence with no filler. The core action and target resource are front-loaded, making it easy for an agent to quickly scan and understand the tool's purpose.
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?
The tool is relatively simple and the schema covers all parameters, while annotations cover safety and idempotency. However, the description omits any mention of when to use this instead of the closely related 'patch_user_token' or bulk token operations, and it does not clarify expected outcome or error scenarios, leaving room for ambiguity.
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 all parameters. The description adds no additional meaning about parameters, such as how 'provider_key' or 'device' interact with the replace behavior. This meets the baseline but provides no extra value.
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 'Create or replace a push/device token for a user' states a specific action and resource, clearly identifying what the tool does. It avoids tautology and is distinct from siblings like 'delete_user_token' or 'patch_user_token', though it does not explicitly name any alternative.
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?
No guidance is provided on when to use this tool versus alternatives such as 'patch_user_token' or 'bulk_add_user_tokens'. The description only restates the core functionality, leaving the agent to infer selection criteria from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_or_update_tenantBIdempotentInspect
Create or replace a tenant. Tenants represent organizations or groups that users belong to.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for the tenant | |
| brand_id | No | Brand ID to associate with this tenant | |
| tenant_id | Yes | The tenant ID | |
| properties | No | Custom properties for the tenant | |
| user_profile | No | Default profile data for users in this tenant | |
| parent_tenant_id | No | Parent tenant ID for hierarchical tenants | |
| default_preferences | No | Default notification preferences applied to users in this tenant. Example: { "items": [{ "id": "topic_abc", "status": "OPTED_IN", "type": "subscription_topic" }] } |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a mutating, idempotent, non-destructive operation. The description adds the 'create or replace' framing but does not explain what replacement does to existing tenant data, child objects, users, or preferences. It is consistent with annotations and provides some context, but the burden of detail 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?
The description is two short sentences with no wasted words and the action is front-loaded. It is concise but thin, lacking operational detail that would make it truly excellent.
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 7 parameters, nested objects like default_preferences and user_profile, and no output schema, the description is incomplete. It does not clarify what 'replace' means in practice, whether updated fields are merged or reset, what the tool returns, or how existing tenant state is affected.
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 fully documents the parameters. The description adds no parameter-level guidance and merely provides background context about tenants, placing it at 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 names a specific action ('Create or replace') and resource ('a tenant'), then defines what a tenant is. It clearly identifies the tool among siblings like get_tenant and delete_tenant, though it does not explicitly contrast with 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?
No usage guidance is provided. The description does not say when to use this tool versus alternatives such as add_user_to_tenant, update_tenant_preference, or delete_tenant, leaving the appropriate context entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_preference_sectionAInspect
Create a preference section in your workspace. The section id is generated and returned. Add topics afterwards with create_preference_topic.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable name for the section | |
| routing_options | No | Default channels for the section. Defaults to empty if omitted. | |
| has_custom_routing | No | Whether the section defines custom routing for its topics |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a concrete behavioral detail beyond the annotations: the section id is generated and returned. It also scopes the operation to 'your workspace.' The annotations already signal the mutation profile, so the description adds useful output-behavior context without needing to repeat safety hints.
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 no filler. The action and resource come first, followed by the key output behavior and a pointer to the relevant sibling tool. Every sentence earns its 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 straightforward create tool with three well-documented parameters, the description covers the essential action, the returned id, and the next step in the workflow. It does not describe the full response shape or compare against replace_preference_section, but the id mention partially compensates for the missing 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 100%, so the parameters name, routing_options, and has_custom_routing are already fully documented in the schema. The description adds no parameter-level meaning of its own, which lands it at 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?
The description names a specific action and resource: creating a preference section. It also differentiates itself from the sibling create_preference_topic by explicitly pointing topic creation to that tool, and the note that the section id is generated and returned further clarifies the tool's purpose.
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 gives clear workflow context by instructing the agent to add topics afterwards with create_preference_topic, which implies this tool is only for creating the section itself. It does not enumerate alternatives like replace_preference_section, but the creation-focused verb and the follow-up pointer provide sufficient orientation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_preference_topicAInspect
Create a subscription preference topic inside a section. The topic id is generated and returned. Fails with 404 if the section does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable name for the preference topic | |
| section_id | Yes | Id of the preference section to create the topic in | |
| topic_data | No | Arbitrary metadata associated with the topic | |
| default_status | Yes | Default subscription status applied when a recipient has not set their own | |
| routing_options | No | Default channels delivered for this topic. Defaults to empty if omitted. | |
| allowed_preferences | No | Preference controls a recipient may customize for this topic | |
| include_unsubscribe_header | No | Whether to include a list-unsubscribe header on emails for this topic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only set readOnlyHint, idempotentHint, and destructiveHint to false, leaving the description to carry behavioral detail. The description adds that the topic id is generated and returned and that a missing section causes a 404. This is useful, though it does not cover duplicate-name behavior or the full 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?
Two sentences with no filler: the first states the action and scope, the second reports the generated id and the key failure mode. All information earns its place and the purpose 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 creation tool with seven parameters and no output schema, the description covers the essential context: creation inside a section, the generated id being returned, and the 404 error case. The remaining details are handled by the fully documented schema, so nothing critical is missing, though duplicate handling is not 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?
Schema description coverage is 100%, so the schema already explains every parameter including required fields, enums, and defaults such as routing_options defaulting to empty. The description adds no parameter-specific meaning beyond the schema, matching the baseline for 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 opens with a specific verb-and-resource statement — 'Create a subscription preference topic inside a section' — which clearly distinguishes this from section-level operations like create_preference_section. It also adds the unique outcome of a generated, returned topic id.
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 establishes the parent context by requiring an existing section and explicitly calling out the 404 failure when the section is missing, which signals a prerequisite. It does not explicitly name alternatives such as create_preference_section, but the context makes the routing decision clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_providerAInspect
Create a new provider (integration) configuration. Once routing strategies or notification templates reference this config, credential or settings mistakes can affect live sends—confirm provider key and settings against list_provider_catalog before saving. The provider field must be a known Courier provider key.
| Name | Required | Description | Default |
|---|---|---|---|
| alias | No | Short alias for referencing this provider | |
| title | No | Display name for this provider configuration | |
| provider | Yes | Provider key from the catalog (e.g. sendgrid, twilio, firebase-fcm) | |
| settings | No | Provider-specific settings (API keys, credentials, etc.) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, idempotentHint=false, destructiveHint=false. The description adds meaningful behavioral context: the created config can affect live sends once referenced, so credential/settings mistakes have real consequences. It also stresses pre-save validation, which is useful risk disclosure.
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 three sentences long, front-loaded with the core purpose, and every sentence carries information: what it does, why caution is needed, and a hard validation requirement. No filler or repetition of annotation fields.
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 mutating tool with no output schema, the description covers the essential prerequisites: valid provider key, catalog validation, settings correctness, and downstream consequences. It does not describe the response shape, but the risk warning and validation guidance are the key missing context that an agent needs before invoking.
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 already documents all four parameters. The description reinforces that provider must be a known Courier catalog key and that settings contain credentials, but it does not add material meaning beyond the schema's own descriptions.
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?
Description opens with a specific verb and resource: 'Create a new provider (integration) configuration.' This clearly distinguishes from siblings like update_provider, get_provider, and list_provider_catalog, and the word 'new' signals creation semantics.
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?
Provides clear context for when the tool is appropriate—creating a fresh provider config—and advises validating against list_provider_catalog before saving. It does not explicitly name exclusions or alternatives such as update_provider for existing configs, so it stops short of a full routing guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_routing_strategyCInspect
Create a routing strategy defining how notifications are delivered across channels and providers.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable name for the routing strategy | |
| tags | No | Tags for categorization | |
| routing | Yes | Routing tree defining channel selection method and order | |
| channels | No | Per-channel delivery configuration | |
| providers | No | Per-provider delivery configuration | |
| description | No | Description of the routing strategy |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide only negative hints (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the description carries the behavioral burden. It adds no context about duplicate-name handling, validation failures, default routing behavior, or what the created strategy implies operationally. No contradiction with annotations, but also no added disclosure.
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 single, front-loaded sentence with zero filler: the action verb comes first, followed by the purpose clause. It is appropriately sized, though the available space could have been used to add usage or behavioral 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?
For a tool with 6 parameters, a nested routing object, free-form channels/providers configuration objects, and no output schema, the description is thin. It does not say what the call returns, whether the name must be unique, or how channel/provider references relate to existing resources, leaving an agent uncertain about post-creation outcomes.
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 each parameter is already documented inline. The tool description's phrase 'across channels and providers' adds slight reinforcement to the channels and providers objects, but it does not clarify their free-form structure. The baseline of 3 applies because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create'), a specific resource ('routing strategy'), and the scope ('how notifications are delivered across channels and providers'). This is clearly distinct from get/list/archive_routing_strategy siblings and from other create_* tools (create_provider, create_notification). However, it does not explicitly differentiate from replace_routing_strategy, leaving the create-versus-replace boundary to 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?
There is no guidance on when to use this tool versus its alternatives, particularly replace_routing_strategy. It also omits practical context such as prerequisites (e.g., whether referenced channels or providers must already exist) or when a routing strategy is needed versus sending a notification directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_audienceADestructiveIdempotentInspect
Delete an audience by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| audience_id | Yes | The audience ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description merely restates the action and gives no additional behavioral context such as irreversibility, side effects on related entities, or permission requirements. The annotations already declare destructiveHint=true and idempotentHint=true, so the description adds nothing beyond them.
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 a single, focused sentence that is concise and front-loaded with the action and resource. No unnecessary words 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 simple delete operation with one parameter and no output schema, the description is complete. The annotations cover safety and idempotency, and the schema handles parameter details. An agent can safely invoke this tool based on the provided information.
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 provides full coverage (100%) for the single required parameter, including its description 'The audience ID to delete'. The tool description does not add extra meaning, so a baseline score of 3 is appropriate since the schema already documents 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 clearly states the action (delete) and the target resource (audience), and specifies the identifier (ID). It is unambiguous and distinguishes from sibling tools like delete_list or delete_brand because it names 'audience' 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?
There is no explicit mention of when to use this tool versus alternatives, but the intent is obvious from the name and description. The lack of any exclusion or alternative hint is acceptable for a straightforward delete operation, though a sentence about not using it for soft-deletion or restoring would be better.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_brandBDestructiveIdempotentInspect
Delete a brand by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| brand_id | Yes | The brand ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, and the description only restates the action without adding context such as irreversibility, cascading effects, or permission requirements. It does not contradict the annotations, but it adds no behavioral depth beyond them.
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 a single, front-loaded sentence with no filler. It conveys the action, target, and required input in the fewest possible words, and every word earns its 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 simple one-parameter delete operation, the description plus schema and annotations are largely complete. The destructive and idempotent hints cover the main operational expectations, and no output schema is specified. It could mention irreversibility or side effects, but the existing information is sufficient for correct 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?
Schema description coverage is 100% and the single parameter brand_id is already documented in the schema as 'The brand ID to delete.' The description's 'by its ID' adds no meaningful semantic value beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states an unambiguous action ('Delete') on a specific resource ('a brand'), with the identifier mechanism ('by its ID'). It clearly distinguishes this from sibling tools like update_brand, get_brand, and create_brand without needing to open 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?
The description gives no guidance on when to choose this tool over alternatives such as update_brand or the other delete_* siblings. There are no conditions, exclusions, or explicit statements about when this operation is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_listBDestructiveIdempotentInspect
Delete a list by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | Yes | The list ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds no behavioral context beyond the word 'Delete'. It does not disclose whether deletion is permanent or soft-deletable, whether restore_list can undo it, or what happens to list subscriptions. No contradiction with annotations exists.
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 a single, well-structured sentence with the action and object front-loaded. Every word earns its place, and there is no unnecessary elaboration.
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 annotations covering destructiveness, the description is adequate for basic selection and invocation. However, it omits potentially useful details about reversibility (especially given the restore_list sibling) and downstream effects such as subscriber associations, so it is not fully 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 schema already provides 100% coverage for the single list_id parameter. The phrase 'by its ID' simply reinforces the schema and adds no new semantic, format, or constraint information.
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 action ('Delete'), a precise resource ('a list'), and the identifying method ('by its ID'). It is unambiguous and clearly distinguishes this tool from siblings like get_list, create_list, and delete_user_list_subscriptions.
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 prefer this tool over related operations such as delete_user_list_subscriptions, unsubscribe_user_from_list, or delete_audience. It also does not mention prerequisites or caveats, leaving the selection logic entirely to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_profileADestructiveIdempotentInspect
Delete a user profile permanently.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The user ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description does not need to restate the destructive nature. It does add the qualifier 'permanently,' which communicates irreversibility beyond the boolean annotation. However, it does not disclose what associated data is removed or whether special permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes meaning, and the most important qualifier, 'permanently,' appears immediately after the verb.
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, the description covers the action, target, and irreversibility. The absence of an output schema is acceptable given the simplicity of the operation. It could additionally note cascading effects or permission requirements, but this is not a significant 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%, and the user_id parameter is already described in the schema as 'The user ID to delete.' The tool description adds no further semantic detail about the parameter. This matches the baseline for a fully documented 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: 'Delete a user profile permanently.' It clearly identifies the action and target. The qualifier 'permanently' also distinguishes this from sibling non-destructive profile operations like patch_profile and replace_profile.
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 provides no guidance on when to use this tool versus alternatives such as patch_profile, replace_profile, or delete_user_list_subscriptions. There are no exclusions, prerequisites, or alternative routing suggested, so an agent must infer usage solely 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_providerADestructiveIdempotentInspect
Delete a provider configuration. Returns 409 if the provider is still referenced by routing or notifications.
| Name | Required | Description | Default |
|---|---|---|---|
| provider_id | Yes | The provider configuration ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveness, non-read-only, and idempotency. The description adds a valuable behavior beyond annotations: the 409 conflict when the provider is still referenced by routing or notifications. This is meaningful operational context 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?
A single, front-loaded sentence states the core action and the key failure condition with zero waste. Every clause earns its 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 simple one-parameter delete operation with rich annotations, the description covers the main invocation need and the critical conflict case. It does not describe the success response, but the absence of an output schema makes that less critical.
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 provider_id is fully described in the schema. The tool description does not add additional meaning beyond what the schema already provides, so 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 names the exact action ('Delete') and resource ('provider configuration') with a specific verb. It is clearly distinguishable from sibling tools like update_provider, create_provider, and other delete_* tools.
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 as the destructive counterpart to create/update provider, but it does not explicitly state when to choose this over alternatives, nor does it mention any conditions for when deletion makes sense. The 409 note is behavioral context, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_tenantADestructiveIdempotentInspect
Delete a tenant by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| tenant_id | Yes | The tenant ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with the annotations (destructiveHint=true, readOnlyHint=false) but adds no behavioral context beyond what the annotations already convey. It does not disclose whether deletion is permanent, whether it cascades to related records (users, preferences, templates), or whether special authorization is required, and the idempotentHint=true is neither confirmed nor explained. No contradiction with annotations exists.
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 single six-word sentence, 'Delete a tenant by its ID,' with zero filler and the action front-loaded. It is appropriately sized for a one-parameter tool where every word earns its 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 simple one-parameter, no-output-schema tool whose annotations already carry the safety profile, the description is nearly sufficient. However, a destructive tenant operation would benefit from at least a note on permanence or cascade effects — for example, whether deleting a tenant also removes its users, preferences, and templates — to fully inform an agent's decision.
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%: tenant_id is already documented as 'The tenant ID to delete' and marked required. The description's phrase 'by its ID' reinforces the parameter but adds no format, source, or validation 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 uses a specific verb ('Delete') and a specific resource ('tenant') and identifies the targeting mechanism ('by its ID'). It distinguishes cleanly among the many sibling delete_* tools, since 'tenant' unambiguously names the entity itself rather than tenant preferences, templates, audiences, brands, or providers.
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?
No guidance is provided on when this tool should be used, what preconditions exist (e.g., removing tenant users or associated data first), or how it relates to alternatives in the sibling set. An agent receives no context to decide between delete_tenant and related operations like remove_user_from_tenant or archiving tools, nor any warning about the consequences of calling it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_tenant_preferenceADestructiveIdempotentInspect
Remove default notification preference for a topic from a tenant.
| Name | Required | Description | Default |
|---|---|---|---|
| topic_id | Yes | The subscription topic ID | |
| tenant_id | Yes | The tenant ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false. The description aligns with these and adds specificity about what is removed, but it does not disclose additional behavioral traits such as whether deletion cascades, whether it is reversible, or what happens when the preference 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?
The description is a single, front-loaded sentence with no filler. Every word earns its place, and the verb 'Remove' immediately conveys the action.
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 deletion operation with strong annotations (destructive and idempotent hints), the description is sufficient. The schema fully covers parameters, and the description clearly states what is being deleted.
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 parameters are already documented. The description maps 'topic' to topic_id and 'tenant' to tenant_id but adds no extra format, constraints, or relationships 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?
The description uses a specific verb ('Remove') and names the exact resource ('default notification preference for a topic') and scope ('from a tenant'). It clearly differentiates from related siblings like update_tenant_preference and delete_tenant.
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 gives no guidance on when to use this tool versus alternatives such as update_tenant_preference or delete_tenant. It does not state exclusions, such as when a preference should be updated instead of removed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_tenant_templateADestructiveInspect
Delete a tenant notification template. Returns 204 on success, 404 if the template does not exist for this tenant.
| Name | Required | Description | Default |
|---|---|---|---|
| tenant_id | Yes | The tenant ID that owns the template | |
| template_id | Yes | The notification template ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey destructive and non-idempotent behavior, so the description needs to add context beyond that. It does add the HTTP response semantics (204 on success, 404 if the template does not exist for this tenant), which is useful but does not discuss irreversibility or permission requirements.
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 a single sentence that front-loads the core action and then provides the most relevant response outcomes. Every clause earns its place with zero 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 simple two-parameter delete operation, the description covers the essential call semantics and expected success/failure statuses. The absent details, such as authentication requirements or broader error codes, are not critical given the low complexity and strong schema coverage.
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 parameter descriptions already fully explain tenant_id and template_id. The tool description adds no additional parameter detail beyond what the schema provides, leaving the baseline of 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 uses a specific verb ('Delete') and resource ('tenant notification template'), making the tool's function immediately clear. It also distinguishes this from sibling deletes like delete_tenant and delete_tenant_preference by naming the exact entity type.
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?
No guidance is provided about when to use this tool versus alternatives such as archive_notification or replace_tenant_template. The description states only what the tool does, not under what conditions an agent should choose it or avoid it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_user_list_subscriptionsADestructiveIdempotentInspect
Delete all list subscriptions for a user.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The user 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 description need not repeat that. It does not add extra behavioral context such as side effects, permission requirements, or return conventions. It is consistent with annotations and minimally sufficient, but adds no new information beyond the scope ('all') that the name already suggests.
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 single, direct sentence that gets straight to the action and scope. No wasted words, and the key constraint ('all') 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 destructive tool with annotations covering safety and idempotency, the description is nearly complete. It clarifies the full scope ('all' subscriptions) which is essential. However, it does not mention what happens to responses or whether it should be used cautiously, but that's beyond what's needed given the 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?
Schema coverage is 100% and the only parameter, user_id, is already described as 'The user ID'. The description does not add any additional meaning about how the user_id is used or any format expectations, so it provides no value 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?
The description uses a specific verb ('Delete'), a clear resource ('list subscriptions'), and scope ('all' and 'for a user'). It clearly distinguishes from sibling tools like unsubscribe_user_from_list (which implies a single list) and get_user_list_subscriptions (a read operation).
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?
No guidance is provided on when to use this tool versus alternatives. The description does not mention when to choose this over unsubscribe_user_from_list or bulk_subscribe_to_list, nor does it state any prerequisites or context. The name implies bulk removal, but the description alone does not explicitly instruct the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_user_preference_topicADestructiveIdempotentInspect
Delete a user's preference for a specific subscription topic, reverting it to the topic's default status.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The user ID | |
| topic_id | Yes | The subscription topic ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint and idempotentHint, so the description adds value by clarifying the exact behavioral effect: the preference is not merely removed but 'reverted to the topic's default status.' This complements the annotations without repeating them.
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 single sentence that is front-loaded with the action and includes the key behavioral consequence. Every word earns its place; there is no redundancy 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 two-parameter, no-output-schema tool with annotations covering destructive and idempotent behavior, the description is largely complete. It could explicitly state what happens when no preference exists, but the idempotentHint annotation covers that implication.
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 straightforward descriptions for user_id and topic_id. The tool description does not add meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('delete'), the resource ('a user's preference for a specific subscription topic'), and the resulting behavior ('reverting it to the topic's default status'). This distinguishes it from siblings like update_user_preference_topic, archive_preference_topic, and delete_tenant_preference.
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 conveys a clear context: use this when you want to remove a user's custom preference and restore the topic default. It does not explicitly name alternatives or exclusions, but the effect is stated plainly enough for an agent to infer when it applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_user_tokenADestructiveIdempotentInspect
Delete a specific push token for a user.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | The token identifier to delete | |
| user_id | Yes | The user ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already provide destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds the specific object of destruction ('a specific push token'), but does not disclose extra behavioral details like irreversibility, auth requirements, or cascading effects. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or redundancy. Every word contributes meaning: 'Delete', 'specific', 'push token', and 'for a user' together define the tool's purpose clearly.
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 destructive operation, the description, combined with full schema documentation and the annotations coverage, gives the agent enough to invoke the tool correctly. A brief note about absence behavior when the token does not exist would improve completeness, but it is not essential for correct 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?
Schema coverage is 100% and both parameters have clear descriptions ('The token identifier to delete' and 'The user ID'). The description adds no additional semantic nuance beyond what the schema already provides, so the baseline score 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?
The description states a specific verb ('Delete') and a specific resource ('a specific push token for a user'), which clearly distinguishes it from sibling tools like list_user_push_tokens or create_or_replace_user_push_token. It is not a tautology and immediately conveys the tool's exact operation.
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 about when to use this tool versus alternatives such as patch_user_token, create_or_replace_user_push_token, or bulk_add_user_tokens. The description only states what the tool does, leaving the agent to infer the appropriate context without explicit routing or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_jwt_for_userAInspect
Generate a JWT authentication token for a user. Used for client-side SDK auth (Inbox, Preferences, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| scopes | No | Permission scopes for the token | |
| user_id | Yes | The user ID to scope the token to | |
| expires_in | No | Token expiry duration (e.g. "1h", "2 days") | 1h |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false/neutral, so the description carries the behavioral burden. It clarifies the intended use but does not disclose details like whether the token is returned directly, how it is signed, or if generation has side effects. Still, the core behavior is clear.
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 no filler. The action is front-loaded and the use case adds practical context without 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?
Given low parameter count, full schema coverage, and annotations, the description is mostly complete for selection and invocation. The main gap is the absence of an output schema and no description of what the tool returns, but the name and action make the result reasonably inferable.
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?
All three parameters have schema descriptions, so schema coverage is 100%. The description adds no extra parameter-level meaning beyond naming the user and the client-side SDK context.
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: 'Generate a JWT authentication token for a user.' The use case ('client-side SDK auth') further disambiguates it from the many user/token-related sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear context for when to use this tool: client-side SDK auth for Inbox, Preferences, etc. It does not explicitly mention alternatives or exclusions, but no sibling tool performs JWT generation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audienceARead-onlyInspect
Get an audience by its ID, including its filter definition.
| Name | Required | Description | Default |
|---|---|---|---|
| audience_id | Yes | The audience ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so no side effects need restating. The description adds one behavioral detail: the response includes the filter definition. That is useful because no output schema exists, but the description does not go further into error cases or data 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?
A single sentence with no filler. The verb, resource, and distinguishing return detail are all front-loaded and every word earns its 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 simple single-parameter read operation, this is complete. The readOnlyHint covers safety, the ID parameter is fully documented, and the description tells the agent what the response will include. No output schema exists, but the low complexity does not demand more.
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 already documents audience_id as 'The audience ID'. The description only restates the ID-based lookup without adding format constraints or validation semantics, so it meets the baseline but adds little over 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?
States a specific verb ('Get'), a specific resource ('an audience by its ID'), and adds a meaningful detail ('including its filter definition') that distinguishes the response from a plain metadata fetch. This clearly differentiates it from list_audiences and update_audience among the 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 'by its ID' clearly indicates the tool is for fetching a single audience when the ID is known, and contrasts implicitly with list_audiences. It does not name alternatives explicitly, so it misses the top score, but the usage context is unambiguous for a simple getter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audit_eventARead-onlyInspect
Get a specific audit event by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| audit_event_id | Yes | The audit event ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description's 'Get' is consistent with a safe read operation. The description adds little beyond the annotation and does not disclose error behavior, not-found handling, or return format.
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 single, front-loaded sentence that clearly conveys the action and target with no filler. Every word earns its 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 simple single-parameter read operation with a read-only annotation, the description is largely sufficient. An agent knows the required input and that the operation is non-mutating, though no return shape is described since no output schema exists.
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 only parameter, audit_event_id, is fully documented in the schema as 'The audit event ID,' giving 100% schema coverage. The description does not add additional meaning beyond what the schema already provides.
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 specific audit event by its ID,' making the tool's purpose clear and distinguishing it from list_audit_events. However, it does not explicitly name or contrast the sibling list 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 phrase 'by its ID' implies this tool is for retrieving a single known event rather than listing events, but the description provides no explicit when-to-use guidance or mention of alternatives. Usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_brandARead-onlyInspect
Get a brand by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| brand_id | Yes | The brand ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=true, matching the non-mutating nature of 'Get'. However, the description adds no behavioral information beyond this — no mention of return shape, error cases, permissions, or data scope. With annotations present, the bar is lower, but the description still contributes no extra 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?
The description is a single clear sentence with no filler. It is appropriately sized for a simple by-ID retrieval operation.
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 get-by-ID tool with a fully documented required parameter and a readOnly annotation, the description is nearly complete. It does not explain return values or output shape, but no output schema exists and the operation name conveys the expected result adequately.
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 brand_id documented as 'The brand ID'. The description only restates the parameter usage ('by its ID') without adding format, source, or behavioral semantics. Baseline 3 applies because the schema already fully documents the parameter.
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 ('Get'), resource ('brand'), and retrieval criterion ('by its ID'). It clearly differentiates from siblings like list_brands, create_brand, update_brand, and delete_brand.
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 usage is implied through the description and tool name, but there is no explicit guidance on when to choose this tool over list_brands or other brand-related tools. It is minimally sufficient but does not state exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bulk_jobARead-onlyInspect
Get the status of a bulk job.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The bulk job ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description's 'get' phrasing aligns with that. The description adds no further behavioral context such as whether polling is safe, what status values may appear, or how long jobs typically take. This is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise, front-loaded sentence that communicates the exact purpose without wasted words. It earns every word.
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 getter with readOnlyHint=true, the description plus schema is sufficient for an agent to invoke it correctly. It does not describe possible status values or error behavior, but those are not necessary for basic 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 schema fully documents the single required parameter, job_id, including its description ('The bulk job ID'). The tool description adds no additional parameter-level detail, so the schema carries the 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?
The description states a specific verb ('Get') and resource ('the status of a bulk job'), making the tool's purpose immediately clear. It also distinguishes itself from sibling tools like create_bulk_job and run_bulk_job, which represent different lifecycle stages.
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 intended use is implied: an agent would call this when it needs the current status of a bulk job, likely after creating or running one. However, no explicit guidance is given about when to prefer this tool over related siblings or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_journeyARead-onlyInspect
Get a journey by ID. Pass version=draft to retrieve the working draft, or version=vN for a historical version. Defaults to published.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Version to retrieve: "draft", "published" (default), or a version string like "v001" | |
| journey_id | Yes | The journey template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe read, and the description adds behavior beyond it: how draft, historical, and default published versions are resolved. It does not describe invalid-version or not-found behavior, but for a read-only getter with this annotation, the added transparency is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences and no filler. The core action is front-loaded, followed by the conditional version behavior and the default, so an agent can parse the essential behavior immediately.
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 read tool, the description covers required ID and version selection, including the default. The main remaining gap is clarifying the relationship between a journey and a journey template, which is relevant because multiple sibling getters exist and the parameter is described as a template 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%, so the schema already fully documents both parameters. The description's version wording ('draft', 'vN', defaults to published) mostly restates the schema's version values, adding only 'working draft' as a minor clarification.
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 action ('Get a journey by ID') and provides concrete version semantics. However, it does not distinguish get_journey from the closely related sibling get_journey_template, and the schema's journey_id is described as a 'journey template ID', which adds ambiguity about exactly which resource is returned.
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 version instructions ('Pass version=draft... vN... Defaults to published') give useful invocation context. The description never says when to choose this tool over list_journey_versions, get_journey_template, or get_journey_template_content, so tool-selection guidance is mostly 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_journey_templateARead-onlyInspect
Get a journey-scoped notification template by notification ID. Pass version=draft to retrieve the working draft (required before the template has been published). Defaults to published.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Version to retrieve: "draft", "published" (default), or "vN" | |
| journey_id | Yes | The journey template ID that owns this notification | |
| notification_id | Yes | The notification template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds the behavioral nuance that draft retrieval is required before publication and that published is the default. This goes beyond structured fields by explaining template lifecycle 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 tight sentences front-load the operation and resource, then clarify version behavior. No filler or redundant restatement.
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 read with full schema coverage and a readOnly annotation, the description covers retrieval target, version selection, and default behavior. It does not specify response shape, but the tool name and 'Get' semantics make that unnecessary.
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 version, journey_id, and notification_id already described. The description restates notification ID and version semantics, adding only the lifecycle hint about needing draft before publication; it does not materially expand parameter 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 operation ('Get'), a resource ('journey-scoped notification template'), and the lookup key ('by notification ID'). The 'journey-scoped' qualifier distinguishes it from generic notification getters, and the name aligns with the description.
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?
Provides concrete guidance on selecting version=draft for unpublished templates and notes the published default. It does not explicitly name alternative tools, but 'journey-scoped' signals when this read is appropriate versus generic notification getters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_journey_template_contentARead-onlyInspect
Fetch the elemental content of a journey-scoped notification template. Pass version=draft for the working draft, or vN for a historical version. Defaults to published.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Version to retrieve: "draft", "published" (default), or a version string like "v001" | |
| journey_id | Yes | The journey template ID that owns this notification | |
| notification_id | Yes | The notification template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, matching the 'Fetch' verb, so there is no contradiction. The description adds useful version/default behavior beyond the annotation, but it does not describe the return structure or define 'elemental content'.
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 core verb and resource front-loaded. Version logic is presented compactly, and every sentence contributes without 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?
The description covers the key decisions an agent must make: what to fetch, the journey scope, and which version to request, including defaults. Required parameters are documented in the schema and read-only safety is in annotations. The main gap is the lack of output shape and explicit sibling differentiation, but this is adequate for a simple read 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%, so the baseline is 3. The description adds light clarification by calling 'draft' the working draft and 'vN' a historical version, but the schema already documents draft, published, version strings, and the default.
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 action ('Fetch') and resource ('elemental content of a journey-scoped notification template'). The 'journey-scoped' qualifier helps distinguish it from generic get_notification_content tools, though it does not explicitly name 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?
Provides explicit version handling instructions: pass 'draft' for the working draft, 'vN' for historical versions, and it defaults to published. This is clear context for invocation, but it does not explicitly compare against alternative get_content tools, so exclusions are implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listBRead-onlyInspect
Get a list by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | Yes | The list ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe read operation. The description adds no behavioral context beyond that, such as handling of missing or archived lists, authentication needs, or response characteristics.
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 single, front-loaded sentence communicates the operation with no filler or redundancy. Every word contributes to understanding the tool's purpose.
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 low-complexity read operation with one fully documented parameter and a readOnly annotation, the description is largely sufficient. It does not explain what a 'list' represents in this API or describe return values, but the simplicity of the tool makes this a minor 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 schema provides 100% coverage for the single list_id parameter with 'The list ID'. The description merely restates this concept ('by its ID') without adding format, type, or usage nuance 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?
The description clearly states the verb (get), the resource (a list), and the identifying mechanism (by its ID). It is unambiguous as a single-resource retrieval operation, though it does not explicitly differentiate itself from sibling tools like get_list_subscribers or list_lists.
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?
No guidance is provided about when to use this tool versus alternatives such as list_lists when enumerating lists or get_list_subscribers when retrieving subscribers. The intended context must be inferred entirely from the tool name and ID-based parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_list_subscribersBRead-onlyInspect
Get all subscribers of a list.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor | |
| list_id | Yes | The list ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already supply readOnlyHint=true and the description does not contradict it, so the read-only safety profile is covered. However, the description adds no behavioral nuance beyond the tool name; notably, it does not disclose that results are paginated despite the cursor parameter, and it does not describe what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely terse and front-loaded: one sentence with no filler. It could be improved by noting pagination, but as written it is efficiently scannable and earns its 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 simple list retrieval with readOnlyHint=true and a fully documented two-parameter schema, the core invocation is clear. The missing pagination and return-behavior details are a real gap because there is no output schema, and 'all' could reasonably be read as a single unpaginated response; a brief note about cursor paging 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?
The input schema covers 100% of parameters with clear descriptions ('The list ID', 'Pagination cursor'), so the description need not repeat them. The 'all subscribers' phrasing loosely relates to the cursor's purpose but does not add concrete parameter semantics beyond what the schema already provides.
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?
Description states a specific read operation ('Get') on a specific resource ('subscribers of a list'), making it immediately distinguishable from siblings like get_list, get_user_list_subscriptions, and subscribe_user_to_list. The 'all' qualifier adds scope. Minor ambiguity around pagination exists, but the purpose itself 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 description provides no explicit when-to-use guidance or alternatives, but 'all subscribers of a list' makes the intended use inferable: retrieve subscriber membership for one list. It does not mention exclusions or explicitly distinguish it from related tools like get_user_list_subscriptions or list_audience_members.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_messageBRead-onlyInspect
Get the full details and status of a single message by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | The message ID to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe read operation. The description adds minor context by mentioning 'full details and status' but does not disclose return shape, error behavior, or other operational traits.
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 a single, front-loaded sentence with no filler. Every word contributes to the core purpose, making it easy to scan and parse.
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-only lookup with no output schema, the description is mostly sufficient for an agent to understand the tool's role. It could be slightly richer by describing what 'status' includes or what response shape to expect, but the low complexity keeps the gap small.
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 fully describes message_id as 'The message ID to retrieve' with 100% coverage. The description merely repeats 'by its ID' without adding new meaning or format 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 uses a specific verb ('Get') and identifies the resource ('a single message') and key ('by its ID'). It loosely distinguishes from list_messages and content/history getters via 'full details and status', but does not explicitly name or disambiguate sibling tools.
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?
No guidance is given about when to use this tool versus alternatives like get_message_content, get_message_history, or list_messages. The description is purely declarative and leaves selection criteria to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_message_contentARead-onlyInspect
Get the rendered content (HTML, text, subject) of a previously sent message.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | The message ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the read-only nature is already covered. The description adds a bit of useful context by naming the exact output facets (HTML, text, subject) and the 'rendered' nature. It doesn't disclose edge-case behavior such as behavior for unsent messages or errors, but this is a simple read operation with the safety profile already captured.
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 single, front-loaded sentence with zero filler. Every word adds information: the action, the resource type, the exact data returned, and the lifecycle constraint.
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-only tool with no output schema, the description covers the essential purpose and the target object. It could have mentioned the response format or how to handle missing messages, but given the low complexity, nothing critical 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%, so the message_id parameter is already documented in the schema. The tool description adds only the lifecycle context ('previously sent message'), which slightly enriches what message_id refers to, but does not introduce format, type, or usage details 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?
The description uses a specific verb ('Get') and identifies a distinct resource: 'rendered content (HTML, text, subject) of a previously sent message.' It clearly differentiates from siblings like get_message, get_message_history, and get_notification_content by specifying the exact payload and lifecycle stage.
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 'previously sent message' provides clear context for when to invoke this tool—only for messages that have already been sent—but it does not explicitly exclude alternatives or reference sibling tools. It stops short of demonstrating full routing logic, though the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_message_historyARead-onlyInspect
Get the event history for a message, showing each step in the delivery pipeline (enqueued, sent, delivered, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by event type | |
| message_id | Yes | The message ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description is consistent with that. It adds value beyond the annotations by describing the returned information as a sequence of delivery stages, which tells the agent what kind of lifecycle data to expect.
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 entire description is one focused sentence that front-loads the core action and immediately clarifies the return content with examples. No wasted 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?
For a simple read-only lookup with fully documented parameters and a safe annotation, the description is nearly complete. It gives enough examples to understand the output even without an output schema, though it does not specify ordering or pagination.
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 message_id and type both documented in the schema. The tool description adds no additional parameter semantics beyond the schema, so the 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 uses a specific verb and resource: 'Get the event history for a message.' It also adds concrete examples of the pipeline stages (enqueued, sent, delivered), which clearly distinguishes this from sibling tools like get_message or get_message_content.
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 it clear this is the tool for delivery-pipeline event history, giving enough context for an agent to select it over get_message or get_audit_event. It does not explicitly name alternatives or exclusions, but the use case is strongly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_notificationBRead-onlyInspect
Retrieve a notification template by ID. Optionally request draft, published, or a version such as v001.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Version to retrieve: draft, published, or a string like v001 | |
| notification_id | Yes | The notification template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, so the safe read-only nature is already disclosed. The description adds version-selection detail, but this largely mirrors the schema parameter description and does not reveal additional behavioral traits such as return format or error behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core action front-loaded and the optional version behavior in the second sentence. No unnecessary words or repetition.
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 read-only getter, the description covers the essential inputs: notification ID and optional version. It doesn't describe the return payload, but with no output schema and a readOnlyHint annotation, the definition is reasonably complete; only minor ambiguity about what 'template' includes versus content endpoints remains.
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 both parameters. The description restates the version options ('draft, published, or a version such as v001') but adds little beyond what the schema already provides.
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 ('Retrieve') and resource ('notification template by ID'), making the core purpose clear. It distinguishes from list-oriented siblings by emphasizing by-ID lookup, though it does not explicitly differentiate from get_notification_content or get_notification_draft_content.
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 use by ID and optional version selection, but gives no explicit guidance on when to choose this tool over alternatives like get_notification_content, get_notification_draft_content, or list_notifications. Given the large sibling set, this is a meaningful gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_notification_contentARead-onlyInspect
Get the published content blocks of a notification template.
| Name | Required | Description | Default |
|---|---|---|---|
| notification_id | Yes | The notification template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation is consistent with the 'Get' action, so there is no contradiction. The description adds that the result is the published content blocks, but offers no details beyond that, such as return value structure, pagination, or access requirements.
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 a single compact sentence with no filler. Every word contributes meaning, and the key differentiator ('published') is placed near the start.
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-only tool with no output schema, the description is largely sufficient: it identifies what is returned and which entity it applies to. It could improve by explicitly routing to the draft-content sibling or clarifying what 'content blocks' means, but those gaps are minor.
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 has 100% coverage and already documents notification_id as the notification template ID. The tool description adds no new parameter behavior, format, or example, so it meets the baseline without exceeding it.
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 the published content blocks of a notification template. It differentiates from draft-related tools through the word 'published', though it does not explicitly name or contrast sibling tools like get_notification_draft_content.
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 by the word 'published', suggesting the tool is for published content rather than drafts. However, there is no explicit when-to-use versus alternative guidance, so the agent must infer the distinction from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_notification_draft_contentARead-onlyInspect
Get the draft (unpublished) content blocks of a notification template.
| Name | Required | Description | Default |
|---|---|---|---|
| notification_id | Yes | The notification template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, covering the main safety profile. The description adds the scoping detail that only draft/unpublished content is returned, but discloses no further behavioral context such as auth requirements or response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler. The key qualifier 'draft (unpublished)' is included and the sentence is appropriately sized for a simple one-parameter read tool.
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 tool with one required parameter and a clear resource description, this is sufficiently complete. There is no output schema, so the agent infers the return shape from 'content blocks', but all core selection and invocation 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 coverage is 100%: notification_id is already described as 'The notification template ID' in the schema. The description reinforces that this is a notification template but adds no new meaning beyond the structured 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?
Description uses a specific verb and resource: 'Get the draft (unpublished) content blocks of a notification template.' The 'draft (unpublished)' qualifier distinguishes it from the sibling get_notification_content, which presumably returns published content.
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 frames the intended use case: retrieving unpublished draft content blocks rather than published notification content. It does not explicitly name alternatives or state when not to use this tool, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_preference_sectionARead-onlyInspect
Retrieve a preference section by id, including its topics.
| Name | Required | Description | Default |
|---|---|---|---|
| section_id | Yes | Id of the preference section |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation already declares readOnlyHint=true, so the read-only nature is covered. The description adds useful behavior beyond the annotation by specifying that topics are included in the result, but it does not disclose return shape, possible errors, or other behavioral details.
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 a single, front-loaded sentence with no filler. Every phrase adds value: the action, the target, the lookup key, and the included topics.
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-only get-by-id tool, the description is sufficient for an agent to select and invoke it correctly. It specifies the required input, identifies the resource, and even clarifies what the response includes ('including its topics'). No essential information 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 input schema has 100% description coverage and section_id is already described as 'Id of the preference section'. The description does not add meaningful parameter semantics beyond restating the by-id concept, 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?
The description states a specific verb ('Retrieve'), a specific resource ('preference section'), and the key qualifier 'by id'. It also notes that topics are included, which distinguishes this from get_preference_topic and list_preference_sections.
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 'by id' qualifier makes the intended use clear: fetch one specific preference section when its id is known. It does not explicitly name alternatives like list_preference_sections, but the context clearly implies a targeted get-by-id operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_preference_topicARead-onlyInspect
Retrieve a topic within a section. Returns 404 if the section or topic does not exist, or the topic belongs to a different section.
| Name | Required | Description | Default |
|---|---|---|---|
| topic_id | Yes | Id of the subscription preference topic | |
| section_id | Yes | Id of the preference section |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, so the description's main contribution is the 404 behavior: it specifies that a missing section or topic, or a topic owned by a different section, results in a 404. This goes beyond the annotation and helps the agent anticipate failure states. It does not describe the success response format, but given the read-only nature and no output schema, the 404 details are valuable and add transparency.
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, effectively front-loaded with the core action ('Retrieve a topic within a section') followed by the key error condition. There is no redundant wording or filler, and every sentence contributes useful 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 simple retrieval tool with two required parameters and readOnly annotation, the description covers the access scope and failure modes. However, it does not state what a successful call returns (e.g., the topic object), which is notable since there is no output schema. An agent might infer it returns the topic, but explicit mention of the success payload would make it more complete. The 404 details are helpful, but the absence of success-response description is a minor 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%, with both parameters having clear ID descriptions. The description adds the contextual relationship that the topic must belong to the given section, which is a semantic hint beyond the schema's simple ID labels. However, it does not elaborate on parameter formats, types, or constraints beyond what the schema states, so it only marginally supplements 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 states a specific verb ('Retrieve') and resource ('a topic within a section'), clearly distinguishing it from sibling tools like get_preference_section (retrieves a whole section) and list_preference_topics (lists topics). The phrase 'within a section' clarifies the hierarchical relationship, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context that the tool requires both a section and a topic, and implies it is used when you have both IDs. However, it does not explicitly name any alternative tool or state when not to use it. The 404 condition about a topic belonging to a different section adds usage nuance, but no direct comparison to siblings like get_preference_section or list_preference_topics. This is clear context without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_providerARead-onlyInspect
Fetch a single provider configuration by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| provider_id | Yes | The provider configuration ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, and the description's 'Fetch' is consistent with that. The description adds little beyond the annotation, though it does clarify the operation is a single-item lookup rather than a list operation. No behavioral contradiction exists.
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 single clear sentence that front-loads the action and the key distinguishing constraint ('by ID'). There is no redundant or filler 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 simple one-parameter, read-only getter with no output schema, the description provides enough information for an agent to invoke it correctly: it knows the resource, the single required parameter, and that this is a read operation. It does not describe return format or not-found behavior, but those are not necessary to make the call successfully.
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 provider_id already documented as 'The provider configuration ID'. The description's 'by ID' reinforces this dependency but adds no new semantic detail, so the 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 uses a specific verb ('Fetch') and resource ('provider configuration') and clarifies scope as 'a single ... by ID', which distinguishes it from list_providers and other getters. It leaves no ambiguity about what this tool does.
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 'by ID' implies the tool should be used when the agent already knows a provider_id, and the sibling list_providers is the natural alternative for discovery. However, the description does not explicitly state when not to use it or name the alternative, leaving the usage guidance implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_routing_strategyARead-onlyInspect
Retrieve a routing strategy by ID. Returns the full entity including routing, channels, and providers.
| Name | Required | Description | Default |
|---|---|---|---|
| routing_strategy_id | Yes | The routing strategy ID (rs_ prefix) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered. The description adds value by disclosing the return payload composition (routing, channels, providers) beyond what annotations provide, which helps predict behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the verb and resource, then adds one useful clause about return contents. No filler, no repetition of schema details, and highly scannable for an 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 simple 1-parameter read operation with a readOnly annotation, the description covers the operation, the identifier to supply, and the expected return contents. Nothing an agent needs to invoke it correctly is missing, especially given the absence of an output schema is mitigated by the stated return 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?
Schema coverage is 100%, with the parameter documented as 'The routing strategy ID (rs_ prefix)'. The description's 'by ID' adds no substantive meaning beyond the schema, so the baseline score 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 the specific verb 'Retrieve', the resource 'routing strategy', and the retrieval key 'by ID', which distinguishes it from list and archive siblings. It also specifies the return composition ('routing, channels, and providers'), making the tool's scope 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?
The phrase 'by ID' implies the use case: when an agent has a known routing strategy ID and wants the full entity. However, it provides no explicit exclusions or alternatives, such as recommending list_routing_strategies to discover IDs first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tenantARead-onlyInspect
Get a tenant by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| tenant_id | Yes | The tenant ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only safety profile is established. The description adds the ID-scoped nature of the lookup but does not mention not-found behavior or response shape, which is acceptable for a simple read but adds only minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence directly communicates the action and the identifying key. There is no filler, and the most important 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 simple read-only lookup with one required parameter, schema coverage, and a clear readonly annotation, the description is nearly complete. The only gap is the absence of an explicit return-value or error-behavior statement, but 'Get' makes the intended result reasonably 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?
The input schema covers 100% of the parameter, including its type and description, so the schema already provides the meaning. The description only reinforces 'by its ID' and adds no new parameter details.
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 tenant') plus the retrieval criterion ('by its ID'). This clearly distinguishes it from list_tenants and from create/update/delete tenant 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?
'By its ID' signals when this tool should be used: when the caller has a specific tenant_id and needs a single tenant. It does not explicitly name alternatives like list_tenants for enumeration, so the guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tenant_templateBRead-onlyInspect
Get a tenant notification template association by template ID.
| Name | Required | Description | Default |
|---|---|---|---|
| tenant_id | Yes | The tenant ID | |
| template_id | Yes | The template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations provide readOnlyHint: true, and the description's 'Get' is consistent with that. However, the description adds no behavioral context beyond the annotation—nothing about return shape, not-found behavior, auth requirements, or what 'association' means operationally.
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 single, front-loaded sentence with no filler. Every word contributes to identifying the action and resource.
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 read operation with documented parameters and readOnlyHint, the description is mostly adequate, but it leaves ambiguity around closely related siblings and does not describe what the returned association contains. Since there is no output schema, a little more context would make it fully 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%, with both tenant_id and template_id described in the schema. The description only adds 'by template ID,' which partially restates the schema and omits the tenant_id dimension, so it adds no meaningful semantic value 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?
The description clearly states the verb 'Get' and identifies the resource as 'a tenant notification template association' looked up 'by template ID.' This is specific enough to separate it from list-style tools, though it does not explicitly differentiate it from closely related siblings like get_tenant_template_version.
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?
No guidance is given about when to use this tool versus alternatives such as list_tenant_templates or get_tenant_template_version. There are no exclusions, conditions, or alternative routing mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tenant_template_versionARead-onlyInspect
Get a specific version of a tenant notification template (e.g. latest, published, or v1).
| Name | Required | Description | Default |
|---|---|---|---|
| version | Yes | Version identifier (latest, published, or v-prefixed) | |
| tenant_id | Yes | The tenant ID | |
| template_id | Yes | The template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe read operation, and the description aligns with that by saying "Get." The description adds useful version-scoping context but does not disclose additional behavioral details such as response contents, error behavior, or prerequisites.
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 a single concise sentence that leads with the action and resource, then gives clarifying examples. There is no redundant or filler 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 simple read operation with three fully documented required parameters, the description is nearly complete. It could be improved by explicitly distinguishing this from get_tenant_template or mentioning how to discover available versions, but nothing essential to invoking the tool 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%, so the parameters tenant_id, template_id, and version are already documented in the schema. The description only repeats the version value examples that the schema already provides, adding no significant meaning beyond it.
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 clearly states a specific verb and resource: "Get a specific version of a tenant notification template." It conveys the uniqueness of this tool compared to simpler template retrieval, but it does not explicitly name or contrast sibling tools such as get_tenant_template or list_tenant_templates.
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 this tool is for retrieving a particular template version, with examples like "latest, published, or v1." However, it does not explicitly state when to choose this over sibling tools or when another tool such as get_tenant_template would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_translationBRead-onlyInspect
Get a translation for a specific locale (e.g. "en_US", "fr_FR").
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | Translation domain (only "default" is supported currently) | default |
| locale | Yes | Locale code (e.g. en_US, fr_FR) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description matches the readOnlyHint annotation by using 'Get', so there is no contradiction. However, it adds no behavioral detail beyond the annotation: it does not describe return shape, error behavior, or whether multiple translations exist per locale. The annotation lowers the burden, but the description still offers minimal extra transparency.
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?
One concise sentence with no filler. The action, target, and parameter example are all front-loaded and immediately understandable. Nothing extraneous 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 simple two-parameter read-only tool with a fully documented schema, the description is nearly sufficient. The only minor gap is that it does not explain what a 'translation' is in this context or what the caller should expect in the response, but the operation is simple enough that this is not a major deficiency.
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% coverage for both parameters, so the baseline is 3. The description repeats the locale format from the schema but does not add additional meaning about the domain parameter or the relationship between domain and locale beyond what the schema already documents.
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 clearly states the verb ('Get'), the resource ('translation'), and the qualifying parameter ('locale') with concrete examples. It is unambiguous enough to identify this as a read operation for a translation, though it does not explicitly differentiate itself from sibling tools like update_translation or put_notification_locale.
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 provides no guidance on when to use this tool versus alternatives. It does not mention that update_translation exists for modifying translations, nor does it clarify when get_translation is the appropriate choice among the many get_/list_ sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_list_subscriptionsBRead-onlyInspect
Get all list subscriptions for a user.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor | |
| user_id | Yes | The user ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description need not state that it is read-only. However, it adds no additional behavioral context such as pagination behavior or details about the return payload. While it does not contradict annotations, it also fails to disclose anything beyond what the name and annotation imply, offering minimal added transparency.
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 a single, succinct sentence that front-loads the core action and scope. It contains no wasted words and is easy to parse quickly. The structure is optimal for a simple read operation.
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 GET with two parameters and no output schema, the description is mostly adequate. However, it does not explicitly mention that results are paginated (implied by the cursor) or clarify what a 'list subscription' entails. Some additional context about pagination would improve completeness, but the description is not severely lacking.
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 both parameters (user_id and cursor), so the schema already documents their purpose. The description adds no extra meaning about these parameters, such as how the cursor controls pagination or any format constraints. With the schema carrying the full parameter documentation, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and the resource ('all list subscriptions for a user'). This distinguishes it from sibling tools that manage or delete subscriptions, such as subscribe_user_to_list or delete_user_list_subscriptions. The phrasing 'for a user' disambiguates from get_list_subscribers, which is about subscribers of a 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 provides no guidance on when to use this tool versus alternatives. There is no mention of when to choose this over get_list_subscribers or any other read tool. It only restates the action, leaving the agent to infer the appropriate context without supporting clues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_preferencesBRead-onlyInspect
Get a user's notification preferences (subscriptions, opt-outs, channel preferences).
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The user ID | |
| tenant_id | No | Scope preferences to a specific tenant |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, so the read-only safety profile is covered. The description adds useful scoping context (subscriptions, opt-outs, channel preferences), but it does not disclose behavior when tenant_id is omitted, whether defaults apply, or what the returned structure contains. This is not a contradiction, but the added behavioral context is minimal.
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 a single sentence with the operation front-loaded and a parenthetical that adds precision without padding. Every word earns its 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 simple read-only getter with well-covered parameters and readOnlyHint annotation, the description is mostly enough. The main gap is that with no output schema, it does not clarify what happens when tenant_id is omitted or describe the exact return shape, but the high-level categories mitigate 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 description coverage is 100% — both user_id and tenant_id have descriptions. The tool description does not add parameter-level meaning beyond the parenthetical preference categories, so the baseline score 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 states a specific verb ('Get') and resource ('a user's notification preferences') and enumerates what is included: subscriptions, opt-outs, and channel preferences. It is clear, but it does not explicitly differentiate itself from sibling tools like get_user_preference_topic or get_user_list_subscriptions.
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 tool versus alternatives such as get_user_preference_topic for a single preference topic or get_user_list_subscriptions for list-specific subscriptions. No exclusions or conditions are provided, so an agent must infer usage from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_preference_topicBRead-onlyInspect
Get a user's preference for a specific subscription topic.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The user ID | |
| topic_id | Yes | The subscription topic ID | |
| tenant_id | No | Scope to a specific tenant |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds no additional behavioral context, such as what happens when the preference/topic does not exist or how tenant scoping affects the result, but it does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler: it starts with the action and names the exact resource and scoping. Every word contributes to understanding.
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 read-only getter with fully documented parameters and a readOnlyHint, the core invocation details are sufficient. The main gaps are the lack of usage guidance and no mention of return behavior, but these are not critical for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with user_id and topic_id both described and tenant_id noted as 'Scope to a specific tenant.' The description adds no parameter-level meaning beyond this, which is acceptable given the schema already carries the 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?
The description clearly states the operation ('Get') and the resource ('a user's preference for a specific subscription topic'), which differentiates it from broader tools like get_user_preferences and topic-level get_preference_topic. It does not explicitly name those alternatives, so it stops short of fully distinguishing itself among 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?
No guidance is provided on when to use this tool versus get_user_preferences, get_preference_topic, or update_user_preference_topic. The agent is left to infer selection criteria solely from the tool name and input schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_profile_by_idBRead-onlyInspect
Get a user profile by their ID. Returns profile data including email, phone, and custom properties.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The user ID to look up |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safe read-only nature is covered. The description adds some useful context by listing the fields returned (email, phone, custom properties), but it doesn't disclose error behavior, auth needs, or whether a missing user returns null or an error. It adds value but not rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that states the action, the target resource, the key identifier, and the expected output fields. There is no redundancy or filler, and the most important 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 simple one-parameter read-only lookup with no output schema, the description is largely sufficient: it names the input and the output content. It is slightly incomplete because it does not address error/not-found behavior or how this differs from related profile/preference retrieval tools, but these 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?
The schema already documents the only parameter, user_id, with 'The user ID to look up,' covering 100% of parameters. The description's 'by their ID' adds no meaningful semantics 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?
The description uses a clear verb-resource pair: 'Get a user profile by their ID,' and adds what the result contains (email, phone, custom properties). However, it does not explicitly distinguish itself from the many other get_* siblings, relying mostly on the tool name for 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?
No when-to-use guidance is provided. The description does not mention when to prefer this tool over alternatives like get_user_preferences, get_user_push_token, or list_tenant_users, nor does it state any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_push_tokenARead-onlyInspect
Get a specific push/device token for a user.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | The token identifier | |
| user_id | Yes | The user ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares the operation safe, and 'Get' is consistent with that. The description adds no behavioral details beyond that, such as what happens if the token is not found, whether the token value is returned, or any auth requirements, so it provides only modest value over the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence front-loads the core purpose with no filler. It is appropriately sized for a simple getter, though it does not enrich the definition with any usage or behavior context.
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 read-only getter with fully documented schema properties and readOnlyHint, the description is largely sufficient: it names the resource, scope, and required granularity. It could be more complete by clarifying the return shape or how this differs from listing tokens, but those gaps are minor given the low 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 description coverage is 100%, so the schema already documents both user_id and token. The description does not add any meaning, format, or relationship between token and user beyond what the schema provides, 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 clear verb ('Get') and resource ('specific push/device token') scoped to a user. The qualifier 'specific' hints at the singular nature and helps distinguish it from list_user_push_tokens, though no sibling is 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 word 'specific' implies this tool is for retrieving one token rather than enumerating all tokens, and the sibling list_user_push_tokens provides an implicit contrast. There is no explicit when-to-use guidance or mention of alternatives, so the guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
invoke_ad_hoc_automationBInspect
Invoke an ad-hoc automation with inline steps. Valid step actions: send, send-list, delay, cancel, update-profile, invoke, fetch-data. To cancel a previously started automation, use the cancel_automation tool instead.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | ||
| brand | No | ||
| profile | No | ||
| template | No | ||
| recipient | No | ||
| automation | Yes | The automation definition with typed steps |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already say this is not read-only and not idempotent, but the description adds no behavioral context about what invoking does (e.g., executes steps immediately, sends messages, updates profiles) or what happens to previously started automations. The cancel guidance contradicts the presence of a cancel step, further muddying 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?
The description is compact and front-loaded with the core purpose, and the action list is a useful summary. The cancel sentence is short but creates ambiguity, which slightly reduces the value of the concise structure.
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 a nested automation definition, seven step variants, no output schema, and sparse parameter descriptions, the description is too thin. It omits return/execution behavior, token semantics, and parameter meaning, so an agent would struggle to construct a correct invocation despite the detailed 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 only 17%, so the description carries the burden for explaining parameters, but it only names the step actions. Top-level parameters like data, brand, profile, template, and recipient are left undocumented in the description; the nested schema has to do all 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 ('Invoke') and resource ('ad-hoc automation') plus 'with inline steps', which distinguishes it from sibling invoke_automation_template. It also enumerates the valid step actions, making the tool's scope immediately recognizable.
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 explicitly routes cancellation to cancel_automation, which is good alternative guidance. However, it also lists 'cancel' as a valid inline step action and the schema's cancel step accepts a cancelation_token, creating conflicting guidance about when to use this tool versus the sibling. No guidance is given for choosing between ad-hoc inline automations and invoke_automation_template.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
invoke_automation_templateAInspect
Invoke an automation run from an existing automation template. template_id refers to an existing automation template in the workspace. Example: { template_id: "auto-onboarding", recipient: "user-123", data: { plan: "pro" } }.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Data to pass to the automation | |
| brand | No | Brand ID override | |
| profile | No | Profile data for the recipient | |
| template | No | Notification template override | |
| recipient | Yes | Recipient user ID | |
| template_id | Yes | The automation template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false and provide no safety profile, so the description carries the full burden of behavioral disclosure. It states that an automation run is invoked but does not explain side effects, whether the run is asynchronous, what gets sent or created, or what the response contains. The example demonstrates payload shape but not behavioral consequences.
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 compact: a one-sentence purpose, a clarifying constraint on template_id, and one illustrative example. Every sentence earns its place and the key action 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?
There is no output schema and no mention of return values, failure modes, idempotency, or whether the invocation is asynchronous. For a non-read-only, non-idempotent operation, the description omits important context an agent needs to safely interpret the result of the call.
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. The description adds value beyond the schema by explaining that template_id must point to an existing template and by giving a concrete example that shows how data, recipient, and template_id fit together. This is genuinely useful for a tool with nested object parameters.
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: 'Invoke an automation run from an existing automation template.' It clarifies that template_id must refer to an existing workspace template, which also helps distinguish it from invoke_ad_hoc_automation. The example reinforces the purpose without ambiguity.
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 establishes clear context: use this when you have an existing automation template and want to run it. It does not explicitly name alternatives or exclusions, such as 'use invoke_ad_hoc_automation for ad-hoc runs', but the 'existing template' qualifier makes the intended use case reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
invoke_journeyBInspect
Invoke a journey run from a journey template. template_id refers to an existing journey template in the workspace. Example: { template_id: "j-onboarding", user_id: "user-123", data: { plan: "pro" } }.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Data payload passed to the journey for conditions and template variables | |
| profile | No | Profile data for the user (email, phone, custom fields) | |
| user_id | No | Recipient user ID. Can also be resolved from profile or data. | |
| template_id | Yes | The journey template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and idempotentHint=false, implying a state-changing operation that may have side effects. The description does not disclose these behavioral traits at all—it only says 'invoke a journey run' without explaining what happens (e.g., sends messages, triggers automations) or whether it is asynchronous. With no further context, the agent is left guessing about side effects and reliability.
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 concise: one sentence plus an example. The core purpose is front-loaded, and the example is directly relevant to parameter usage. There is no extraneous information, making it easy for an agent to parse quickly.
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?
Given that this is a mutation tool with no output schema, the description should explain what happens after invocation (return value, async behavior, possible errors). It only gives an example, leaving out crucial execution details. The presence of nested objects (data and profile) and the ambiguity of user_id resolution suggest the description is incomplete for an agent to invoke this correctly in all cases.
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%, as all four parameters (data, profile, user_id, template_id) have descriptions. The description adds a clarifying example and notes that template_id refers to an existing template, which is a small enhancement. However, it does not explain how user_id relates to profile or data beyond what the schema already says, so it meets but does not exceed the baseline for 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 clearly states the action ('Invoke a journey run from a journey template') with a specific verb and resource. It also immediately clarifies that template_id refers to an existing template in the workspace, and provides a concrete example. This distinguishes it from siblings like invoke_automation_template by explicitly mentioning 'journey run' and 'journey template'.
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 does not provide any guidance on when to use this tool versus alternatives. It does not mention prerequisites, like whether the template must be published, nor does it contrast with invoke_automation_template or invoke_ad_hoc_automation. An agent would have to infer usage from the example, which is insufficient for routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_audience_membersBRead-onlyInspect
List all members of an audience.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor | |
| audience_id | Yes | The audience ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation covers the safety profile, so no safety concern needs restating. However, the description does not disclose that 'all members' may be paginated via the cursor parameter, nor does it explain ordering, membership scope, or what fields each member entry includes.
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 single sentence with no filler, front-loading the core operation clearly. It is appropriately economical and immediately understandable.
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 read-only list tool, the description plus schema is near-sufficient. However, pagination behavior, the shape of returned member entries, and differentiation from sibling list tools are all left implicit. Without an output schema, an agent still has to infer what a member entry 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 100% and both parameters have clear descriptions, so the baseline of 3 applies. The tool description adds no semantic detail beyond what the schema already provides.
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?
Clearly states a specific verb ('List') and resource ('members of an audience'). The singular 'an audience' plus the required audience_id distinguishes it from sibling list_audiences, though it does not explicitly name or contrast sibling tools.
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?
No guidance is given about when to use this tool versus alternatives such as get_list_subscribers, list_tenant_users, or list_audiences. The intended use is implied by the name and description, but no explicit context or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_audiencesARead-onlyInspect
List all audiences in the workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals the tool is a safe read operation, and the description aligns with that. The description adds the workspace scope, but it does not disclose pagination behavior or what the response format will be, despite having no output schema to cover that information.
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 a single, front-loaded sentence that states the action, resource, and scope with no filler. Every word earns its 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 simple read-only list tool with one documented pagination parameter, the description is nearly complete. The only minor gap is that it does not explicitly describe the return shape, but 'list all audiences' sufficiently implies the response contains audience records.
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 cursor parameter is already described as a 'Pagination cursor' in the input schema. The description adds no additional parameter-level meaning, so the baseline score 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 uses the specific verb 'List' with a clear resource ('audiences') and defines scope ('in the workspace'), making the operation unambiguous. It also naturally distinguishes itself from siblings like get_audience (single resource) and list_audience_members (members of an audience).
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 gives no guidance on when to choose this tool over alternatives such as get_audience or list_audience_members. It does not state exclusions, prerequisites, or conditions that would make this the appropriate tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_audit_eventsARead-onlyInspect
List audit events in the workspace. Useful for tracking API usage and changes.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description's 'List' is consistent with a read operation. It adds the workspace scope but does not disclose pagination behavior or return format; with annotations covering the safety profile, a mid score is appropriate.
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 no filler. The core operation is front-loaded and the purpose statement adds value without bloat.
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 read-only list tool with one optional parameter and no nested objects, the description is largely sufficient. Omitted details about pagination behavior and response shape are minor given the simplicity and the schema documentation.
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 covers the single cursor parameter 100%, so the description does not need to compensate. The description adds no parameter-level meaning beyond the schema, keeping this at 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 description states a clear verb-resource pair: 'List audit events', and scopes it to the workspace. It is unambiguous and distinct from the sibling get_audit_event, which handles a single event.
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 'Useful for tracking API usage and changes' gives implied context for when to call the tool, but there is no explicit guidance about when to choose this over a sibling such as get_audit_event, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_automationsARead-onlyInspect
List automation templates in the workspace, returning each template_id and its version state. Optionally filter by version.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor | |
| version | No | Filter by version state |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this as a safe read operation. The description adds useful context: it scopes results to the workspace, indicates the returned fields, and notes the optional version filter. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, tightly written sentence communicates the resource, scope, return values, and optional filtering with no filler. The most important 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 simple read-only list tool with two optional parameters and no output schema, the description provides enough information: resource, scope, returned fields, and filtering capability. Pagination and cursor behavior are already described in the schema, so nothing essential 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%, so the schema documents both parameters adequately. The description adds little beyond restating the version filter, and the cursor parameter is only explained in the schema. This meets the baseline for fully documented parameters.
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 clearly states the verb 'List' and the resource 'automation templates in the workspace,' and it specifies the primary return fields (template_id and version state). However, it does not explicitly distinguish this tool from similar sibling list tools like list_journey_templates or list_tenant_templates.
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 tool versus alternatives, and no explicit exclusions are provided. The mention of optional version filtering is parameter usage guidance, not tool-selection context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_brandsARead-onlyInspect
List all brands in the workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already communicates the non-mutating nature. The description adds the workspace scope and enumeration scope, but it does not disclose pagination behavior, ordering, or response format beyond the cursor parameter in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is six words with no filler: verb, object, scope. Every word carries meaning and the core purpose 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 simple read-only list tool with one optional cursor, the description and schema together provide a clear contract. Minor missing context includes explicit mention of the return shape or pagination behavior, but these are not critical for an agent to know what this tool does.
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 sole parameter 'cursor' is fully documented in the schema as 'Pagination cursor', so the description does not need to add much. Since schema coverage is 100%, the baseline agreement 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 states a specific verb ('List'), a clear resource ('brands'), and a scope ('in the workspace'), which makes the tool's purpose immediately understandable. The word 'all' also differentiates it from single-brand retrieval and from sibling list tools targeting other resources.
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 indicates this should be used when all brands in the workspace are needed. It does not explicitly name alternatives like get_brand for single-brand lookups, but the plural scope and 'all' wording provide a clear usage context with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_bulk_usersBRead-onlyInspect
List the users in a bulk job.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor | |
| job_id | Yes | The bulk job ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation, and the description's 'List' verb is consistent with that. The description adds the scoping to a bulk job but does not disclose pagination, result contents, or ordering. With annotations covering the safety profile, this is adequate but not enriching.
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 single sentence with no filler, front-loading the action and target. It is appropriately sized for the tool's simplicity, and every word contributes to understanding the operation.
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 read-only list operation with a required job_id and an optional cursor described in the schema, the description is nearly sufficient. It does not mention the response shape (no output schema is present) or link to related bulk-job tools, but the core calling 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%, so both parameters are already well-documented in the schema. The description only reinforces that job_id refers to a bulk job and adds no new syntax or meaning beyond what is in the input schema. 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?
The description uses a specific verb ('List') and a clear resource ('users in a bulk job'), and it is distinguishable from sibling tools like get_bulk_job and add_bulk_users. However, it does not clarify what a bulk job is or which users are included, keeping it just below a perfect score.
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?
No guidance is provided about when to use this tool versus alternatives such as get_bulk_job, list_tenant_users, or list_audience_members. The agent must infer usage from the tool name and job_id parameter, with no explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_digest_instancesARead-onlyInspect
List the digest instances for a schedule. Each instance represents the events accumulated for a single user against the schedule, useful for monitoring accumulation before a digest is released.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max instances to return (default 20, max 100) | |
| cursor | No | Pagination cursor from a previous response | |
| schedule_id | Yes | The digest schedule id, in the form "sch/{uuid}" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation, so the description only needs to add context beyond that. It adds useful semantics about what an instance represents, but does not disclose pagination behavior or return format details. No contradiction with annotations exists.
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 with no filler: the action is front-loaded, and the second sentence adds valuable context about instance semantics and purpose. Every word earns its 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 simple read-only list tool with full schema coverage and one required parameter, the description is nearly complete. It omits return-value details, though no output schema exists, and it could be more explicit about pagination usage, but these are minor gaps.
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 input schema already documents limit, cursor, and schedule_id. The description adds minimal semantic value beyond confirming instances are tied to a schedule, which is the baseline expected when schema covers all parameters.
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 ('List') and resource ('digest instances for a schedule'), and explains what an instance represents. This clearly distinguishes it from related tools like release_digest and other list_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'useful for monitoring accumulation before a digest is released' gives clear usage context and implies the monitoring use case. It does not explicitly name alternatives or exclusionary conditions, but the intended scenario is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_journeysARead-onlyInspect
List journey templates in the workspace, returning the journey IDs and version state of each. Optionally filter by version (published or draft).
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor | |
| version | No | Filter by version state. Defaults to published. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description doesn't need to cover that. It adds context about what is returned (IDs and version state) and the optional version filter. However, it doesn't disclose pagination behavior (cursor usage), ordering, or any limits, though the cursor parameter is in the schema. The description adds some value but not rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, concise sentence with no redundancy. It front-loads the main purpose and then mentions the optional filter. Every word earns its place; no 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 list tool with two optional parameters and no output schema, the description covers the purpose, what it returns, and the filter option. It lacks explicit pagination details (but the cursor is in the schema) and doesn't differentiate from siblings, but for a read-only list tool, this is fairly complete. The only minor gap is not mentioning any default behavior or limits, but that's acceptable.
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% (both cursor and version have descriptions). The description mentions the version filter but doesn't add syntax or format details beyond what the schema provides. Since the schema already documents parameters well, a baseline of 3 is appropriate. The description adds little 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?
Description states a specific verb ('List'), resource ('journey templates'), and scope ('in the workspace'), plus what it returns (IDs and version state). It differentiates from siblings like list_journey_versions and get_journey, though the name 'list_journeys' might overlap with list_journey_templates; however, the description explicitly says 'journey templates', so it's 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?
No explicit when-to-use or alternatives guidance. It doesn't mention that there are sibling tools like list_journey_templates or list_journey_versions, nor does it explain when this tool is preferred over them. The description only implies its function but doesn't help an agent choose among similar list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_journey_templatesARead-onlyInspect
List notification templates scoped to a journey. Journey-scoped templates can only be used by send nodes within the same journey. Call this to discover template IDs before wiring send nodes in replace_journey.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (1–100) | |
| cursor | No | Pagination cursor | |
| journey_id | Yes | The journey template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds useful context about journey-scoped templates being usable only by send nodes in the same journey. It does not detail pagination behavior or output shape, but with the read-only annotation the safety profile is clear.
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 key action and scope are front-loaded, and every sentence provides useful information for invoking the tool correctly.
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 read-only list tool, the description supplies purpose, scope, and a concrete workflow (discover template IDs before replace_journey). Pagination details are present in the schema, and the return value is implied by the description.
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 covers all parameters with descriptions (100% coverage), so the baseline is 3. The description reinforces that journey_id scopes results to a journey, but it does not add detail on limit or cursor 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?
Uses a specific verb ('List'), names the resource ('notification templates'), and specifies the scope ('scoped to a journey'). The journey-scoping caveat and mention of replace_journey clearly distinguish this from generic template/list tools.
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, actionable use case: 'Call this to discover template IDs before wiring send nodes in replace_journey.' It implies the right context to use the tool, though it does not name alternatives or explicitly state 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.
list_journey_template_versionsARead-onlyInspect
List published versions of a journey-scoped notification template, ordered most recent first.
| Name | Required | Description | Default |
|---|---|---|---|
| journey_id | Yes | The journey template ID that owns this notification | |
| notification_id | Yes | The notification template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation already declares readOnlyHint=true, so the safety profile is covered. The description adds useful behavioral context beyond the annotation: it only returns published versions and orders them most recent first. This helps the agent understand what data to expect without contradicting the read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no redundant words. It front-loads the key action and scope, and the ordering behavior is included efficiently. Every word earns its 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 simple read-only list tool with no output schema, the description is adequate. It specifies that only published versions are returned and the ordering, which covers the main expectations. It does not mention pagination or the exact response structure, but these are not critical for a tool of this simplicity, and the readOnlyHint covers side-effect concerns.
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 fully describes both parameters (journey_id and notification_id) with clear descriptions, so schema coverage is 100%. The description does not add any additional meaning to the parameters, but the baseline of 3 is appropriate because the schema handles the heavy lifting.
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 clearly states the verb 'list', the resource 'published versions of a journey-scoped notification template', and adds the ordering constraint 'most recent first'. This distinguishes it from generic list tools like list_notification_versions (which are not journey-scoped) and list_journey_versions (which likely list journey versions rather than notification template versions). 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?
No guidance is provided on when to use this tool versus alternatives such as list_notification_versions or list_journey_versions. The description implies a specific scope but does not explicitly state when this tool is preferred or when to avoid it. Given the large sibling list with overlapping names, an agent could easily pick the wrong tool without clearer differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_journey_versionsARead-onlyInspect
List published versions of a journey, ordered most recent first.
| Name | Required | Description | Default |
|---|---|---|---|
| journey_id | Yes | The journey template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark the operation as read-only, and the description adds useful behavioral context: only published versions are included and they are ordered newest first. It does not mention pagination or output shape, but for a simple read-only version list that is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence contains the operation, resource, filter, and ordering with zero filler. The most important scoping information is at the front.
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-only listing tool, the description covers what is listed and the order. It is slightly incomplete because it does not describe the returned version objects or mention pagination, and the journey-versus-template terminology is not reconciled.
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 is already documented as 'The journey template ID', so the description does not need to add much. It adds little beyond the schema and slightly mixes terminology by calling the resource a journey rather than a journey template.
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 operation (list), a resource (published versions of a journey), and an ordering (most recent first), so a caller knows what to expect. It does not explicitly differentiate this from the closely named sibling list_journey_template_versions, so it misses the top score.
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?
No guidance is given about when to use this tool versus siblings such as list_journey_template_versions or get_journey. The word 'published' implies a scope restriction, but no alternative or exclusion is stated explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_listsARead-onlyInspect
Get all lists. Optionally filter by pattern (e.g. 'example.list.*').
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor | |
| pattern | No | Filter pattern (e.g. 'example.list.*') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already discloses the safety profile, and the description adds the scoping behavior that it returns 'all lists' and supports pattern filtering. It does not disclose cursor/pagination behavior or note any response shape, but since annotations cover the read-only nature, this is adequate but not especially rich.
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 with the main action front-loaded and the optional filtering condition stated cleanly in one clause. Every word earns its place; there is no filler, repetition of the title, or unnecessary 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 read-only collection tool with two optional parameters and no required fields, the description plus schema gives an agent enough to make the call correctly. The only minor gap is that pagination/cursor behavior is not explained beyond the schema's one-phrase description, which is acceptable for a tool of this 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?
Schema description coverage is 100%, and the input schema already documents both parameters, including the 'example.list.*' pattern example. The description restates the pattern example but adds little substantive meaning beyond the schema, so the baseline score 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 uses a specific verb plus resource ('Get all lists') and immediately clarifies the optional filter scope, so an agent can tell this is a collection-listing operation rather than get_list or a mutation like create_list/delete_list. The 'all' qualifier reinforces that this is the plural sibling to get_list and distinguishes it from other list_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the primary use case: retrieving lists, optionally filtered by a pattern. However, it never explicitly says when to use this over get_list, list_audiences, or list_tenants, and it offers no when-not or alternative routing. The agent must infer usage from naming conventions and sibling context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_messagesBRead-onlyInspect
List messages you've previously sent. Filter by status, recipient, notification, provider, tags, or tenant.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Filter by metadata tags | |
| list | No | Filter by list ID | |
| tags | No | Comma-delimited list of tags | |
| event | No | Filter by event ID | |
| cursor | No | Pagination cursor for fetching the next page | |
| status | No | Filter by status (e.g. DELIVERED, UNDELIVERABLE) | |
| traceId | No | Filter by trace ID | |
| archived | No | Include archived messages | |
| provider | No | Filter by provider key (e.g. sendgrid, twilio) | |
| messageId | No | Filter by message ID | |
| recipient | No | Filter by recipient user ID | |
| tenant_id | No | Filter by tenant ID | |
| notification | No | Filter by notification ID | |
| enqueued_after | No | ISO 8601 timestamp; only return messages enqueued after this time |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the read-only safety profile. The description adds the 'previously sent' scope and lists filter dimensions, but it does not disclose pagination behavior, default filtering, or what happens when no filters are provided. That is acceptable given the annotation, but not additive beyond 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?
The description is a single front-loaded sentence with no wasted words. It states the operation first and then the relevant filter categories in a compact list.
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 14 optional parameters and no output schema, the one-sentence description plus schema is workable but not complete. Parameter semantics are covered, but the agent gets no information about the return shape, default behavior, or pagination beyond the cursor parameter description. It is viable for invocation but leaves meaningful gaps.
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 parameters are already documented. The description only loosely enumerates some filter dimensions and does not add meaning beyond the schema; it also omits some filters like list, event, messageId, traceId, archived, and enqueued_after. 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 uses a specific verb and resource: 'List messages you've previously sent.' This clearly establishes the operation and scope. It does not explicitly call out sibling distinctions, but the plural 'messages' and 'previously sent' help separate it from get_message, get_message_history, and send_message.
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 tool versus alternatives like get_message, get_message_history, list_notifications, or send_message. The description states what it does but gives no exclusions, prerequisites, or selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notification_checksBRead-onlyInspect
List checks for a notification submission.
| Name | Required | Description | Default |
|---|---|---|---|
| submission_id | Yes | The submission ID for the checks resource | |
| notification_id | Yes | The notification template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already communicates that this is a safe read operation, and the description adds the scoping detail that it lists checks for a specific notification submission. It does not disclose return shape, pagination, or ordering, but for a simple read-only list operation the annotation plus scoping provides reasonable transparency.
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 a single front-loaded sentence with no filler or redundancy. It is concise and appropriately sized for a simple tool, though the ambiguity around 'checks' prevents it from being maximally helpful on its own.
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 not explain what a 'check' contains or what the return payload looks like, leaving some uncertainty. The operation is simple and the read-only annotation lowers risk, but the lack of any elaboration on the checks resource means the description is only minimally 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 both parameters are documented with meaningful descriptions: submission_id is 'the submission ID for the checks resource' and notification_id is 'the notification template ID'. The description adds no additional parameter-level detail, so the schema carries the burden and 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?
The description uses a specific verb ('List') and a specific resource ('checks for a notification submission'), which differentiates it from sibling tools like list_notifications. However, the term 'checks' is domain jargon and is not defined, so the purpose is clear but not fully self-explanatory.
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 tool versus alternatives such as list_notifications, list_notification_versions, or update_notification_checks. The intended context is implied only by the resource name and parameter schema, not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notificationsBRead-onlyInspect
List notification templates. Optionally filter by cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the safety profile, and the description is consistent with it. The description adds a small behavioral detail about cursor-based pagination, but it does not clarify what 'filter by cursor' means behaviorally or what the response contains. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core purpose. The second sentence is somewhat redundant with the schema but earns some credit by indicating optionality and pagination. No unnecessary words are present.
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 read-only list operation with one optional parameter and no output schema, the description is minimally sufficient. However, it lacks pagination semantics, response expectations, and any differentiation from closely related notification list tools, leaving the agent with an incomplete picture.
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 cursor parameter already described as 'Pagination cursor.' The description's 'Optionally filter by cursor' adds no meaningful semantic detail beyond the schema, so the baseline score 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?
The description uses a specific verb and resource: 'List notification templates.' This distinguishes it from creation and mutation tools in the sibling list. However, the tool name says 'notifications' while the description says 'templates,' and it does not explicitly distinguish itself from similar siblings like list_notification_versions or list_notification_checks.
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?
No explicit guidance is given about when to use this tool versus alternatives. With over 100 siblings, including other list_* tools, the description leaves the agent to infer usage context. The only usage hint is the generic 'Optionally filter by cursor,' which is not enough to route selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notification_versionsARead-onlyInspect
List version history for a notification template.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max versions per page (default 10, max 10) | |
| cursor | No | Pagination cursor from a previous response | |
| notification_id | Yes | The notification template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, so the read-only nature is covered by structured data. The description adds 'version history' context but does not disclose additional behaviors such as pagination semantics, ordering, or whether versions include metadata. It does not contradict the annotations, and the list operation is consistent with readOnlyHint, but no extra behavioral detail is provided beyond the schema 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?
The description is a single, direct sentence with no filler or redundant phrasing. It is appropriately sized for a straightforward list operation and front-loads the core purpose. Every word contributes to clarity.
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 read-only list tool with full schema parameter documentation and a readOnlyHint annotation, the description is nearly complete. The lack of an output schema means the description could theoretically explain return shape, but 'version history' is sufficiently informative for an agent. Minor gaps like ordering or version metadata are not critical given the 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?
Schema description coverage is 100%, so the schema fully documents notification_id, limit, and cursor. The description adds no parameter-level meaning beyond what the schema already provides, which matches the baseline of 3. The tool is simple enough that this is acceptable.
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 version history for a notification template.' This clearly identifies both the action and the object, distinguishing it from sibling tools like list_notifications or list_journey_versions. The resource type is explicit enough for an agent to select this tool without ambiguity.
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 use case (retrieving version history of a notification template) but does not explicitly state when to prefer this over alternatives or when not to use it. There is no mention of related tools such as get_notification or get_notification_draft_content, leaving the agent to infer the boundary from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_preference_sectionsARead-onlyInspect
List the workspace's preference sections. Each section embeds its topics.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds useful behavioral context about the return shape: sections embed their topics. It does not go into pagination or ordering, but for a simple read-only list operation the added context is sufficient.
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 concise sentences with no filler. It front-loads the action and resource, then adds the one valuable structural 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 zero-parameter, read-only list tool with no output schema, the description fully informs the agent about what is returned and how sections relate to topics. Nothing essential 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 has zero parameters, so parameter semantics are trivially covered by the schema. Baseline 4 applies; the description adds no parameter detail, but none is 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?
The description uses a specific verb ('List') with a clear resource ('the workspace's preference sections') and adds a defining structural detail ('Each section embeds its topics'). This differentiates it well from siblings like list_preference_topics.
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 embedding note gives the agent context for when this tool is appropriate—when sections with their topics are needed—and implies a distinction from list_preference_topics. However, it does not explicitly name alternatives or state exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_preference_topicsARead-onlyInspect
List the topics in a preference section.
| Name | Required | Description | Default |
|---|---|---|---|
| section_id | Yes | Id of the preference section |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with the readOnlyHint annotation and accurately conveys a non-mutating read operation. However, it discloses no additional behavioral context—no mention of pagination, ordering, emptiness behavior, or response shape—but the safety profile is already covered by the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no redundant words or filler. Every element communicates something meaningful about the tool's purpose.
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 list operation with one required parameter and a read-only annotation, the description provides sufficient context. It could additionally mention return format or edge-case behavior, but the absence is minor given 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?
Schema description coverage is 100%, with section_id already documented as 'Id of the preference section'. The tool description adds no further parameter context, so the schema carries the explanatory burden and meets the baseline expectation.
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 ('List') and identifies the exact resource ('topics in a preference section'), clearly distinguishing it from singular get_preference_topic and from list_preference_sections. There is no ambiguity about what operation is being performed.
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 provides no guidance on when to choose it over alternatives such as get_preference_topic or list_preference_sections. No exclusions, prerequisites, or selection criteria are mentioned, leaving the agent to infer usage from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_provider_catalogBRead-onlyInspect
List available provider types from the catalog with their configuration schemas.
| Name | Required | Description | Default |
|---|---|---|---|
| keys | No | Comma-separated provider keys to filter by | |
| name | No | Substring match on provider name | |
| channel | No | Filter by channel type (email, sms, push, etc.) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation is present, so the read-only nature is already known. The description adds the useful detail that the output includes configuration schemas, which goes slightly beyond the annotation. However, it does not disclose any other behavioral aspects such as pagination, ordering, or default behavior, leaving the burden partially unmet.
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 a single, concise sentence that clearly states the primary function without any fluff or irrelevant details. It is front-loaded with the core action and resource, making it easy for an agent to parse quickly.
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 listing tool with only optional filters and no output schema, the description captures the essential functionality. It mentions the catalog and schemas, which is the core output. It does not specify response format or pagination, but given the simplicity and the presence of parameter descriptions in the schema, this is a minor gap rather than a critical one.
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%, meaning all three parameters (keys, name, channel) already have descriptions in the input schema. The tool description adds no extra meaning or clarification about these parameters, so it does not go beyond the baseline expected 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 states a specific verb ('list') and a clear resource ('available provider types from the catalog'), and additionally notes that the result includes configuration schemas. It is not explicitly differentiated from the sibling 'list_providers', but the catalog concept and schema mention give enough distinction for an agent to understand the tool's role.
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?
No guidance is given on when to use this tool versus alternatives like 'list_providers' or 'get_provider'. The description does not mention any context, prerequisites, or exclusions, so an agent has no way to decide between this and similar listing tools without inferring from the name itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_providersBRead-onlyInspect
List configured provider integrations for the workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description need not restate safety. It adds some scope context ('configured ... for the workspace') but does not disclose pagination behavior, return shape, or ordering. This is adequate given the read-only annotation.
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 single, tightly written sentence with no filler. The resource and scope are front-loaded, and every word contributes 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 simple read-only list operation with one optional cursor parameter and no output schema, the description is largely sufficient. It clarifies the workspace scope and configured nature of providers, though it does not describe the response shape or page size.
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 covers the sole parameter ('cursor') with a clear 'Pagination cursor' description, so coverage is 100%. The tool description adds no parameter-specific meaning beyond this, which matches the baseline for high schema 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 uses a specific verb and resource ('List configured provider integrations') and scopes it to the workspace. It is distinguishable from get_provider and list_provider_catalog by emphasizing 'configured' and 'for the workspace,' though it does not explicitly name those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as list_provider_catalog or get_provider. It states what the tool does but offers no context about selection criteria or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_routing_strategiesARead-onlyInspect
List routing strategies in the workspace. Returns metadata only; use get for full details.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results per page (default 20, max 100) | |
| cursor | No | Pagination cursor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds 'Returns metadata only', which clarifies response granularity, but it doesn't disclose pagination behavior, ordering, or errors. This is useful but not rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, front-loaded with the primary action. Every sentence earns its 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 simple read-only list with two optional, well-documented parameters, the description plus annotations provide everything needed to invoke it correctly. It also properly routes to get_routing_strategy for full details.
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 clear descriptions for limit and cursor. The description adds no additional parameter semantics, and per baseline a 3 is appropriate when the schema already does the heavy lifting.
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 ('List'), a specific resource ('routing strategies'), and a scope ('in the workspace'). The phrase 'Returns metadata only; use get for full details' differentiates it from get_routing_strategy.
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 tells the agent this tool is for listing metadata and directs it to the get tool when full details are needed. This is a clear when-to-use versus alternative guidance, even though it doesn't enumerate every sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_routing_strategy_notificationsARead-onlyInspect
List notification templates associated with a routing strategy. Useful for checking linked templates before archiving.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results per page (default 20, max 100) | |
| cursor | No | Pagination cursor | |
| routing_strategy_id | Yes | The routing strategy ID (rs_ prefix) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description consistently describes a read-only listing operation. It adds context about linked templates being checked before archiving, but does not disclose pagination behavior or any additional edge-case details. The bar is lower due to annotations, so 3 is appropriate.
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 no filler. The core operation is stated first, and the second sentence adds a practical use case without 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 simple read-only list operation with well-documented parameters, the description is mostly complete. It does not describe return fields, but no output schema exists and the operation's purpose is straightforward, so the absence is a minor gap rather than a blocking one.
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, cursor, and routing_strategy_id. The description adds little beyond the schema, merely confirming that templates are associated with a routing strategy. Baseline 3 is appropriate because the schema carries the parameter 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?
The description uses a specific verb and resource: 'List notification templates associated with a routing strategy.' It clearly names the relation to routing strategies, distinguishing this from sibling tools like list_notifications or list_routing_strategies.
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 provides a concrete use context: 'Useful for checking linked templates before archiving.' It does not explicitly name alternatives or exclusions, but the intended scenario is clear enough for an agent to know when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tenantsARead-onlyInspect
List all tenants in the workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results per page | |
| cursor | No | Pagination cursor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, so the agent knows this is a safe read operation. The description adds the workspace-wide scope, which is useful, but it does not disclose pagination behavior (i.e., that results may be paginated despite saying 'all tenants'). This is a minor gap, so a 3 is appropriate.
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 single sentence that is concise, front-loaded, and contains no filler. It immediately states the action, resource, and scope.
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 read-only list tool with fully documented optional pagination parameters and no output schema, the description covers the essential use case. It could mention pagination explicitly, but that is partially implied by the limit/cursor parameters and does not create a significant 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%; both limit and cursor are described in the input schema. The description adds no additional meaning or guidance about pagination parameters, so it does not exceed 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 description uses a specific verb ('List'), a clear resource ('tenants'), and a scope qualifier ('all... in the workspace'). This distinguishes it from sibling tools like get_tenant, list_tenant_users, and list_user_tenants without needing to open 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?
The scope 'in the workspace' provides clear context for when to use this tool: when you need a broad, workspace-wide tenant listing. It does not explicitly name alternatives like get_tenant or list_user_tenants, nor state when not to use them, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tenant_templatesARead-onlyInspect
List notification templates configured for a tenant.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results per page (default 20, max 100) | |
| cursor | No | Pagination cursor | |
| tenant_id | Yes | The tenant ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include readOnlyHint: true, and the description consistently describes a read-only list operation. It adds the tenant-scoped context, but does not disclose further behavioral details like pagination behavior or result ordering beyond what the schema already covers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the verb and resource, and adds the important tenant-scoping qualifier. There is no wasted or 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 list operation with fully documented parameters and a readOnly annotation, the description is nearly sufficient. An explicit statement about the return shape (an array of templates) would improve completeness, but it is reasonably implied by 'List'.
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 tenant_id, limit, and cursor all already documented. The description adds no additional parameter-level meaning, so the baseline score 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 clearly states a specific verb ('List') and a distinct resource ('notification templates configured for a tenant'). It distinguishes this from sibling tools like get_tenant_template or delete_tenant_template by describing the list scope.
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 gives clear context: this lists templates for a tenant. However, it does not explicitly state when to use it versus related tools such as get_tenant_template or list_journey_templates, nor does it mention any 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_tenant_usersARead-onlyInspect
List users associated with a tenant.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results per page (default 20, max 100) | |
| cursor | No | Pagination cursor | |
| tenant_id | Yes | The tenant ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, covering the main safety trait. The description adds no further behavioral context, such as paginated response behavior or ordering, but it also does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action and scope with no filler. Every word earns its 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 simple read-only list tool, the description, schema, and readOnlyHint are mostly sufficient for a first call with tenant_id. However, the lack of an output schema and the absence of any mention of cursor/limit behavior leaves some ambiguity for paginating and interpreting 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 the schema already documents tenant_id, limit, and cursor. The description adds no extra semantic detail beyond the schema, matching 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 states the specific verb 'List', the resource 'users', and the scope 'associated with a tenant'. This clearly distinguishes it from the reciprocal sibling list_user_tenants and from list_tenant_templates, so an agent can select it accurately.
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 action is self-describing, so an agent can infer to use it when it needs users for a given tenant_id. However, it provides no explicit guidance about when to prefer it over related list_* tools and does not mention pagination or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_user_push_tokensBRead-onlyInspect
List all push/device tokens for a user.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The user ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the tool is known to be safe. The description adds that it returns all tokens for a user, but does not disclose pagination, ordering, or potential empty-result behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It communicates the essential purpose efficiently.
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-only list operation, the description plus annotations cover most needs. It could specify the response shape or pagination behavior, but these are minor gaps given 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?
Schema description coverage is 100%, and the user_id parameter is already documented as 'The user ID'. The description adds little beyond the schema, which meets the baseline but does not go further.
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 clearly states the action ('List') and resource ('push/device tokens') scoped to a user, making the tool's purpose obvious. It does not explicitly differentiate from siblings like get_user_push_token, though 'all' implies the plural listing nature.
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 provides no guidance on when to use this tool versus alternatives such as get_user_push_token or bulk_add_user_tokens. No conditions, exclusions, or contextual hints are given beyond the basic action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_user_tenantsARead-onlyInspect
List all tenants a user belongs to.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results per page | |
| cursor | No | Pagination cursor | |
| user_id | Yes | The user ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation covers the safety profile, and the description adds membership semantics. However, it does not disclose pagination behavior despite limit and cursor parameters, nor does it describe the full result set expectations.
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 single, clear sentence with no redundant wording. The core operation and scope are front-loaded, making the description easy to parse.
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 low-complexity read-only listing tool with fully documented parameters, the description is largely sufficient. The only notable gap is whether 'all' is literal or effectively paginated across all results, given the presence of limit and 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 description coverage is 100%, so the schema already documents all three parameters. The description adds no additional semantics beyond the user association implied by the tool name and purpose.
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 ('List'), resource ('tenants'), and scope ('a user belongs to'), making the purpose immediately clear. It also distinguishes this tool from siblings like list_tenants and list_tenant_users by emphasizing the user-centric relationship.
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: call it to find tenants for a given user. However, it does not explicitly contrast with alternatives such as list_tenants or list_tenant_users, nor does it provide any when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
patch_profileAInspect
Partially update a user profile via JSON Patch (RFC 6902). Use add/replace/remove operations on specific profile paths.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | Yes | Array of JSON Patch operations to apply to the profile | |
| user_id | Yes | The user ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish that this is a non-read-only, non-idempotent write operation. The description adds meaningful behavioral context by clarifying that the update is partial and that remove operations are permitted, signaling possible field deletion beyond what the raw annotation flags 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?
The entire description is one focused sentence: it front-loads the action, names the protocol, and states the allowed operations. There is no filler or redundant 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?
Given only two documented parameters and no output schema, the description covers what the agent needs to invoke the tool correctly. A minor gap is that it does not mention whether the updated profile is returned, but this is not essential for a mutation tool with well-documented inputs.
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 both parameters are already documented. The description adds modest value by narrowing the operation set to add/replace/remove, which differs slightly from the schema's broader enum (add, remove, replace, move, copy, test), but it does not otherwise enrich parameter 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?
The description clearly states the verb ('partially update'), the resource ('user profile'), and the method ('JSON Patch (RFC 6902)'). It differentiates itself from the sibling 'replace_profile' by specifying partial, path-scoped updates rather than wholesale replacement.
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 usage context is implied: use this when a partial, path-specific profile update is needed. The description also instructs which patch operations to use (add/replace/remove), but it does not explicitly name alternatives or provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
patch_user_tokenBInspect
Apply a JSON Patch (RFC 6902) to a specific push token.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | Yes | Array of JSON Patch operations | |
| token | Yes | The token identifier | |
| user_id | Yes | The user ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as non-read-only, non-idempotent, and non-destructive; the description does not contradict that. It adds the RFC 6902 semantics of applying a sequence of patch operations, but it does not disclose failure behavior, whether a missing token is created, or how the patch is applied.
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 a single front-loaded sentence with no redundant words or filler. It puts the operation first and the target second, making it 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 three-parameter patching tool with full schema coverage and annotations covering mutation behavior, the description covers the operation and target adequately. There is no output schema, so return-value documentation is not required; a one-line statement of the patch semantics is enough for correct 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?
All three parameters are already fully described in the schema (user_id, token, and patch operations), so the description carries little parameter burden. It confirms that the patch targets a token identified by the user/token pair but adds no syntax or format details 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?
The description states a concrete action ('Apply a JSON Patch') and a precise resource ('a specific push token'), also naming the RFC 6902 standard. This distinguishes it from sibling token tools such as create_or_replace_user_push_token, delete_user_token, and list_user_push_tokens, though 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?
There is no guidance about when to use this tool instead of create_or_replace_user_push_token or delete_user_token, and no prerequisites are mentioned. The word 'specific' only weakly implies an existing token; an agent could still misselect between full replacement and partial patch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_journeyAInspect
Publish the current draft of a journey, making it live and invokable. Pass version to roll back to a prior published version instead of publishing the draft. Returns 404 if there is no draft to publish.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Historical version to roll back to (e.g. "v001"). Omit to publish the current draft. | |
| journey_id | Yes | The journey template ID to publish |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavior beyond the annotations: it discloses that the operation transitions a draft to live/invokable, that passing version switches to rollback, and that a 404 is returned when there is no draft. It does not detail success responses or invalid-version behavior, but annotations already mark this as a non-read-only, non-idempotent 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?
Three short sentences cover the operation, the version alternative, and a key error condition. The main action is front-loaded and there is 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 two-parameter mutation tool with no output schema, the description covers the core action, conditional version behavior, and one important error. It could mention the success response or invalid-version behavior, but the essentials for invoking correctly are 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 coverage is 100% and both parameters are described there, including the 'omit to publish current draft' behavior. The description repeats that semantic rather than adding new parameter detail, so it does not exceed the baseline for fully documented 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?
Description names a specific verb ('publish') and resource ('current draft of a journey'), and clarifies the desired effect ('making it live and invokable'). It also separates the rollback behavior from draft publishing, which distinguishes this tool from publish_journey_template and other publish/create 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?
It clearly states the primary use case (publish current draft) and the alternative mode within the tool (pass version to roll back to a prior published version). It does not explicitly name an alternative tool or exclusion, but the entity name 'journey' and the behavior are clear enough in context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_journey_templateAInspect
Publish the current draft of a journey-scoped notification template. Optionally pass version to roll back to a prior version.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Version to roll back to (e.g. "v1"). Omit to publish current draft. | |
| journey_id | Yes | The journey template ID that owns this notification | |
| notification_id | Yes | The notification template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only saying readOnly=false, idempotent=false, destructive=false, the description adds the key behavior: publishing the current draft and optionally rolling back to a prior version. This meaningfully explains state mutation without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence front-loads the primary action and punctuates the optional variant. No filler or repetition of parameter names.
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 publish action with no output schema, the description supplies the essential scope and the optional rollback behavior. A bit more detail about the effect on existing published versions could make it fully complete, but it is sufficient for correct 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?
Schema coverage is 100%, so the schema already documents all three parameters. The description adds value only for version, clarifying it is used to roll back to a prior version, while notification_id and journey_id remain 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 names a specific verb and resource: 'Publish the current draft of a journey-scoped notification template.' This makes the operation distinct from siblings like publish_journey or publish_notification by adding the journey-template scope.
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 states the default use case (publish current draft) and the optional version-rollback branch. It does not explicitly name sibling alternatives or exclusions, but the journey-scoped wording gives enough context for an agent to route to this tool among the publish_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_notificationAInspect
Publish a notification template, making it available for sending. Must be called before send_message_template unless the template was created with state: 'PUBLISHED'. Publishes the current draft by default; pass version (e.g. 'v001') to publish a specific historical version. Returns 204 on success.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Historical version to publish (e.g. v001); omit to publish current draft | |
| notification_id | Yes | The notification template ID to publish |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating, non-idempotent operation. The description adds useful context beyond that: it publishes the current draft by default, can publish a specific historical version, and returns 204 on success. This gives the agent a clear picture of the operation's behavior without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler. The core action is front-loaded, followed by the prerequisite, version behavior, and return code. Every sentence contributes operational value.
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 tool with no output schema, this description covers the key facts an agent needs: the prerequisite, default vs. historical version behavior, and the success response (204). Nothing essential is missing for correct 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?
Schema description coverage is 100%, so the schema already documents both notification_id and version effectively. The description reinforces the version semantics ('e.g. v001', omit to publish current draft) but does not add meaning beyond what the schema already provides. 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?
Description states a specific verb ('Publish'), a specific resource ('notification template'), and the intended outcome ('making it available for sending'). It also names a related sibling tool (send_message_template) and explains the lifecycle relationship, which distinguishes it from other publish_* tools like publish_journey_template or publish_tenant_template.
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 states the prerequisite: must be called before send_message_template unless the template was created with state 'PUBLISHED'. It also clarifies when to omit vs. provide the version parameter, giving concrete operational guidance rather than leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_preferencesAInspect
Publish the workspace's preferences page. Takes a snapshot of every section with its topics under a new published version, making the current state visible on the hosted preferences page.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is non-read-only, non-idempotent, and non-destructive. The description adds meaningful behavior beyond those flags: it takes a snapshot of all sections/topics, creates a new published version, and changes what is visible on the hosted page. It does not cover permission requirements or what happens to prior published versions.
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 deliver the full picture: what is published, how the snapshot works, and the resulting effect. Every clause earns its place, and the resource and verb are 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 publishing action, the description gives the key outcome and mechanism an agent needs to call it correctly. Minor gaps remain, such as return behavior and whether previous published versions remain accessible, but these are not blockers.
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 are zero parameters and the input schema is empty, so there are no parameter semantics to document. The description still compensates by explaining what the operation applies to and what it produces, satisfying the baseline for a parameterless tool.
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 the specific operation ('Publish') and the specific resource ('workspace's preferences page'), then explains the mechanism: snapshot every section with its topics under a new published version. This clearly differentiates it from sibling publish_* tools that target journeys, notifications, or tenant templates.
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 it clear that this is how the current preference sections and topics become visible on the hosted page, so the general use case is implied. However, it does not explicitly state when to use it versus alternatives, mention prerequisites such as having draft changes ready, or note any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_tenant_templateCInspect
Publish a version of a tenant notification template.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | Version to publish (e.g. v1, latest); defaults to latest if omitted | |
| tenant_id | Yes | The tenant ID | |
| template_id | Yes | The template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, indicating this is a mutating but non-destructive operation. The description adds no behavioral context beyond that—it doesn't explain what publishing entails, whether it's reversible, or what happens to previous versions.
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 a single tight sentence with no filler; the verb and object are front-loaded. However, it is so minimal that it reads as a bare statement rather than a structured guide. It is concise but under-sized relative to the need for usage context.
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 only three params, no output schema, and full schema coverage, the description covers the basic purpose. But it omits context about the publishing workflow—when a version must be specified, how this differs from publishing notifications/journeys, and what side effects occur—making it incomplete for an agent facing many sibling publish tools.
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?
All three parameters have descriptions in the schema (100% coverage), so the baseline applies. The tool description itself provides no additional parameter-level meaning; it only echoes the 'version' concept, which is already in the schema. No enums or nested structures require extra explanation.
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 the specific verb 'publish' and names the resource 'a version of a tenant notification template,' clearly identifying the action. It distinguishes itself from sibling publish_* tools by the resource type, though it doesn't explicitly name alternatives.
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 provides no guidance on when to use this tool over alternatives like publish_journey_template or publish_notification. There are no usage conditions, prerequisites, or exclusions; the agent must infer context from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
put_journey_template_contentADestructiveIdempotentInspect
Replace the elemental content of a journey-scoped notification template. Overwrites all elements. The template stays a draft; making it live is a separate step this tool cannot perform.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Template state after update. Must be "DRAFT". These tools cannot publish. | |
| version | No | Content version string (e.g. "2022-01-01"). Server defaults when omitted. | |
| elements | Yes | Array of elemental content nodes | |
| journey_id | Yes | The journey template ID that owns this notification | |
| notification_id | Yes | The notification template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond the annotations by explicitly stating that it 'Overwrites all elements' and that the template remains a draft, reinforcing the destructive and idempotent put semantics. It also clearly states the limitation that publishing is a separate step, which is valuable behavioral information not present in the structured 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 sentences with no wasted words. The primary action and scope are front-loaded, followed immediately by the key limitation about draft state. Every sentence contributes essential 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, idempotent mutation tool with full schema coverage and no output schema, the description adequately covers the key behavioral context: what is replaced, that it is all elements, and that publishing is out of scope. It does not explain return values, but that is a minor gap given the clarity of the rest.
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 already has 100% description coverage, including the DRAFT-only state constraint and the semantics of elements, notification_id, and journey_id. The description adds limited parameter-level meaning, mostly reinforcing that 'elements' are fully overwritten, so it meets the baseline without going beyond it.
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 clearly states the verb ('Replace') and the resource ('elemental content of a journey-scoped notification template'), and further clarifies that it 'Overwrites all elements.' This distinguishes it from sibling tools by emphasizing scope ('journey-scoped') and full-content replacement, though it does not explicitly name a competing sibling.
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 provides clear context: this tool edits draft templates and cannot publish them, with the 'stays a draft' limitation explicitly stated. It does not, however, give explicit guidance about when to use this tool versus alternatives like put_notification_content or put_notification_element, so the usage boundaries are not fully exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
put_journey_template_localeAIdempotentInspect
Set locale-specific content overrides for a journey-scoped notification template. Each element override must reference an existing element by its id.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Template state after update | |
| elements | Yes | Array of element overrides with id and locale-specific content | |
| locale_id | Yes | Locale identifier (e.g. es, fr, pt-BR) | |
| journey_id | Yes | The journey template ID that owns this notification | |
| notification_id | Yes | The notification template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover idempotency and non-destructiveness, and the description adds one meaningful behavioral rule: overrides must target existing element ids. However, it does not disclose whether existing locale overrides are replaced wholesale or merged, nor does it address state or permission behavior beyond what the schema already implies.
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 with no filler; the first sentence states the operation and scope, and the second provides the critical invariant. The description is front-loaded and every word earns its 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?
The required IDs and element-list shape are clear, and the description adds the existing-element rule. However, the actual locale-content fields inside an element are left as arbitrary additionalProperties, and merge/replace behavior for existing locale overrides is unspecified, so the picture is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters are already described in the schema, so the baseline applies. The description adds one useful semantic constraint about the elements parameter, but it does not add meaning for notification_id, journey_id, locale_id, or state beyond their schema descriptions.
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 ('Set') and names the exact resource: 'locale-specific content overrides for a journey-scoped notification template'. It also states a key constraint (element overrides must reference existing element ids), which distinguishes it from sibling content-put tools like put_journey_template_content.
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 indicates when this tool is appropriate: for locale-specific overrides on a journey-scoped notification template. It does not explicitly name alternatives or provide exclusion criteria, but the scope language is specific enough for an agent to separate it from the generic content-put siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
put_notification_contentAIdempotentInspect
Replace the elemental content of a V2 notification template. Overwrites all elements. Use channel elements to target specific channels. Multi-channel example: elements: [{ type: "channel", channel: "email", elements: [{ type: "meta", title: "Hello" }, { type: "text", content: "Email body" }] }, { type: "channel", channel: "push", elements: [{ type: "meta", title: "Hello" }, { type: "text", content: "Push body" }] }, { type: "channel", channel: "inbox", elements: [{ type: "text", content: "Inbox plain text only" }] }].
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Template state after update | |
| version | No | Content version string | |
| elements | Yes | Array of elemental content nodes | |
| notification_id | Yes | The notification template ID (nt_ prefix) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation as mutating, idempotent, and non-destructive. The description adds the important behavioral caveat that all existing elements are overwritten, plus the channel-targeting structure. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The key facts are front-loaded: replace, overwrite, and channel targeting. The multi-channel example is lengthy but earns its place by clarifying the complex nested structure of the elements parameter.
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?
The example fills the most significant gap for the nested elements structure, and schema coverage handles the remaining parameters. It could be slightly more complete by cataloging allowed element types or explaining version behavior, but the core usage is well covered.
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 100% schema coverage, the parameters are already documented at a basic level. The description goes further by providing a concrete multi-channel elements example that illustrates how channel, meta, and text nodes nest inside the otherwise generic elements array.
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: 'Replace the elemental content of a V2 notification template.' It immediately clarifies scope with 'Overwrites all elements,' which differentiates this from singular-element operations such as put_notification_element.
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 useful in-tool guideline ('Use channel elements to target specific channels') and implies a full-replacement workflow with 'Overwrites all elements.' However, it never name-checks alternatives like put_notification_element or explicitly states when this tool should be avoided in favor of a partial update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
put_notification_elementAIdempotentInspect
Update a single element within a V2 notification template.
| Name | Required | Description | Default |
|---|---|---|---|
| if | No | Conditional expression for element visibility | |
| ref | No | Reference identifier | |
| data | No | Element data payload | |
| loop | No | Loop expression for repeating elements | |
| type | Yes | Element type (e.g. text, action, image, divider, meta) | |
| state | No | Template state after update | |
| channels | No | Channels this element applies to | |
| element_id | Yes | The element ID to update | |
| notification_id | Yes | The notification template ID (nt_ prefix) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds the scoping fact that only a single element is affected, but it does not disclose versioning/state effects, whether existing fields are merged or replaced, or what response is expected. This is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no filler. Every word earns its place, and the core action and resource are immediately visible.
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?
The tool has 9 parameters, a nested object, and no output schema, so more context about result/error behavior would be helpful. However, the input schema is fully documented and annotations cover the safety/idempotency profile, making this a minimum-viable definition.
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 description itself adds no parameter-level detail beyond the schema, though 'single element' and 'V2 template' echo element_id and notification_id respectively.
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 ('Update') and a specific resource ('a single element within a V2 notification template'), clearly distinguishing this from siblings like put_notification_content and put_notification_locale. The phrase 'single element' and 'V2' make the target 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?
No guidance is given about when to use this tool instead of related notification update tools, nor are prerequisites or exclusions mentioned. An agent must infer its applicability from the tool name and the brief description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
put_notification_localeAIdempotentInspect
Set locale-specific content overrides for a V2 notification template. Each element override must reference an existing element by its id. Example for Spanish locale: { notification_id: "nt_01abc", locale_id: "es", elements: [{ id: "elem_meta_1", title: "Restablecer contraseña" }, { id: "elem_text_1", content: "Haga clic en el enlace para restablecer su contraseña." }] }.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Template state after update | |
| elements | Yes | Array of element overrides with id and locale-specific content | |
| locale_id | Yes | Locale identifier (e.g. es, fr, pt-BR) | |
| notification_id | Yes | The notification template ID (nt_ prefix) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true and destructiveHint=false. The description adds the meaningful constraint that element IDs must reference existing elements, but it does not clarify whether existing overrides are replaced or merged, what happens on invalid IDs, or how the optional 'state' parameter affects behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with a concrete JSON example. The example earns its place because the elements schema leaves additionalProperties open, so showing real override keys is the clearest way to communicate the expected shape.
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 4-parameter mutation with no output schema, the description captures the input shape and the key cross-element constraint. However, it does not explain the semantics of the 'state' parameter, nor whether overrides are additive or replace existing locale content. Annotations cover safety, but behavior around state remains unclear.
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 all four properties. The description adds value by emphasizing that 'id' must reference an existing element and by demonstrating title/content fields in the example, matching the open additionalProperties of elements. It does not add detail for notification_id, locale_id, or state beyond their schema descriptions.
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 'Set' and names the exact resource: 'locale-specific content overrides for a V2 notification template.' This clearly differentiates the tool from sibling content tools like put_notification_content or put_notification_element, and the concrete Spanish example removes any ambiguity about intent.
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 'locale-specific content overrides' implies when to use this tool, and the instruction that each element must reference an existing ID is a useful prerequisite. However, it does not explicitly contrast with alternatives such as put_notification_content, put_notification_element, or update_translation, nor does it state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
release_digestAInspect
Release a digest schedule early — send what users have collected so far now instead of waiting for the scheduled time. A 204 is also returned when the schedule has no in-progress instances to release.
| Name | Required | Description | Default |
|---|---|---|---|
| schedule_id | Yes | The digest schedule id, in the form "sch/{uuid}" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only, not idempotent, and not destructive. The description adds behavioral nuance: it sends what has been collected so far and returns 204 even when there is nothing to release. This goes beyond the annotation hints.
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 with no filler. The core purpose is front-loaded, and the edge-case behavior is stated in a compact second 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 single-parameter tool with no output schema, the description covers the trigger behavior and the notable no-op case. It does not describe side effects on the schedule itself, but the essential invocation guidance 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 coverage is 100% and the schedule_id parameter includes its format. The description does not add additional meaning beyond the schema, but it doesn't need to because the schema fully documents the single parameter.
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 clearly states the action (release early), the resource (a digest schedule), and the effect (send collected content now instead of waiting). It distinguishes itself from list_digest_instances and other scheduling tools by explaining the early-trigger 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?
The description provides when to use the tool ('instead of waiting for the scheduled time') and defines a meaningful edge case (no in-progress instances). It does not explicitly name alternatives or state when not to use it, but the use case is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_all_user_tenantsADestructiveIdempotentInspect
Remove a user from all tenants.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The user ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey destructiveHint=true and idempotentHint=true, so the description does not need to restate those traits. It does add the 'all tenants' scope, which is useful, but it does not disclose any additional behavioral details such as whether the user profile itself is deleted or whether removal is irreversible beyond what the destructive hint implies.
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 a single, front-loaded sentence with no filler. Every word earns its place by communicating the verb, object, and scope ('all tenants') efficiently.
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 operation, the description plus annotations provide the core information needed: what is removed, at what scope, and that it is destructive yet idempotent. It does not describe the return value or side effects on the user profile, but the tool's low complexity and strong schema/annotation coverage make it reasonably 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 input schema already provides 100% coverage with a clear description for user_id ('The user ID'). The tool description adds no extra parameter-level meaning, so the schema carries the full burden; 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 ('Remove') and a precise resource/scope ('a user from all tenants'), clearly distinguishing this from the sibling remove_user_from_tenant by the 'all tenants' qualifier. An agent can immediately understand both what it does and how it differs from the single-tenant removal 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?
Usage is implied by the description and sibling set: 'all tenants' signals this is the bulk version of remove_user_from_tenant. However, there is no explicit guidance on when to choose this tool over alternatives or any exclusions, so the 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.
remove_user_from_tenantBDestructiveIdempotentInspect
Remove a user from a tenant.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The user ID | |
| tenant_id | Yes | The tenant ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=true, so the agent knows it is destructive and idempotent. The description adds no extra behavioral context beyond the verb 'remove', such as consequences (e.g., does not delete the user, only the association) or side effects. Since the description adds nothing beyond the annotations, it falls short of providing valuable disclosure.
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 a single concise sentence: 'Remove a user from a tenant.' It is front-loaded with the action and resource, and there is no redundancy. It is appropriately brief for a simple operation, though it omits any extra guidance that might enhance clarity.
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 only two required parameters, no output schema, and annotations covering destructiveness/idempotency, the description is minimally adequate. It lacks explicit mention of the operation's scope (removing the association without deleting the user), which could be useful, but given the simplicity, it is borderline complete. The lack of any additional detail or prerequisites makes it somewhat 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% with both user_id and tenant_id described as 'The user ID' and 'The tenant ID'. The description does not add meaning beyond the schema, so the baseline of 3 applies. It does not clarify the relationship semantics (e.g., that the user is removed only from that specific tenant).
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 'Remove a user from a tenant' clearly states the action (remove) and the resource (user from tenant). It distinguishes from siblings like add_user_to_tenant (opposite action) and remove_all_user_tenants (removes from all tenants) by specifying a single tenant.
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?
No guidance on when to use this tool versus alternatives. It does not mention that remove_all_user_tenants is for removing from all tenants, nor does it advise how to use this for a specific tenant relationship. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_journeyADestructiveIdempotentInspect
Replace (update) a journey draft. Full document replacement — include all nodes and properties in the body, the trigger included; anything omitted is deleted. The journey stays a draft; making the change live is a separate step this tool cannot perform. This is where send, delay, branch and exit nodes are added, and send node template IDs must already be scoped to this journey. The result carries a "verification" object read back from the server after the write — check it every time. verified:true means what you asked for is what saved. verified:false names what did not: "fieldMismatches" for node fields that failed to land, "nodeCountMismatch" for a node dropped or added, and "unknownTemplateReferences" for a send node pointing at a template id this journey does not have — almost always a mistyped id, so re-copy it from the create_journey_template or get_journey response it came from. Fix the specific thing named and send the corrected document. Re-sending an identical call changes nothing, and every replace_journey overwrites the whole draft again. An "errorKind" of "unauthorized" means the write itself succeeded and only the read-back was refused: report that as unconfirmed, never as a failed write.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Journey display name | |
| nodes | Yes | Complete array of journey nodes: the trigger first, a terminal exit last, and everything else between them. Use server-assigned node ids from get_journey — do NOT invent new ids. Send node example: { type: "send", channel: "email", message: { template: "nt_journey_1" } } — the template goes inside message, never at node level, and the id is a journey-scoped one returned by create_journey_template rather than a workspace template id. Copy that id character-for-character from the create_journey_template or get_journey response you got it from — never retype or reconstruct it from memory, since a single dropped or altered character produces a different, non-existent id and the reference silently fails to resolve. channel must always be set to one of "email", "sms", "push", "inbox", "slack", or "msteams" on every send node — do not omit it even though the field is optional. An unset channel makes Studio silently render the node as email: for sms, push, and inbox sends this means the wrong title, an Email Address field shown instead of the real recipient field, no provider picker, and a hard-blocked "+Create message" button, with nothing shown to warn the user. The stored recipient data is not lost and delivery is not affected — this only breaks how the journey looks and works for a human editing it in Studio. Delay node example: { type: "delay", mode: "duration", duration: "PT1H" }. Branch node example: { type: "branch", paths: [{ conditions: ["data.plan", "is equal", "pro"], nodes: [] }], default: { nodes: [] } } — paths and default are both required, and the key inside a path is "conditions", not "condition". | |
| state | No | Must be "DRAFT". These tools cannot publish. | |
| enabled | No | Whether the journey is active. | |
| journey_id | Yes | The journey template ID to update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond annotations by describing the verification read-back, verified:true/false mismatch kinds, idempotent resend behavior, and the unauthorized errorKind nuance. Consistent with destructiveHint and idempotentHint; no 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?
Long but dense and front-loaded with the core replace semantics; every sentence adds operational guidance such as verification, idempotency, and error interpretation. Could be broken into shorter labeled paragraphs, but there is 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 mutation tool with no output schema, this is unusually complete: safety, idempotency, publish separation, node construction rules, verification object, and error interpretation are all covered. An agent has enough to call and check success 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 already covers 100 percent of parameters, but the description adds crucial semantic depth: full-replacement body requirement, node type examples, channel required despite optional in schema, branch path keys, and template-id scoping/copy rule. This materially improves correct 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?
States clearly that this tool replaces/updates a journey draft via full document replacement, distinguishing it from creation, publishing, and template-scoped operations. The journey stays a draft and making the change live is a separate step this tool cannot perform, which further separates it from publish and live-edit tools.
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 actionable context: this is where send, delay, branch and exit nodes are added, and it clarifies that making a change live is not possible here. It does not explicitly name sibling tools like create_journey or publish_journey, so the when-not-to-use guidance is inferential rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_journey_templateAIdempotentInspect
Replace the draft of a journey-scoped notification template. Full document replacement. Call publish_journey_template afterwards to make it live.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | "PUBLISHED" to publish immediately after replace | |
| journey_id | Yes | The journey template ID that owns this notification | |
| notification | Yes | Full notification template definition | |
| notification_id | Yes | The notification template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context by specifying that only the draft is replaced, that replacement is full-document rather than partial, and that a separate publish step is required. This goes meaningfully beyond the annotations without contradicting them.
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 with no filler. It front-loads the core action, then adds the critical scoping fact and the follow-up publish step. Every sentence earns its 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?
Given the nested schema and annotations, the description conveys the essential workflow: replace the draft fully, then publish to make it live. It omits the fact that the 'state' parameter can publish immediately, and it does not mention partial-update alternatives, but the schema covers parameter details and the annotations cover safety traits. This is adequately complete for correct 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?
Schema description coverage is 100%, so the input schema already documents all parameters, including the 'state' parameter and the 'notification' full-template definition. The description adds little parameter-level meaning beyond restating that replacement is full-document. This meets the baseline for fully schema-covered parameters but does not significantly extend it.
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: 'Replace the draft of a journey-scoped notification template.' It also clarifies the scope with 'Full document replacement,' which helps differentiate from partial-update tools. It does not explicitly name a sibling alternative, so it falls 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?
The description provides clear sequential guidance: 'Call publish_journey_template afterwards to make it live.' This strongly implies this tool is for draft updates before publishing. However, it does not specify when not to use it or mention alternatives such as partial content update tools, leaving some selection reasoning implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_notificationAIdempotentInspect
Replace a notification template entirely (full document PUT).
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Template state after update (defaults to DRAFT) | |
| notification | Yes | Full notification template payload | |
| notification_id | Yes | The notification template ID to replace |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the full-document PUT semantics, clarifying that the operation replaces the entire template (omitted fields are logically cleared), which goes beyond the annotations' readOnlyHint/idempotentHint/destructiveHint. It doesn't cover versioning, publish state effects, or default state, but annotations already provide the basic safety profile.
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 single, front-loaded sentence communicates the operation and its HTTP method with no filler. Every word adds meaning, making it an appropriately terse definition.
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 full-replace operation, 'full document PUT' conveys the core replacement semantics, and the schema covers all inputs. The absence of an output schema leaves the response shape unspecified, and no side effects (e.g., versioning or state transitions) are mentioned, but the inputs are fully covered.
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 fully documents all three parameters (notification_id, notification, state) with descriptions and enums, so the description doesn't need to repeat parameter details. It provides no additional semantic beyond the schema, but the 100% schema coverage sets the baseline at 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 description uses a specific verb ('Replace'), names the resource ('notification template'), and qualifies it with 'entirely (full document PUT)', which distinguishes it from partial-update siblings like put_notification_content or put_notification_element. It doesn't explicitly name alternatives, but the full-document qualifier does the 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?
The description implies usage for full replacement rather than partial updates, but it does not state when to prefer this over create_notification or the put_notification_* tools, nor does it provide exclusions or prerequisites. This is implied usage only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_preference_sectionAIdempotentInspect
Replace a preference section. Full document replacement; missing optional fields are cleared. Topics attached to the section are unaffected.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable name for the section | |
| section_id | Yes | Id of the preference section | |
| routing_options | No | Default channels for the section. Omit to clear. | |
| has_custom_routing | No | Whether the section defines custom routing for its topics |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate that this is a write operation and is idempotent. The description adds valuable behavioral detail beyond the annotations: missing optional fields are cleared, and attached topics are unaffected. This meaningfully informs an agent's side-effect expectations.
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 deliver the core action, replace semantics, clearing behavior, and topic preservation. No filler words, and the most important information appears first. Every sentence earns its 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?
The description covers the key behavioral nuances necessary for correct invocation: full replacement, clearing omitted optional fields, and non-impact on topics. The schema covers parameters. A note on the expected return value would make it fully complete, but nothing critical is missing for calling this tool 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 schema already describes all four parameters with 100% coverage. The description adds general context around clearing missing optional fields, but it does not need to re-document individual parameters. This matches the baseline for fully schema-documented parameters.
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: 'Replace a preference section.' It goes on to clarify full-document replacement semantics, which distinguishes it from partial updates and from the related replace_preference_topic sibling. This is unambiguous and scoped.
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 'Full document replacement' implies the intended use case, but the description never explicitly says when to choose this over create_preference_section, an update-style tool, or archive_preference_section. Usage context is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_preference_topicBIdempotentInspect
Replace a topic within a section. Full document replacement; missing optional fields are cleared.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable name for the preference topic | |
| topic_id | Yes | Id of the subscription preference topic | |
| section_id | Yes | Id of the preference section | |
| topic_data | No | Arbitrary metadata associated with the topic. Omit to clear. | |
| default_status | Yes | Default subscription status applied when a recipient has not set their own | |
| routing_options | No | Default channels delivered for this topic. Omit to clear. | |
| allowed_preferences | No | Preference controls a recipient may customize. Omit to clear. | |
| include_unsubscribe_header | No | Whether to include a list-unsubscribe header on emails for this topic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states that missing optional fields are cleared, which is a destructive overwrite of existing data, yet the annotations declare destructiveHint=false. This directly contradicts the annotation's safety signal. Without that contradiction, the description would be strong, but as written it is misleading about the operation's destructiveness.
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 that front-load the core action and then add the most important behavioral caveat. Every word earns its place; there is no repetition 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 an 8-parameter replacement tool with nested objects and no output schema, the description is largely adequate because the schema documents all parameters. However, the contradiction with destructiveHint=false leaves the agent with a confused safety model, and the description does not mention expected return behavior or side effects on existing topic data beyond clearing omitted fields.
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 optional fields already documenting 'Omit to clear.' The description adds a cross-cutting rule that all omitted optional fields are cleared, which clarifies behavior beyond any single parameter description and is especially useful for booleans like include_unsubscribe_header that do not independently say 'Omit to clear.'
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: replace a topic within a section. 'Full document replacement' adds a precise semantic that distinguishes it from partial-update siblings, though it does not explicitly name an alternative or clarify that this is a preference-topic admin operation rather than a user-preference operation.
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 implies usage: use this when you need a full replacement where omitted optional fields are cleared. However, it does not explicitly state when not to use it or name alternatives such as update_user_preference_topic or replace_preference_section, leaving some routing to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_profileADestructiveIdempotentInspect
Fully replace a user profile (PUT). All existing data is overwritten; include every field you want to keep.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | Complete profile data to replace with | |
| user_id | Yes | The user ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint and idempotentHint, but the description adds what gets destroyed: 'All existing data is overwritten.' It also provides practical guidance about including fields to keep, which goes beyond the annotation flags and helps an agent predict 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?
Two short sentences, each earning its place. The core action and method are front-loaded, followed by the critical overwrite warning and the keep-fields guidance. No filler or repetition.
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?
Given the destructive nature, the description sufficiently explains correct usage: provide the full profile. No output schema exists, and the description does not mention return values, but that is not critical for invocation. Minor gaps are the lack of an explicit alternative mention and no error/permission context, but annotations cover idempotence and destruction.
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 both parameters have descriptions. The description adds meaning to the 'profile' parameter by explaining that the provided data must be complete, reinforcing that omitted fields will be lost. This is valuable beyond the schema's 'Complete profile data to replace with.'
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 clearly states the action ('Fully replace'), the resource ('a user profile'), and the HTTP method ('PUT'). It distinguishes this from sibling tools like patch_profile by emphasizing full replacement and overwrite semantics.
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 usage context explicit: use this when you want a full replacement and must include every field to keep. It does not explicitly name patch_profile as the partial-update alternative, but the PUT/full-replace language gives clear context without exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_routing_strategyAIdempotentInspect
Replace a routing strategy. Full document replacement; missing optional fields are cleared.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable name | |
| tags | No | Tags. Omit to clear. | |
| routing | Yes | Routing tree | |
| channels | No | Per-channel delivery configuration. Omit to clear. | |
| providers | No | Per-provider delivery configuration. Omit to clear. | |
| description | No | Description. Omit to clear. | |
| routing_strategy_id | Yes | The routing strategy ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read idempotent operation; the description adds important behavioral detail that omitting optional fields clears existing values. This clarifies the actual impact of a call, which is not fully captured by the annotations. It does not mention auth or return behavior, but the core destructive semantics are 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 with no filler. The primary action is stated first and the critical replacement semantics are front-loaded in the second 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?
The description captures the essential behavior needed to invoke the tool correctly: full replacement and clearing of missing optional fields. The required parameters are documented in the schema, and no output schema exists to explain. It is complete for this operation, though a brief note distinguishing it from create/update would elevate it further.
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 optional parameter is already documented as 'Omit to clear'. The description's note about missing optional fields being cleared reinforces this but adds no parameter-level information beyond what the schema provides, so the 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 names a specific verb ('Replace') and resource ('routing strategy'), and adds the key property that this is a full document replacement. This makes it distinguishable from sibling tools such as create_routing_strategy, archive_routing_strategy, or get_routing_strategy without needing to inspect schemas.
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 'Full document replacement' implies this tool is for replacing entire routing strategies rather than patching specific fields, but it never explicitly says when to prefer it over create/update/archive siblings or what to do for partial updates. Usage context is present but only by inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_tenant_templateAIdempotentInspect
Create or replace a tenant notification template (draft unless published is true).
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Optional title merged into template content when provided | |
| content | Yes | Elemental content document. Example: { "version": "2022-01-01", "elements": [{ "type": "meta", "title": "Welcome" }, { "type": "text", "content": "Thanks for signing up." }] } | |
| routing | No | Message routing tree. Example: { "method": "single", "channels": ["email", "sms"] } | |
| channels | No | Per-channel delivery configuration, keyed by channel name. Example: { "email": { "providers": ["sendgrid"], "routing_method": "single" } } | |
| providers | No | Per-provider configuration, keyed by provider name. Example: { "sendgrid": { "override": { "from": "noreply@example.com" } } } | |
| published | No | When true, publish immediately after save | |
| tenant_id | Yes | The tenant ID | |
| template_id | Yes | The template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, lowering the burden on the description. The description adds meaningful behavioral context by stating that the template is saved as a draft unless 'published' is true, which clarifies the default state after the call. It does not detail overwrite semantics or response behavior, but the added draft context is valuable.
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 single front-loaded sentence states the action, the resource, and the key draft/published behavior. There is no filler or repetition of schema content, and every phrase earns its 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?
Given the highly nested schema (which includes examples and field descriptions for content, routing, channels, and providers) and the presence of safety annotations, the description covers the core behavioral nuance: templates are drafts unless published is true. It does not describe return values or error conditions, but the schema richness and annotations make the description sufficient for a competent agent.
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 description does not add any parameter-level meaning beyond what the schema already provides; it only references the published flag indirectly. The schema itself richly documents parameters with examples and constraints, so no compensation is 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?
The description states a specific verb ('Create or replace') and a clear resource ('tenant notification template'), so an agent can tell it is an upsert operation. The phrase 'draft unless published is true' distinguishes it from publish_tenant_template, though it does not explicitly contrast with other sibling replace/create tools.
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?
No guidance is given on when to use this tool versus related siblings such as create_notification, replace_notification, put_notification_content, or publish_tenant_template. The description implies it is for creating/replacing templates but does not state conditions, exclusions, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resend_messageAInspect
Resend a previously sent message. Loads the original send request and enqueues a brand-new send to the same recipient with the same content, producing a new messageId; the original message is unchanged. Rate limited per message (429 on rapid repeats).
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | The message ID of the original message to resend |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only say readOnlyHint=false, idempotentHint=false, and destructiveHint=false. The description meaningfully adds behavior: it loads the original send request, enqueues a new send, creates a new messageId, leaves the original message unchanged, and includes a rate-limit warning with a 429 code. This is substantial context beyond the structured annotations and aligns with the non-idempotent 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?
The description is three sentences with no filler: the core purpose is front-loaded, the behavioral mechanism and side effects follow, and the rate-limit caution is compactly stated. Every sentence earns its 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?
This is a simple single-parameter tool with no output schema. The description covers the operation's purpose, side effects (new messageId, original unchanged), and an important operational constraint (429 rate limit). An agent has enough to invoke it correctly and anticipate consequences.
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 message_id is already described as 'The message ID of the original message to resend.' The main description reinforces the parameter's role by explaining that the original send request is loaded, but it does not add significantly new semantic detail beyond what the schema already provides. 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 opens with a precise verb and resource: 'Resend a previously sent message.' It clearly distinguishes this from siblings like send_message and send_message_to_list by emphasizing 'previously sent' and the fact that it creates a 'brand-new send' with a 'new messageId.' An agent can tell this tool apart without inspecting sibling schemas.
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 conveys the context: use this when resending a previously sent message, and the behavioral explanation that it reuses the original request makes the use case unambiguous. However, it does not explicitly name alternatives or state when NOT to use it, such as 'use send_message for new content,' so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_listAIdempotentInspect
Restore a previously deleted list.
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | Yes | The list 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, so the safety profile is covered. The description adds the precondition that the list must have been previously deleted, which is useful behavioral context, but does not disclose details such as what exactly gets restored, failure behavior for active lists, or permission requirements.
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 a single front-loaded sentence with no filler or repetition. Every word earns its place and the core operation and precondition are communicated efficiently.
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 operation with no output schema, the description is nearly complete: it names the action, the target resource, and the precondition. Minor gaps such as exact side effects and error behavior exist, but annotations already cover idempotency and non-destructiveness, so the missing detail is not critical.
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 even without additional parameter details in the description. The tool description adds the implication that list_id must refer to a previously deleted list, but it does not elaborate on ID format or how to obtain the ID, which is acceptable for a single obvious parameter.
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 (Restore) and resource (previously deleted list), clearly distinguishing this from sibling tools like create_list, get_list, and delete_list. The phrase 'previously deleted' adds essential scope beyond what the name alone conveys.
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 gives clear context by specifying that this operation applies to a previously deleted list, implying it should be used rather than create_list when undoing a deletion. It does not explicitly name alternatives or when-not-to-use conditions, but the single-sentence scope is sufficient for this straightforward operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_bulk_jobAInspect
Run a bulk job, triggering delivery to all added users.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The bulk job ID to run |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only or idempotent, and the description adds the key behavioral detail that running the job triggers delivery to all added users. However, it does not disclose potential consequences, such as repeated runs causing duplicate deliveries, beyond what the annotations imply.
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 a single clear sentence with no filler. The core action and its effect are front-loaded and every word contributes 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 tool with one parameter and a clear side effect, the description covers the essential information needed to call it correctly. It could add a note about idempotency or what happens if the job has already run, but the current description is sufficient for basic correct use.
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 single parameter job_id is fully described in the schema as 'The bulk job ID to run', and the description adds no additional parameter context. With 100% schema coverage, 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 states a specific verb ('Run') and resource ('bulk job') and clarifies the consequence ('triggering delivery to all added users'). This distinguishes it from related tools like create_bulk_job and get_bulk_job.
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 'triggering delivery to all added users' implies this tool is used after users have been added to a bulk job, but it does not explicitly state when to use it versus alternatives or provide exclusions. Usage context is present but left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageAInspect
Send a message to a user using inline title and body content (no template). Optionally specify routing channels. API reference: https://www.courier.com/docs/api-reference/send/send-a-message.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Message body | |
| data | No | Key-value data to include with the message | |
| title | Yes | Message title | |
| method | No | Routing method: deliver to all channels or stop after first success | all |
| user_id | Yes | The recipient user ID | |
| channels | No | Channel names to route through (e.g. email, sms, push). Omit to use default routing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The false annotations signal that this is a mutating, non-idempotent operation, and the description adds useful context about inline content and optional routing channels. It does not mention delivery side effects, auth requirements, rate limits, or whether the call returns a message ID, but it does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the core action and content mode are front-loaded, and the API reference link is a useful pointer at the end. Every clause earns its 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?
The combination of description and fully-described schema is enough to invoke the core call, and the API reference link supplements documentation. But with no output schema, the description does not tell the agent what a successful send returns, and the relationship to list/template siblings is only implicit, leaving contextual gaps.
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 already documents all parameters. The description's mention of inline title/body and routing channels maps directly to schema properties but adds no new parameter-level meaning; the 'method' enum and 'data' object are only explained in the schema, which is acceptable.
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 action and object ('Send a message to a user') and immediately scopes the content mode ('inline title and body content (no template)'), which distinguishes it from template-based sibling tools. It also mentions optional routing channels, giving a precise one-line definition.
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 'no template' qualifier tells an agent this is for inline sends rather than template-based siblings, and 'to a user' suggests single-recipient use rather than list sends. However, it never names send_message_template, send_message_to_list, or other alternatives explicitly, so an agent must infer routing decisions from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_message_templateAInspect
Send a message to a user using a published notification template. Only published templates can be sent; publishing a draft is a separate operation. Example: { user_id: "user-123", template: "nt_01abc123", data: { name: "Alex", resetUrl: "https://app.example.com/reset" } }.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Key-value data for template variables | |
| method | No | Routing method | all |
| user_id | Yes | The recipient user ID | |
| channels | No | Channel names to route through. Omit to use template routing config. | |
| template | Yes | Template ID or notification slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false (not read-only, not idempotent, not destructive), so the description carries the burden of explaining side effects. It adds the prerequisite that only published templates can be sent, but does not disclose what happens on invalid templates, whether a message record is created, or how delivery works. The basic side effect is clear from 'Send', but the description adds limited behavioral depth.
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 plus a compact JSON example, with no filler. The key constraint (published templates only) is stated early, and the example is directly illustrative. Everything present earns its 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?
The description plus schema cover the core action, required parameters, and a precondition, but gaps remain: the 'method' enum (all/single) is not explained, there is no mention of what the operation returns, and error conditions are absent. Given the tool has nested objects and no output schema, a bit more context about routing options would improve completeness.
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 already documents all five parameters, so the baseline is 3. The description's example goes further by showing how the 'data' object maps to template variables (e.g., name, resetUrl), which clarifies the nested structure. It does not add semantic detail for 'method' or 'channels', but the schematic descriptions already cover those 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?
The description opens with a specific verb and resource ('Send a message to a user using a published notification template'), making the operation unambiguous. The added note that only published templates can be sent distinguishes it from publish/draft operations, and the example reinforces the intended use. It is clearly not a generic send_message 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 supplies clear context by restricting use to published templates and stating that publishing a draft is a separate operation, giving an implicit when-not. It also implies a single recipient ('to a user'), differentiating from list-based send tools, but it does not explicitly name sibling alternatives or describe when to choose this over send_message. Thus it provides context with one exclusion but lacks explicit alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_message_to_listAInspect
Send a message to all subscribers of a list using inline title and body content. API reference: https://www.courier.com/docs/api-reference/send/send-a-message.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Message body | |
| data | No | Key-value data to include | |
| title | Yes | Message title | |
| method | No | Routing method | all |
| list_id | Yes | The list ID to send to | |
| channels | No | Channel names to route through. Omit to use default routing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the readOnly/idempotent/destructive flags, and the description is consistent with them, so there is no contradiction. The description adds that this targets all list subscribers and uses inline content, but it does not disclose return shape or other side-effect details beyond what 'Send' implies.
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 single direct sentence states the core purpose and content mode, followed by a useful API reference URL. There is no filler or repeated title.
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?
Given no output schema and six parameters, the description is adequate but not rich: it identifies the target and content mode, while the schema covers field details. It leaves unaddressed the difference from template-based sends and does not describe the response, though the API reference mitigates this.
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 100% schema description coverage, the schema already documents all 6 parameters, including the method enum, data, and channels. The description adds no parameter semantics beyond mapping 'title' and 'body' to inline content, 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?
The description uses a specific verb ('Send') plus a resource ('message to all subscribers of a list'), and clarifies it uses inline title and body rather than a template. This distinguishes it from siblings like send_message_to_list_template and send_message, making the purpose 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 phrase 'to all subscribers of a list' and 'using inline title and body content' gives a clear context for choosing this tool over template-based or single-recipient senders. It does not explicitly name a sibling or provide when-not-to-use guidance, but the intended use case is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_message_to_list_templateAInspect
Send a message to all subscribers of a list using a notification template.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Key-value data for template variables | |
| method | No | Routing method | all |
| list_id | Yes | The list ID to send to | |
| channels | No | Channel names to route through. Omit to use template routing config. | |
| template | Yes | Template ID or notification slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already note this is non-readonly and non-idempotent. The description adds no behavioral information such as delivery side effects, inability to retract, or asynchronous 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?
One concise, front-loaded sentence with no filler. Every word contributes to the tool's purpose.
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?
Schema and annotations provide a fair amount of context, but without an output schema or alternative routing guidance, the description leaves some operational context unspecified.
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 documents all parameters with descriptions, so the baseline applies. The description does not extend parameter meaning beyond what is 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?
Describes a specific operation: sending a template-based message to every subscriber of a list. This is clear on verb and resource, though it doesn't explicitly differentiate from similarly named siblings such as send_message_to_list and send_message_template.
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?
Provides clear context: use when routing a notification template to all list subscribers. No exclusions or alternative guidance are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subscribe_user_to_listAIdempotentInspect
Subscribe a user to a list. Creates the list if it doesn't exist.
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | Yes | The list ID | |
| user_id | Yes | The user ID to subscribe | |
| preferences | No | Optional notification preferences |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the operation is not read-only and is idempotent. The description adds valuable non-obvious context by revealing the side effect of creating the list if it does not exist, which goes beyond what annotations provide. It does not contradict the 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?
The description is a single, front-loaded sentence with no filler. The primary action is stated first, followed by the important auto-creation caveat, making it efficient and easy to parse.
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 the annotations covering idempotency and the schema covering all parameters, the description provides the key behavioral caveat about list creation. The lack of an output schema and sibling differentiation guidance is a minor gap, but the core information needed to call the tool correctly 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%, so the parameters list_id, user_id, and preferences are already documented to the degree of their names and types. The description adds no additional meaning beyond the schema, so the baseline score 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?
The description uses a specific verb and resource ('Subscribe a user to a list') and adds a distinctive behavior ('Creates the list if it doesn't exist'). This clearly states what the tool does and helps distinguish it from siblings like unsubscribe_user_from_list and add_bulk_users.
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 only states the action and does not say when to use this tool versus the many related siblings such as subscribe_user_to_lists, bulk_subscribe_to_list, or add_subscribers_to_list. There is no explicit guidance about choosing alternatives for bulk or multiple subscriptions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subscribe_user_to_listsBIdempotentInspect
Subscribe a user to one or more lists. Creates lists that do not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| lists | Yes | Array of lists to subscribe to | |
| user_id | Yes | The user ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already communicate non-read-only and non-destructive behavior, and the description adds a meaningful side effect: missing lists are created. However, it does not clarify behavior for already-subscribed users, partial failures, or the effect of preferences, though idempotentHint does cover some repeat-invocation semantics.
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, both earning their place: the first states the core operation, the second discloses an important side effect. There is 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 simple write tool with full parameter documentation, annotations, and no output schema, the description is largely sufficient. The main gap is the lack of guidance distinguishing this plural variant from the singular sibling, which an agent may need when choosing tools.
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 both parameters are documented. The description adds no parameter-specific meaning beyond what the schema already provides, so 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: subscribing a user to one or more lists. It also adds a meaningful behavioral detail, 'Creates lists that do not exist.' However, it does not explicitly differentiate itself from the sibling `subscribe_user_to_list` despite their close naming and overlapping purpose.
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 a use case but gives no guidance on when to use this tool versus siblings like `subscribe_user_to_list`, `bulk_subscribe_to_list`, or `add_subscribers_to_list`. There are no exclusions, conditions, or alternative-selection hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
track_inbound_eventAIdempotentInspect
Track an inbound event that can trigger automations. Requires event name, messageId (for deduplication), and properties.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | The event name (appears as trigger in Automation Trigger node) | |
| userId | No | User ID associated with the event | |
| messageId | Yes | Unique ID for deduplication (returns 409 if not unique) | |
| properties | Yes | Event properties payload |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations by stating that tracking can trigger automations, which is a key side effect. It also highlights the deduplication role of messageId, complementing the idempotentHint annotation. No contradiction with annotations exists.
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 a single efficient sentence that front-loads the core purpose and then lists the required inputs. Every word earns its place; no filler or repetition of schema 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 4-parameter tool with a 100% covered schema and clear annotations, the description sufficiently covers what the tool does, what it requires, and its side effects. It does not describe response output, but no output schema exists and the core invocation context is 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%, so the schema already documents all four parameters. The description restates the required parameters and adds little beyond the schema, aside from emphasizing messageId for deduplication, which the schema already mentions. 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 uses a specific verb ('Track') and resource ('inbound event') and states the purpose ('can trigger automations'). It clearly distinguishes this from sibling invoke_* tools by emphasizing inbound event ingestion rather than direct invocation.
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 'Track an inbound event' establishes clear context for external event ingestion, and 'that can trigger automations' signals its relationship to automation tools. It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to select this over invoke_automation_template or invoke_ad_hoc_automation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unsubscribe_user_from_listBDestructiveIdempotentInspect
Unsubscribe a user from a list.
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | Yes | The list ID | |
| user_id | Yes | The user ID to unsubscribe |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false. The description adds no behavioral context beyond the action itself, such as whether the subscription is hard-deleted, whether user data is affected, or any 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?
A single five-word sentence that is front-loaded and contains no filler. It expresses the operation in minimal space without losing clarity.
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 mutation with idempotent and destructive annotations, the basics are present. However, the description does not clarify the relationship to sibling unsubscribe/delete tools or state the post-condition, making it 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%, with list_id and user_id each described. The tool description adds no extra parameter meaning, so the schema carries the documentation burden; 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?
States a specific verb and resource: unsubscribes a user from a list. It is distinguishable from subscribe_user_to_list by the action verb, but it does not explicitly differentiate from related sibling operations such as delete_user_list_subscriptions.
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?
No guidance on when to choose this tool over alternatives like delete_user_list_subscriptions or bulk subscription tools. The intended use is only implied by the verb 'unsubscribe'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_audienceBIdempotentInspect
Create or update an audience with a filter definition.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Display name | |
| filter | No | Audience membership filter. Either a single condition ({ operator, path, value }) or a group ({ operator: "AND" | "OR", filters: [...] }) nesting to any depth. Example: { "operator": "AND", "filters": [{ "operator": "EQ", "path": "title", "value": "Engineer" }, { "operator": "INCLUDES", "path": "tags", "value": "beta" }] } | |
| audience_id | Yes | The audience ID | |
| description | No | Description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, covering the basic safety profile. The description adds a small amount beyond that by mentioning 'Create or update' (upsert behavior) and emphasizing the filter definition. It does not disclose side effects, whether existing filters are replaced or merged, or any permission requirements, but the annotation coverage lowers the 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?
The description is one short, direct sentence with no filler. It front-loads the core action and resource. It earns its place, though it could carry a bit more useful context without becoming 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?
The schema richly documents parameters and the filter grammar, so an agent can construct valid inputs. However, the description alone leaves ambiguity around create-versus-update behavior, return values (no output schema), and whether calling with only audience_id has meaningful side effects. These are notable gaps, but not fatal given schema and annotation coverage.
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 every parameter including the nested filter structure and example. The description's phrase 'filter definition' maps to the filter parameter but provides no additional semantic detail beyond what the schema already offers. 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 names a specific action and resource: "Create or update an audience with a filter definition." It clearly distinguishes this from sibling tools like list_audiences, get_audience, and delete_audience. However, the dual verb 'Create or update' is slightly ambiguous against the tool name 'update_audience', though it may intentionally signal upsert semantics.
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?
No guidance is given about when to use this tool versus alternatives, or whether it is preferred over get_audience/list_audiences for inspection tasks. It also does not state when an audience is created versus updated, despite saying 'Create or update.' The context must be inferred entirely from the tool name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_brandBIdempotentInspect
Replace an existing brand with new values.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Brand display name | |
| brand_id | Yes | The brand ID to update | |
| settings | No | Brand settings (colors, email, inapp) | |
| snippets | No | Brand snippets |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-read-only, idempotent, non-destructive write operation. The description adds little beyond saying 'replace', which is ambiguous: it could mean full replacement of all fields or partial update of provided fields. It does not clarify what happens to omitted settings or snippets, leaving a meaningful 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?
The description is a single, focused sentence with no filler. It front-loads the action ('Replace') and the object ('an existing brand'). While it is terse, it is appropriately sized for the information it tries to convey, though it omits important details that would make it more useful.
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?
Given the nested settings and snippets objects and no output schema, the description is adequate but incomplete. It doesn't explain the replace semantics for partially specified objects, how to clear a field, or what the response contains. With no alternative guidance, an agent may not know whether omitted fields are reset or preserved.
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 parameters (name, brand_id, settings, snippets) are already documented in the input schema. The description adds no additional parameter detail or usage nuance beyond the generic 'new values', so it sits at the baseline of 3 without providing extra semantic value.
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 'Replace an existing brand with new values' identifies a clear verb and resource: it modifies an existing brand. It distinguishes from creating or deleting a brand by explicitly saying 'existing', even though it does not name sibling tools. 'Replace' is slightly ambiguous relative to the tool name 'update_brand', so it loses a point.
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 use case is implied by 'existing brand' — an agent can infer this is for updating a brand that already exists rather than creating a new one. However, it does not explicitly mention alternatives like create_brand or delete_brand, nor does it state when not to use this tool. The guidance is minimal and left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_notification_checksBIdempotentInspect
Update check statuses for a notification submission.
| Name | Required | Description | Default |
|---|---|---|---|
| checks | Yes | Checks to update | |
| submission_id | Yes | The submission ID for the checks resource | |
| notification_id | Yes | The notification template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the operation is a non-read-only, idempotent, non-destructive update, and the description adds no behavioral detail beyond the verb. It does not disclose whether existing checks are replaced, whether status transitions are validated, or what happens when the submission is already final.
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 single front-loaded sentence with no filler. It is concise, though the available space could have been used to add behavioral context without harming clarity.
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 mutation tool with three required parameters and no output schema, the description does not explain the effect on existing checks, required lifecycle state, or what a successful update returns. It is minimal but not sufficient on its own.
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 descriptions for notification_id, submission_id, and checks, so the schema carries the parameter documentation. The description itself adds no additional parameter semantics, yielding the baseline score.
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, resource, and object: 'Update check statuses for a notification submission.' This clearly distinguishes it from read-only siblings like list_notification_checks and from submission-level actions like cancel_notification_submission.
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?
No guidance is given about when to update checks versus auditing or cancelling a notification submission, and no alternative tools are named. The usage context is only implied by the resource name and sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_providerADestructiveIdempotentInspect
Replace an existing provider configuration. Full replacement — retrieve current config with get_provider first; omitted optional fields are cleared. Changing API keys or settings affects live delivery if this integration is in use.
| Name | Required | Description | Default |
|---|---|---|---|
| alias | No | Short alias | |
| title | No | Display name | |
| provider | Yes | Provider key (must match existing; changing provider type is not supported) | |
| settings | No | Provider-specific settings | |
| provider_id | Yes | The provider configuration ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive and non-read-only, but the description adds crucial context: full replacement clears omitted fields, and changes affect live delivery if the integration is in use. This goes well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense, purposeful sentences. The action, prerequisite, and consequences are all stated without redundancy or fluff, and the most important behavioral fact 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?
The description gives the agent everything needed to use this tool correctly: what it does, how to prepare with get_provider, what happens to omitted fields, and the operational impact on live delivery. No output schema exists, but for this mutation tool the missing response details are not a barrier to correct 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?
Schema description coverage is 100%, so the parameters are already well documented. The description adds valuable behavior not in the schema, such as full-replacement clearing omitted optional fields and the live-delivery consequence of changing settings.
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: 'Replace an existing provider configuration.' Saying 'existing' and 'Full replacement' clearly distinguishes it from create_provider, delete_provider, or partial updates.
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 gives concrete usage guidance: retrieve current config with get_provider first, and warns that omitted optional fields are cleared. It doesn't explicitly list create/delete alternatives, but the context makes the replace-vs-create/delete distinction clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_tenant_preferenceAIdempotentInspect
Set the default notification preference for a subscription topic on a tenant. This controls tenant-level defaults — it does NOT set per-user preferences (use the user preferences API for that). The topic_id must already exist as a subscription topic in the workspace; a 404 means the topic has not been created yet. Example: { tenant_id: "acme", topic_id: "marketing-updates", status: "OPTED_IN", has_custom_routing: true, custom_routing: ["email", "push"] }.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | Subscription status for the topic | |
| topic_id | Yes | The subscription topic ID — must already exist in the workspace. A 404 response means the topic does not exist; create it in the Preferences Editor first. | |
| tenant_id | Yes | The tenant ID | |
| custom_routing | No | Default channels when has_custom_routing is enabled | |
| has_custom_routing | No | When true, use custom_routing instead of template defaults |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true, readOnlyHint=false, destructiveHint=false, so the bar is lower. The description adds useful operational context beyond annotations: the tenant-level scope, the pre-existence requirement, and what a 404 response means. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences plus one JSON example. The opening sentence carries the core action and scope, and the exclusion follows immediately. The example adds useful concrete context, though it slightly lengthens the 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?
For a straightforward update with a fully documented 5-parameter schema and idempotency/destructive hints already encoded, the description covers scope, prerequisite, and an error signature. It does not describe the success return value, but the lack of an output schema makes this a minor 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 the baseline is 3. The description adds a concrete JSON example that shows how tenant_id, topic_id, status, has_custom_routing, and custom_routing compose together, but most field semantics (enums, 404 behavior) are already in the schema, so the added meaning is modest.
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 action and resource: 'Set the default notification preference for a subscription topic on a tenant.' It explicitly contrasts with per-user preferences, which differentiates it from the many user-preference tools 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?
Directly tells the agent when not to use it: 'it does NOT set per-user preferences (use the user preferences API for that).' It also provides a prerequisite and diagnostic: topic_id must already exist, and a 404 means the topic has not been created yet.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_translationBIdempotentInspect
Create or update a translation for a specific locale. API reference: https://www.courier.com/docs/api-reference/translations/update-translations-by-locale.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Translation content (PO file format) | |
| domain | No | Translation domain | default |
| locale | Yes | Locale code (e.g. en_US, fr_FR) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already supply the safety profile: readOnlyHint=false, destructiveHint=false, idempotentHint=true. The description adds upsert semantics ('Create or update') but no extra detail about whether existing translations are overwritten wholesale or how partial updates behave, so it adds some but not rich 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?
One concise sentence that front-loads the action and resource, plus a relevant API reference link. There is no filler or redundant repetition of schema 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 simple upsert operation with 100% parameter coverage, annotations for safety, and no output schema, the description is largely sufficient. The main missing piece is sibling differentiation, which is already captured in the usage_guidelines dimension.
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 covers all parameters with descriptions, so the baseline is 3 under the rubric. The description's phrase 'for a specific locale' loosely maps to the locale parameter but adds no new meaning beyond the schema 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?
The description states a specific verb ('Create or update') and resource ('a translation for a specific locale'), making the core function immediately clear. It does not explicitly distinguish from sibling locale-related tools like put_notification_locale or put_journey_template_locale, 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?
There is no guidance on when to use this tool versus alternatives such as get_translation, put_notification_locale, or put_journey_template_locale. The description explains what the tool does but not which scenario selects it over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_user_preference_topicAIdempotentInspect
Update a user's preference for a specific subscription topic (opt in, opt out, or set channel preferences).
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | Preference status | |
| user_id | Yes | The user ID | |
| topic_id | Yes | The subscription topic ID | |
| custom_routing | No | Custom channel routing order | |
| has_custom_routing | No | Whether custom channel routing is set |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, and the description is consistent with them. The description adds value by specifying the behavioral modes (opt in, opt out, or channel preferences) beyond the generic word 'update.'
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 a single front-loaded sentence that names the action and resource before the parenthetical detail. It contains no filler, repetition, or unnecessary elaboration.
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 five-parameter mutation with complete schema documentation and safety annotations, the description is minimally adequate. However, it does not explain how to express the REQUIRED status or how the custom-routing fields work together, leaving the agent to infer those semantics from bare schema descriptions.
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 applies and the schema already documents all five parameters. The description maps loosely to status and custom-routing parameters, but it does not explain the relationship between custom_routing and has_custom_routing, and it omits the REQUIRED status value from the enum.
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: 'Update a user's preference for a specific subscription topic,' and the parenthetical adds concrete action modes. It is clear, but it does not explicitly distinguish itself from sibling tools such as bulk_update_user_preferences or replace_preference_topic.
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 singular 'a user' and 'a specific subscription topic' imply this is for single-user, single-topic updates rather than bulk operations. However, there is no explicit guidance about when to prefer this tool over bulk_update_user_preferences, bulk_replace_user_preferences, or other preference-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user or an account that owns the GitHub organization, then choose Claim with GitHub.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Query people, segments, campaigns, and message deliveries; send transactional email or broadcasts.
Send, search, and manage notifications, accounts, and push preferences
Send, track, and manage transactional and bulk email delivery
Send email, manage domains, DNS, webhooks, templates, and inbound routing on MailKite
Related MCP Servers
- AlicenseAqualityCmaintenanceManage your entire notification infrastructure using natural language. Trigger workflows, create users, manage preferences, update tenant branding, and access docs — all from Cursor, Claude Desktop, or Windsurf. 24 tools covering email, SMS, push, WhatsApp, Slack, MS Teams, and in-app notifications.2212MIT
- FlicenseNot gradedqualityDmaintenanceEnables sending emails (including mass emailing), querying, updating, and canceling delayed emails via the Resend API.
- AlicenseBqualityCmaintenanceManages SendGrid email workflows including design library, transactional templates, marketing contacts and lists, single sends, and direct email sends via the SendGrid v3 API.801,384MIT
- AlicenseBqualityFmaintenanceProvides an interface to manage email marketing, contact lists, dynamic templates, and email analytics via SendGrid's API.211,38429ISC
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Tools are mostly organized as distinct resource/action pairs, but several clusters are easy to confuse: list subscription tools (add_subscribers_to_list vs bulk_subscribe_to_list vs subscribe_user_to_list), message vs message-content vs message-history retrieval, and the many journey/journey-template list/get tools. Detailed descriptions rescue most selections, but the sheer number of near-identical verb/resource names creates real misselection risk.
Almost all tools follow a snake_case verb_noun pattern (create_, get_, list_, replace_, send_, publish_, archive_). Minor deviations keep it from a perfect score: courier_installation_guide is noun-first, and add_bulk_users sits awkwardly next to the bulk_add_* family, but the overall convention is predictable and readable.
144 tools is an extreme working-set size for an agent to hold and choose from, far beyond the reasonable 3–15 range. Even for a broad platform like Courier, this should be split into focused sub-servers (templates, journeys, users, lists, preferences, etc.) to remain usable.
The surface is remarkably comprehensive, covering sending, templates, journeys, automations, users, tenants, lists, preferences, providers, routing, brands, audiences, translations, digests, bulk jobs, and audit events. Notable gaps exist—automation template CRUD and digest schedule management are missing—but most workflows can still be completed with workarounds.