Skip to main content
Glama

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

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 3.9/5 across 144 of 144 tools scored. Lowest: 2.9/5.

Server CoherenceA
Disambiguation4/5

The 144 tools span many distinct resources (users, notifications, journeys, lists, tenants, etc.) with clear resource-specific verbs. Most overlap is between similar operations on different resource types (e.g., get_notification vs get_journey_template), which are disambiguated by the resource name. A few pairs like create_or_merge_user vs replace_profile vs patch_profile are close but descriptions clarify the semantics.

Naming Consistency4/5

The dominant pattern is verb_noun in snake_case (create_brand, get_message, archive_journey). There are minor deviations like courier_installation_guide and generate_jwt_for_user, but these are rare. Verbs vary (create vs replace vs put vs patch) but each maps to HTTP semantics, making the naming predictable overall.

Tool Count2/5

144 tools is extremely large. Even for a broad API covering many subsystems, this is excessive and will overwhelm agents, increasing selection time and cognitive load. The count alone indicates an over-fragmented surface that could likely be consolidated.

Completeness5/5

The toolset offers comprehensive lifecycle coverage for all major resources: CRUD plus publish, archive, send, cancel, list, versioning, preferences, and tenant associations. There are no obvious gaps; every entity has create/read/update/delete or archive equivalents, and workflows like bulk sending and journey management are fully supported.

Available Tools

144 tools
add_bulk_usersAInspect

Add users to an existing bulk job.

ParametersJSON Schema
NameRequiredDescriptionDefault
usersYesArray of user objects to add
job_idYesThe bulk job ID
Behavior3/5

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

Annotations already declare readOnlyHint=false and idempotentHint=false, aligning with the mutation implied by 'Add'. The description adds context that the job must already exist, but does not disclose details like duplicate handling or effects on a running job. Since annotations cover the basic safety profile, a neutral 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.

Conciseness5/5

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

The description is a single, direct sentence with no unnecessary words. It is well-structured and immediately conveys the tool's purpose.

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

Completeness4/5

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

Given the tool's low complexity (2 simple parameters, no nested objects) and the annotations indicating mutation, the one-sentence description is largely sufficient. It could mention return value or side effects, but for a simple add operation this is adequate.

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

Parameters3/5

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

Schema description coverage is 100%, with both job_id and users adequately described. The description does not add any extra meaning beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb 'Add' and identifies the resource as 'existing bulk job', clearly distinguishing it from tools like create_bulk_job or run_bulk_job. It immediately clarifies the scope (existing job) and action.

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

Usage Guidelines3/5

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

The description implies the tool is used to populate an existing bulk job before running, but it doesn't explicitly state when to use it versus alternatives like create_bulk_job or run_bulk_job. There is no mention of prerequisites or exclusions.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYesThe list ID
recipientsYesRecipients to set on the list
Behavior4/5

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

Annotations mark the tool as non-readonly and non-idempotent, but the description adds value by explicitly stating it appends rather than replaces existing entries. It does not contradict annotations and provides meaningful behavioral context about preserving existing subscribers.

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

Conciseness5/5

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

The description is a single, compact sentence that conveys the core behavior without unnecessary words. Every element is informative.

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

Completeness4/5

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

For a simple two-parameter append operation, the description, schema, and annotations cover the essential usage. It does not address edge cases like duplicate recipients or nonexistent lists, but given the tool's low complexity and no output schema, the provided information is adequate.

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

Parameters3/5

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

Both list_id and recipients are described in the schema with clear labels, and the description does not add extra parameter semantics. Since schema coverage is 100%, the description's lack of parameter detail is acceptable, defaulting to the baseline.

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

Purpose5/5

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

The description uses the verb 'Append' and specifies the resource 'subscribers to a list,' making the action precise. The phrase 'without removing existing subscribers' clarifies the scope and differentiates from replace-style operations, aligning with the tool's name.

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

Usage Guidelines3/5

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

The description implies the use case of adding new subscribers while preserving current list membership, but it does not explicitly state when to prefer this over alternatives like bulk_subscribe_to_list or subscribe_user_to_list. There is no mention of exclusions or prerequisites, so the usage guidance remains implicit.

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

add_user_to_tenantB
Idempotent
Inspect

Add a user to a tenant.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileNoTenant-scoped profile overrides
user_idYesThe user ID
tenant_idYesThe tenant ID
Behavior2/5

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

The annotation idempotentHint=true is provided, but the description adds no additional behavioral context. It doesn't say what happens if the user is already in the tenant, whether the profile parameter creates or updates overrides, or any side effects. With annotations covering the idempotency, the description still adds zero value beyond the name.

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

Conciseness5/5

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

A single sentence, 'Add a user to a tenant,' is extremely concise and front-loaded. It contains no filler or redundant information.

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

Completeness3/5

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

For a simple write operation with annotations and complete schema documentation, the description is minimally adequate. However, it lacks context about the optional profile overrides and does not mention the existence of bulk alternatives, which would enhance completeness.

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

Parameters3/5

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

Schema description coverage is 100%, so all parameters (user_id, tenant_id, profile) are already documented in the schema. The description does not add any extra meaning or clarify the profile object semantics, so it meets the baseline but does not go beyond.

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

Purpose5/5

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

The description states exactly what the tool does with a specific verb and resource: 'Add a user to a tenant.' It's clear and unambiguous, and the naming pattern distinguishes it from siblings like 'remove_user_from_tenant' and bulk alternatives such as 'bulk_add_user_tenants'.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. There is no mention of when to prefer 'add_user_to_tenant' over bulk operations like 'bulk_add_user_tenants' or 'add_bulk_users', nor 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.

archive_journeyA
DestructiveIdempotent
Inspect

Archive a journey. Archived journeys cannot be invoked but existing runs continue to completion.

ParametersJSON Schema
NameRequiredDescriptionDefault
journey_idYesThe journey template ID to archive
Behavior4/5

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

The description adds meaningful behavioral context beyond the annotations, explaining that archived journeys cannot be invoked and existing runs continue to completion. This complements the idempotent and destructive hints 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.

Conciseness5/5

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

The description is two sentences, front-loaded with the main action and followed by a concise consequence. Every word earns its place.

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

Completeness4/5

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

For a simple one-parameter tool with annotations and no output schema, the description adequately explains the side effects and usage context. It could mention reversibility or return values, but these are not essential given the tool's simplicity.

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

Parameters3/5

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

The input schema fully describes the only parameter (journey_id) with a description, and the tool description doesn't add further parameter details. Since schema coverage is 100%, 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.

Purpose5/5

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

The description clearly states the action ('Archive a journey') and the resource, distinguishing it from siblings like archive_journey_template and cancel_journey by specifying that archived journeys cannot be invoked while existing runs continue.

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

Usage Guidelines4/5

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

The description implies when to use this tool: to stop new invocations while allowing ongoing runs to finish. It doesn't explicitly name alternatives or state when not to use it, but the behavioral context provides clear guidance.

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

archive_journey_templateA
DestructiveIdempotent
Inspect

Archive a journey-scoped notification template. Archived templates cannot be sent.

ParametersJSON Schema
NameRequiredDescriptionDefault
journey_idYesThe journey template ID that owns this notification
notification_idYesThe notification template ID
Behavior4/5

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

Annotations already indicate idempotentHint and destructiveHint. The description adds a meaningful behavioral consequence—'Archived templates cannot be sent'—which goes beyond the annotations by explaining the post-archive state. No contradiction with annotations found.

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

Conciseness5/5

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

The description is a single concise sentence, front-loaded with the primary action and resource, with an important consequence. Every word earns its place—no redundancy or filler.

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

Completeness5/5

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

For a simple archive operation with two well-described parameters, no output schema, and annotations covering idempotency and destructiveness, the description is complete. It conveys the essential outcome and scope sufficiently without needing more detail.

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

Parameters3/5

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

Schema description coverage is 100%, with both notification_id and journey_id having clear descriptions. The tool description adds no additional parameter-specific meaning, 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.

Purpose5/5

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

The description clearly states the action (Archive) and the resource (journey-scoped notification template), using a specific verb and distinguishing it from siblings like archive_notification or archive_journey by the 'journey-scoped' qualifier. It also conveys the key consequence (cannot be sent), 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.

Usage Guidelines4/5

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

The description provides clear context by specifying 'journey-scoped notification template', which implies this is for templates owned by a journey, differentiating it from global templates. However, it does not explicitly mention alternative tools or when not to use it, falling 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.

archive_notificationA
DestructiveIdempotent
Inspect

Archive a notification template by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
notification_idYesThe notification template ID to archive
Behavior3/5

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

Annotations already indicate destructiveHint=true and idempotentHint=true. The description adds no additional behavioral context, such as what archiving entails (e.g., soft delete, irreversibility, permissions). It does not contradict the annotations, but it also does not enrich them.

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

Conciseness5/5

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

One sentence, front-loaded with the action and object. No wasted words or redundant information. It is appropriately concise for a one-parameter tool.

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

Completeness4/5

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

Given the tool's simplicity and the availability of annotations, the description is mostly complete. It clearly indicates the action and parameter. However, it doesn't mention the outcome or return value, which could be useful but is mitigated by the absence of an output schema and the straightforward nature of the action.

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

Parameters3/5

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

Schema description coverage is 100%: the single parameter notification_id is described as 'The notification template ID to archive'. The description's 'by ID' reinforces this but adds no new meaning beyond the schema parameter description.

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

Purpose5/5

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

The description 'Archive a notification template by ID' clearly identifies the action (archive), the resource type (notification template), and the method (by ID). It distinguishes itself from sibling tools like archive_journey and archive_journey_template by specifying 'notification template'.

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

Usage Guidelines3/5

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

The description implies use when archiving a notification template by ID, but provides no explicit context, exclusions, or alternatives. It does not mention when to prefer this over delete_notification or other archive tools, leaving usage largely implied.

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

archive_preference_sectionA
DestructiveIdempotent
Inspect

Archive a preference section. The section must be empty: delete its topics first, otherwise the request fails with 409.

ParametersJSON Schema
NameRequiredDescriptionDefault
section_idYesId of the preference section to archive
Behavior4/5

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 disclosing the 409 failure mode for non-empty sections and the required sequence. It does not explain the post-archive state, but the key operational constraint is covered.

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

Conciseness5/5

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

Two sentences, zero filler. The action is stated first, followed by the critical precondition and failure consequence. Highly efficient.

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

Completeness4/5

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

For a single-parameter destructive operation with helpful annotations, the description covers the unique behavior (409 on non-empty) and the necessary prerequisite. It could be more complete by explaining archival consequences, but it's sufficient for an agent to invoke correctly.

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

Parameters3/5

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

The schema already describes the single parameter 'section_id' (100% coverage), so the description need not repeat it. The description provides no additional parameter-level meaning, but it's not required; baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('Archive a preference section') with a specific verb and resource. It distinguishes from sibling tools like archive_preference_topic by targeting sections, and the precondition about topics further clarifies scope.

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

Usage Guidelines4/5

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

The description provides explicit when-to-use context: a section must be empty before archiving, with a direct instruction to delete topics first. It does not name alternatives, but the precondition effectively says 'do not use this unless topics are removed', which is sufficient for this simple tool.

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

archive_preference_topicB
DestructiveIdempotent
Inspect

Archive a topic within a section.

ParametersJSON Schema
NameRequiredDescriptionDefault
topic_idYesId of the subscription preference topic to archive
section_idYesId of the preference section
Behavior2/5

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

Annotations already indicate destructiveHint=true and idempotentHint=true. The description adds no additional behavioral context: it does not explain whether archiving is reversible, what happens to the topic after archival, or if any side effects occur. It simply restates the action implied by the tool name.

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

Conciseness5/5

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

The entire description is a single short sentence, 'Archive a topic within a section.' It is front-loaded, contains no filler, and every word contributes to the meaning. This is an appropriately concise description for a simple operation.

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

Completeness3/5

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

Given the tool's simplicity (2 parameters, no nested objects, no output schema), the description is minimally viable. However, it leaves out meaningful context: what does 'archive' do? Is it reversible? What is the returned result? Although annotations cover safety (destructive, idempotent), the absence of any explanation of the archival process or its effects makes the description slightly incomplete.

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

Parameters3/5

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

The input schema covers both parameters with clear descriptions ('Id of the subscription preference topic to archive' and 'Id of the preference section'), giving 100% coverage. The description's phrase 'within a section' reinforces the relationship between the two parameters, but it adds no new information beyond what the schema already provides. Baseline of 3 is appropriate.

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

Purpose5/5

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

The description 'Archive a topic within a section' uses a specific verb and resource, clearly distinguishing it from sibling tools like archive_preference_section (which archives a whole section) and delete_user_preference_topic (which deletes a topic). It precisely conveys the scope: a topic nested inside a section.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention any prerequisites, context, or exclusions. Given the presence of similar archive tools (e.g., archive_preference_section) and deletion tools, the agent receives no hints about the appropriate selection criteria.

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

archive_requestA
DestructiveIdempotent
Inspect

Archive a send request and all its associated messages by request ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
request_idYesThe request ID (requestId returned from /send)
Behavior4/5

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

Annotations already declare destructiveHint and idempotentHint, so the safety profile is known. The description adds valuable scope by stating the operation affects 'all its associated messages', which is critical for a destructive action. It does not mention reversibility or other side effects, 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.

Conciseness5/5

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

The description is a single, front-loaded sentence with no redundant words. It states the verb first and includes only the essential information: action, resource, and parameter.

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

Completeness4/5

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

For a one-parameter tool with annotations and no output schema, the description is largely complete. It covers the action, the resource, and the scope. Minor gaps include ambiguity around whether archiving is reversible or what the response looks like, but these are not critical given the simple scope.

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

Parameters3/5

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

Schema description coverage is 100%; the parameter request_id is described as 'The request ID (requestId returned from /send)'. The tool description only says 'by request ID', which adds no new semantics beyond the schema. Baseline 3 is appropriate when the schema fully documents the parameter.

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

Purpose5/5

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

The description clearly specifies the action ('Archive'), the resource ('a send request'), and the scope ('all its associated messages'), keyed by 'request ID'. This distinguishes it from sibling tools like archive_journey or archive_notification, which target different resources.

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

Usage Guidelines3/5

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

The description implies usage when one needs to archive a send request, but provides no explicit guidance on when to use this vs alternatives like cancel_message or delete_* tools. It does not name any alternative or exclusion, so the guidance is only implicit from the clear resource type.

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

archive_routing_strategyA
DestructiveIdempotent
Inspect

Archive a routing strategy. The strategy must not have associated notification templates; unlink all templates before archiving.

ParametersJSON Schema
NameRequiredDescriptionDefault
routing_strategy_idYesThe routing strategy ID to archive
Behavior4/5

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

Annotations already declare idempotentHint and destructiveHint, so the baseline is lower. The description adds behavioral context beyond annotations by stating the prerequisite about notification templates, which is not inferable from the annotations or schema. This extra constraint 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.

Conciseness5/5

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

The description is two sentences long. The first states the purpose, the second gives a critical precondition. There is no redundant information and the key information is front-loaded, 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.

Completeness4/5

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

For a simple one-parameter operation, the description covers the tool's purpose, the prerequisite, and the annotations handle destructive/idempotent behavior. It does not explain what 'archive' means in terms of reversibility, but given the low complexity and annotations, it is reasonably complete.

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

Parameters3/5

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

The schema has 100% description coverage for the single parameter, with a clear description of what routing_strategy_id is. The tool description adds no additional parameter meaning, but since the schema already fully documents it, the baseline of 3 is appropriate.

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

Purpose5/5

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

The description opens with 'Archive a routing strategy', using a specific verb and the exact resource type. This clearly distinguishes it from sibling tools like archive_journey or archive_notification, making the tool's function unambiguous.

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

Usage Guidelines4/5

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

The description provides a clear conditional requirement: the strategy must not have associated notification templates, and instructs to unlink them before archiving. This gives practical usage context and an exclusion, but it does not explicitly mention alternatives or when to use archiving versus other operations (e.g., delete), so it's slightly less explicit than the highest bar.

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

bulk_add_user_tenantsA
Idempotent
Inspect

Add a user to multiple tenants at once. A custom profile can be supplied per tenant.

ParametersJSON Schema
NameRequiredDescriptionDefault
tenantsYesArray of tenant associations
user_idYesThe user ID
Behavior3/5

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

Annotations provide idempotentHint=true and readOnlyHint=false, which the description respects. The description adds the behavioral nuance that a custom profile can be supplied per tenant, but it does not disclose behavior around existing associations or partial failures. This is acceptable given the annotation coverage.

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

Conciseness5/5

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

A single, front-loaded sentence with zero filler. It immediately states the action, the resource, the multiplicity, and a key capability. Every word earns its place.

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

Completeness3/5

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

The tool performs a bulk mutation with nested object parameters and no output schema. The description covers the core function and profile capability, but omits details like error behavior on partial failures or handling of existing memberships. The idempotentHint annotation helps, but the description could still be richer about the bulk semantics.

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

Parameters3/5

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

Schema coverage is 100%, with both 'user_id' and 'tenants' already documented in the schema. The description's mention of 'custom profile' adds marginal meaning ('custom profile' = tenant-scoped overrides) but does not substantially elevate understanding beyond the schema.

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

Purpose5/5

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

The description uses a specific verb ('Add') and resource ('user to multiple tenants'), clearly distinguishing this bulk operation from the sibling tool 'add_user_to_tenant'. It also mentions the custom profile feature, which is essential to 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.

Usage Guidelines4/5

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

The phrase 'at once' implies this is for bulk operations, distinguishing it from single-tenant tools like 'add_user_to_tenant'. However, it does not explicitly name alternatives or state when not to use this tool (e.g., if you need to add to a single tenant).

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokensYesToken records to upsert
user_idYesThe user ID
Behavior4/5

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

Annotations (readOnlyHint false, idempotentHint false) indicate a mutating, non-idempotent operation. The description adds crucial behavior with 'Overwrites matching existing tokens,' which goes beyond the schema and annotations. It does not contradict annotations and provides useful context, though it omits details on effects on non-matching tokens 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.

Conciseness5/5

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

Two sentences, front-loaded with the primary action and resource, zero filler words. Every sentence earns its place.

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

Completeness4/5

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

Given the absence of an output schema and the moderate complexity (array of token objects with nested device metadata), the description covers the core behavior but lacks details on what 'matching' means (token string vs provider_key) and prerequisites (e.g., existing user). Overall, it is adequate for an agent to understand the tool's basic function.

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

Parameters3/5

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

The input schema has 100% description coverage for both user_id and tokens, including nested device and expiry fields. The description adds no additional meaning beyond the schema, so a baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('Add'), the resource ('multiple push/device tokens for a user'), and the scope ('in one request'). It also differentiates from sibling tools like bulk_add_user_tenants (different resource) and create_or_replace_user_push_token (single vs multiple tokens).

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

Usage Guidelines4/5

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

The phrase 'in one request' implies a bulk-use case, and 'overwrites matching existing tokens' sets expectations for upsert behavior. However, it does not explicitly name alternatives or state when not to use this tool, nor mention prerequisites like user existence.

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

bulk_replace_user_preferencesA
DestructiveIdempotent
Inspect

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
topicsYesThe complete set of topic overrides. An empty array resets every existing override.
user_idYesThe user ID
tenant_idNoScope the replacement to a specific tenant context
Behavior5/5

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

The description discloses key behavioral traits beyond annotations: it explains the destructive effect (resetting omitted overrides to defaults), the special case of an empty array (clearing all overrides), and validation atomicity. These details are not present in the annotations (idempotentHint and destructiveHint) and provide crucial execution-time expectations.

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

Conciseness5/5

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

The description is three sentences, front-loaded with the primary action, and every sentence adds meaningful information (scope, reset behavior, empty array, atomicity). No filler or redundancy.

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

Completeness5/5

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

Given the tool's complexity (destructive, atomic, full-replacement semantics), the description is complete. It covers the mutation outcome, edge cases, and atomicity. There is no output schema, so return values are not expected to be explained. The sibling tools exist but do not need explicit cross-references for the description to be contextually complete.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description reinforces the array's semantics (complete set, empty array clears) but these are already described in the schema's topics parameter description. It adds no new parameter-level detail beyond what the schema already provides, so it stays at baseline.

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

Purpose5/5

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

The description uses the specific verb 'Replace' and clearly states the resource ('a user's complete set of preference overrides in one request'). It distinguishes from sibling tools like bulk_update_user_preferences by emphasizing 'complete set' and 'every existing override not included is reset', making its scoped purpose unambiguous.

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

Usage Guidelines4/5

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

The description clearly implies when to use this tool: when you need to replace an entire set of overrides atomically, with explicit behavior for missing items and empty arrays. However, it does not explicitly name alternatives or exclusions, so it falls short of the 'explicit alternatives' level but provides clear contextual usage.

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

bulk_subscribe_to_listA
Idempotent
Inspect

Replace all subscribers on a list with the given recipients.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYesThe list ID
recipientsYesRecipients to set on the list
Behavior4/5

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

Annotations already indicate mutation (readOnlyHint: false) and idempotency (idempotentHint: true). The description adds the 'replace all' semantics, clarifying the scope of change (entire list membership) beyond what annotations provide. It doesn't explicitly state that current subscribers are removed, but 'Replace' conveys this.

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

Conciseness5/5

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

The description is a single clear sentence, front-loaded with the verb 'Replace', with no unnecessary words or repetition of schema details.

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

Completeness5/5

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

For a simple two-parameter tool with full schema coverage and annotations, the description is complete. It clearly conveys the operation's effect and is sufficient for an agent to invoke it correctly. No output schema is present, so return values need not be described.

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

Parameters3/5

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

Schema coverage is 100% with both parameters (list_id and recipients) described. The description adds no additional parameter semantics beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's function: 'Replace all subscribers on a list with the given recipients.' It uses a specific verb ('Replace') and resource ('all subscribers on a list'), and the word 'Replace' distinguishes it from sibling add_subscribers_to_list which adds without replacing.

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

Usage Guidelines3/5

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

The description implies the use case via 'Replace' (overwrite entire list membership) but does not explicitly mention alternatives or when not to use this tool. It could have said 'Use this to set the full list; to incrementally add subscribers, use add_subscribers_to_list.'

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicsYesTopics to create or update
user_idYesThe user ID
tenant_idNoScope the update to a specific tenant context
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, idempotentHint=false), the description discloses important behavioral details: only body topics are modified, existing overrides remain untouched, and partial-success handling with items/errors return. This exceeds what annotations provide.

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

Conciseness5/5

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

Three concise sentences, front-loaded with the primary action and scope. Every sentence adds value without fluff or repetition.

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

Completeness4/5

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

For a mutation tool with no output schema, the description compensates by mentioning the return structure (items/errors). It adequately covers the core behavior, though it could add a note about 'unapplicable' topics or tenant scoping, but these are not critical gaps given the schema.

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

Parameters4/5

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

The schema already documents all parameters with descriptions (100% coverage), so the baseline is 3. The description adds semantic value by explaining the array behavior for 'topics' (additive, only those topics affected), which is not fully captured in the schema.

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

Purpose5/5

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

The description clearly states the action ('Additively create or update'), the resource ('user's preferences for one or more topics'), and the scope ('in a single request'). It also distinguishes from bulk replacement by emphasizing that only specified topics are touched, leaving existing overrides intact.

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

Usage Guidelines4/5

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

The description provides clear usage context by highlighting the additive nature and partial-update behavior. It implies when to use this tool (for partial updates) versus alternatives like bulk_replace_user_preferences, though it doesn't explicitly name the alternative or state exclusions.

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

cancel_automationA
Idempotent
Inspect

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").

ParametersJSON Schema
NameRequiredDescriptionDefault
cancelation_tokenYesThe cancelation_token that was set when the automation was originally invoked
Behavior4/5

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

The description discloses a notable behavioral side effect: 'This invokes a second ad-hoc automation with a single cancel step,' which goes beyond the idempotentHint annotation. It also clarifies the exact spelling requirement, adding useful 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.

Conciseness5/5

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

The description is three sentences, each serving a purpose: action, side effect, and token requirement with spelling note. It is front-loaded and wastes no words.

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

Completeness4/5

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

For a single-parameter tool with no output schema, the description covers the core behavior, the side effect, and the condition for success. It doesn't address failure cases or return values, but given the tool's simplicity, it is sufficiently complete.

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

Parameters3/5

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

Schema coverage is 100%, so the parameter is fully documented. The description reinforces the token requirement but largely repeats the schema's meaning, adding only a minor clarification about matching the original token.

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

Purpose5/5

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

The description opens with 'Cancel a running automation by its cancelation_token,' clearly specifying the action (cancel), resource (automation), and method (by token). It also distinguishes 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.

Usage Guidelines4/5

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

It provides clear context for use: the token must match the cancelation_token from the original automation start. It doesn't explicitly state when not to use it or mention alternatives, but the token requirement and automation-specific scope imply appropriate usage.

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

cancel_journeyA
DestructiveIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idNoCancels a single run by id. Mutually exclusive with cancelation_token.
cancelation_tokenNoCancels every run associated with this token. Mutually exclusive with run_id.
Behavior4/5

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

Annotations already indicate idempotent and destructive hints, but the description adds meaningful context: canceled or finished runs are left unchanged, and the token cancels multiple runs. This goes beyond the structured hints.

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

Conciseness5/5

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

Two concise sentences, front-loaded with 'Cancel journey runs', and every phrase adds necessary information. No waste or redundancy.

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

Completeness5/5

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

For a two-parameter destructive tool with no output schema, the description fully explains behavior, idempotency effect, and parameter usage. It is complete and self-sufficient.

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

Parameters4/5

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

Schema already covers 100% of parameters, with descriptions and mutual exclusivity. The description adds the 'exactly one' rule and clarifies the semantic difference between token and run_id, providing extra value.

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

Purpose5/5

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

The description clearly states the tool cancels journey runs, a specific verb and resource. It distinguishes from sibling tools like cancel_automation and cancel_message by focusing on journeys.

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

Usage Guidelines4/5

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

It explicitly instructs to supply exactly one of the two parameters and explains the effect of each. It also notes idempotency, though it doesn't contrast with alternatives; context is clear enough.

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

cancel_messageA
DestructiveIdempotent
Inspect

Cancel a message that is currently being delivered. Returns the message details with updated status.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesThe message ID to cancel
Behavior4/5

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

Annotations already declare idempotentHint and destructiveHint. The description adds that cancellation applies to messages 'currently being delivered' and returns 'message details with updated status', which is useful behavioral context beyond the annotations. No contradiction with annotations.

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

Conciseness5/5

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

The description is a single concise sentence that front-loads the action and includes the return behavior. Every word earns its place, with no unnecessary elaboration.

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

Completeness4/5

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

For a simple one-parameter tool with no output schema, the description explains what action is taken and what is returned. It could mention edge cases such as what happens if the message is no longer being delivered, but the core usage is clearly covered.

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

Parameters3/5

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

The schema covers 100% of the single parameter with its own description ('The message ID to cancel'). The tool description adds no additional parameter-specific semantics, so the baseline score of 3 applies due to full schema coverage.

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

Purpose5/5

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

The description clearly states 'Cancel a message that is currently being delivered' with a specific verb and resource. It distinguishes itself from sibling tools like cancel_notification_submission by targeting messages in delivery, and notes the return of updated message details.

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

Usage Guidelines4/5

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

The phrase 'currently being delivered' provides clear context for when this tool should be used, implying it is not for messages that have already been sent. However, it doesn't explicitly name alternative tools or state when not to use it, so it lacks explicit exclusions.

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

cancel_notification_submissionA
DestructiveIdempotent
Inspect

Cancel a notification template submission.

ParametersJSON Schema
NameRequiredDescriptionDefault
submission_idYesThe submission ID to cancel
notification_idYesThe notification template ID
Behavior3/5

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

The description aligns with the annotations (destructiveHint: true, idempotentHint: true) by using 'Cancel', but it does not add any behavioral context beyond the annotations. It does not describe consequences, reversibility, or any edge cases, though the annotations already cover the 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.

Conciseness5/5

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

The description is a single, concise sentence that is front-loaded with the action. Every word adds value, and there is no fluff or redundancy.

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

Completeness3/5

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

The tool is simple with two clearly described parameters and annotations, but the description lacks context about what a 'notification template submission' is, when it can be cancelled, or what the outcome will be. This is acceptable for a simple tool but leaves some gaps in understanding for an agent.

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

Parameters3/5

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

Schema description coverage is 100% for both parameters (submission_id and notification_id), and the schema provides clear descriptions. The tool description adds no additional parameter semantics, 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.

Purpose5/5

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

The description clearly states the action ('Cancel') and the resource ('a notification template submission'), using a specific verb that distinguishes it from sibling tools like cancel_message or cancel_journey. It is unambiguous 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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as cancel_message or cancel_journey. There is no mention of context, prerequisites, or exclusions, leaving the agent to infer usage solely 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.

courier_installation_guideA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idNoUser ID for JWT generation (client-side SDKs only). Defaults to "example_user".
platformYesThe platform to get installation guide for
Behavior4/5

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

With annotations providing readOnlyHint=true, the description adds valuable behavioral context by disclosing that the tool also generates a sample JWT for client-side SDKs. This is beyond the basic annotation and informs the agent of an additional output. It does not contradict the read-only hint, and provides enough transparency for a tool of this simplicity.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the primary purpose, and includes the key secondary behavior (JWT generation) in a compact addendum. Every sentence contributes value, and there is no redundant information.

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

Completeness4/5

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

For a simple tool with 2 parameters, no output schema, and a read-only annotation, the description covers the essential purpose and the notable special behavior. It doesn't explain the details of the sample JWT (e.g., who it is for, expiration), which could be a minor gap, but overall the description is sufficiently complete for an agent to use the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%: both 'platform' and 'user_id' have detailed descriptions in the schema. The tool description adds no new semantic information about the parameters; it only reiterates the distinction for client-side SDKs, which the schema already states. Thus the baseline of 3 is appropriate, as the description does not need to compensate.

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

Purpose5/5

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

The description clearly states the tool's function: 'Get the Courier SDK installation guide for a specific platform.' It specifies the resource (Courier SDK installation guide), the action (get), and the scope (specific platform). It also distinguishes itself from siblings by noting that for client-side SDKs it additionally generates a sample JWT, which sets it apart from tools like generate_jwt_for_user.

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

Usage Guidelines4/5

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

The description provides clear context on when to use the tool: for any SDK installation guide, and specifically for client-side SDKs with JWT generation. However, it does not explicitly mention alternatives (e.g., 'if you only need a JWT, use generate_jwt_for_user instead'), so it falls short of a 5. The context is clear with no exclusions, meriting a 4.

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" } } }.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoOptional brand ID; auto-generated if omitted
nameYesBrand display name
settingsNoBrand appearance settings. If omitted, defaults to { colors: { primary: "#000000", secondary: "#ffffff" } }.
snippetsNoBrand snippets
Behavior2/5

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

The description adds behavioral details: claims the API requires settings and returns a 400 if omitted, then says omitting settings uses defaults. This contradicts the schema, which marks settings optional and describes a default. The default color behavior is useful, but the contradictory claim undermines transparency. Annotations only indicate readOnlyHint=false and idempotentHint=false, which don't cover this.

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

Conciseness3/5

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

The description is three sentences, but the second sentence about settings being required is misleading and unnecessary, detracting from the otherwise concise purpose and example. It could be tightened to two clear sentences.

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

Completeness2/5

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

With four parameters, nested objects, and no output schema, the description only covers a subset of parameter meaning via example and gives contradictory guidance about requiredness. It does not describe return values or idempotency, though annotations cover the latter. Overall, it's incomplete for the tool's complexity.

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

Parameters2/5

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

Schema covers all parameters with descriptions (100%), so the baseline is 3. The description provides an example for name and settings.colors, but incorrectly states settings is required, which misleads about its optionality. It does not discuss id, snippets, or email/inapp settings, but the schema handles these.

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

Purpose5/5

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

The description opens with 'Create a new brand,' a specific verb+resource that clearly distinguishes it from sibling tools like update_brand, get_brand, list_brands, and delete_brand. The purpose is unambiguous despite later confusing statements.

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

Usage Guidelines3/5

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

The description implies usage for creating new brands but does not explicitly state when to prefer it over update_brand for existing brands. It provides context about settings omission/defaults, though the 'requires settings' statement creates confusion about when settings should be provided.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesBulk message definition with event/template and content
Behavior3/5

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

Annotations already indicate the operation is not read-only and not idempotent. The description adds context that creating a bulk job alone does not send messages—subsequent steps are required. However, it omits details like authentication, return value, or error handling.

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

Conciseness5/5

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

Two concise sentences with no unnecessary words. The purpose is stated first, followed by the workflow, making the description well-structured and front-loaded.

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

Completeness4/5

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

For a single-parameter creation tool with no output schema, the description provides essential context via the workflow and clearly states the tool's function. It could mention the returned job ID, but that is implied by the workflow and not critical.

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

Parameters3/5

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

The schema provides a description for the only parameter ('message'), and the tool description doesn't add additional detail about the message structure. Since schema description coverage is 100%, the baseline of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('Create') and resource ('bulk job') and clarifies the tool's role in sending messages to multiple recipients. The workflow line further distinguishes it from sibling 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.

Usage Guidelines4/5

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

The explicit workflow 'create_bulk_job → add_bulk_users → run_bulk_job' provides clear context for when to use this tool as the first step in a multi-step process. It doesn't mention exclusions or alternatives, but the workflow itself acts as a strong guideline.

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. Defaults to DRAFT state. Send nodes are not allowed on create — create the shell with a trigger node, then call replace_journey to add send nodes after linking notification templates. Call publish_journey to make it live. Node ids are server-generated; do NOT include an id field. Example: { name: "Welcome Journey", nodes: [{ type: "trigger", trigger_type: "api-invoke" }], enabled: true }.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesJourney display name
nodesYesArray of journey node objects. Node ids are server-generated — do NOT include an id field. Trigger node example: { type: "trigger", trigger_type: "api-invoke" }. Send node example: { type: "send", template: "nt_abc" }. Delay node example: { type: "delay", mode: "duration", duration: "PT1H" }.
stateNoCreate as DRAFT (default) or PUBLISHED immediately.
enabledNoWhether the journey is active. Defaults to true.
Behavior5/5

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

The description adds significant behavioral context beyond the annotations: it explains the default DRAFT state, the restriction on send nodes, that node ids are server-generated and must not be included, and includes an example payload. Since annotations only provide readOnlyHint=false and idempotentHint=false, the description carries the burden and does so thoroughly.

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

Conciseness5/5

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

The description is compact yet information-dense. Every sentence serves a purpose: stating the action, the default state, the restriction and follow-up tools, the id rule, and a stripped-down example. No filler or repetition, and critical details are front-loaded.

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

Completeness4/5

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

Given the moderate tool complexity, no output schema, and minimal annotations, the description covers the essential workflow and constraints. It might be improved by hinting at the response (e.g., returning the created journey with id), but the provided next-step guidance and example make the tool actionable. A small gap remains, so 4 rather than 5.

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

Parameters4/5

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

The schema covers 100% of parameters, so baseline is 3. The description adds value by providing a concrete example of the nodes array structure, clarifying that send nodes are disallowed at creation, and reinforcing the server-generated id behavior. This goes beyond simple schema repetition, earning a 4.

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

Purpose5/5

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

The description opens with 'Create a new journey,' clearly identifying the verb and resource. It distinguishes from sibling tools by explicitly referencing replace_journey and publish_journey, and by stating what this tool does (create shell with trigger node) versus what they do (add sends, make live).

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

Usage Guidelines5/5

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

The description provides explicit guidance: 'Send nodes are not allowed on create — create the shell with a trigger node, then call replace_journey to add send nodes after linking notification templates. Call publish_journey to make it live.' This directly tells the agent when to use this tool and which alternatives to use for subsequent steps.

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. Defaults to DRAFT; pass state: "PUBLISHED" to publish on create. 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!" }] } } }.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoInitial state: "DRAFT" (default) or "PUBLISHED"
channelYesChannel for this template (e.g. "email", "push", "sms", "inbox")
journey_idYesThe journey template ID
notificationYesNotification template definition
provider_keyNoSpecific provider key to target
Behavior4/5

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

Annotations only indicate readOnly=false and idempotent=false, which are minimal. The description adds meaningful behavioral context: defaults to DRAFT, accepts PUBLISHED to publish immediately, and can be referenced in send nodes. This goes beyond the annotations but does not fully disclose all behaviors (e.g., validation, error handling), so a 4 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.

Conciseness4/5

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

The description is appropriately sized, opening with purpose, then default/publish behavior, a use case, and a helpful example. The example is long but earned its place, as it demonstrates the complex nested structure without unnecessary verbosity.

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

Completeness3/5

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

Given the tool has 5 parameters, nested objects, and no output schema, the description covers core concepts but misses some important details. It does not mention return values, failure modes, or the provider_key parameter, leaving some gaps for an agent to infer. The example helps but incomplete context around expected outcomes lowers the score to 3.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description adds a concrete example showing the nested notification object structure, including nullable brand/subscription and content elements. This extra example clarifies parameter semantics beyond the schema, justifying a 4.

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

Purpose5/5

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

The description clearly states the tool creates a notification template scoped to a journey, using a specific verb and resource. It distinguishes from siblings like create_notification (which is not journey-scoped) and create_journey (which creates the journey itself).

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

Usage Guidelines4/5

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

The description provides context for when to use this tool, noting templates can be referenced in journey send nodes. It also explains the default DRAFT state and how to publish on create, but does not explicitly list exclusions or alternatives, hence a 4 rather than 5.

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

create_listA
Idempotent
Inspect

Create or update a list by list ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDisplay name for the list
list_idYesThe list ID
Behavior3/5

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

Annotations already declare readOnlyHint=false and idempotentHint=true, which covers the write and retry-safety profile. The description adds the upsert-like behavior ('Create or update') that aligns with idempotency, but provides no extra detail about permissions, side effects, or handling of existing lists.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. Every word contributes meaning, making it highly concise and scannable.

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

Completeness4/5

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

For a simple upsert with only two parameters, complete schema descriptions, and annotations indicating write/idempotent behavior, the description is adequate. It could mention what happens on create vs update (e.g., name overwritten), but the existing coverage is sufficient for basic selection.

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

Parameters3/5

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

Schema coverage is 100% with clear descriptions for both parameters ('Display name for the list' and 'The list ID'). The description's 'by list ID' reinforces list_id as the key but adds no meaningful semantics beyond the schema.

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

Purpose4/5

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

The description 'Create or update a list by list ID' clearly identifies the action (create/update) and resource (list), and the 'by list ID' qualifier distinguishes it from list read/delete siblings. However, combining 'create or update' into one verb is less precise than a single-action tool.

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

Usage Guidelines3/5

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

The description implies usage for creating or updating a list by ID, but provides no explicit when-to-use guidance or alternatives. It does not mention that get_list is for reading or delete_list for removal, so the context is only inferred.

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. Provide content inline or set it immediately after creation via put_notification_content. To send with this template you must publish it first via publish_notification (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: [] } } }.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoTemplate state after creation (defaults to DRAFT)
notificationYesNotification template payload
Behavior4/5

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

Annotations indicate readOnlyHint=false and idempotentHint=false, so this is a non-idempotent write operation. The description adds behavioral context by stating that a template cannot be sent until published (unless state is PUBLISHED) and that content can be set after creation, which goes beyond the basic write indication. It does not contradict the annotations, and the disclosure is helpful for anticipating workflow implications.

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

Conciseness5/5

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

The description is compact yet dense: three sentences plus a minimal JSON example. It front-loads the primary action, then addresses requirements, alternatives, and workflow constraints in a logical order. No filler or repetition is present.

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

Completeness4/5

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

Given the complexity of creating a notification template and the absence of an output schema, the description covers all essential input aspects: required fields, content alternatives, publishing prerequisite, and routing configuration. It does not describe return values, but with no output schema and ample guidance on the input side, this is a minor gap.

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

Parameters5/5

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

Even though schema coverage is 100%, the description adds substantial meaning beyond the raw schema: it explains that 'content' can be provided inline or later, 'routing.strategy_id' controls channels, and 'state' can be set to PUBLISHED for immediate sending. The included example ties all parameters together, making the input structure concrete and easier to construct correctly.

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

Purpose5/5

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

The description opens with 'Create a V2 notification template,' which is a specific verb+resource statement that clearly distinguishes this from sibling operations like put_notification_content (content modification) and publish_notification (state change). It also clarifies that 'name is required,' reinforcing the exact purpose.

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

Usage Guidelines5/5

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

The description explicitly maps out the usage workflow: content can be provided inline or set later via put_notification_content, and the template must be published before sending unless state:'PUBLISHED' is passed on creation. It also names publishing as a prerequisite and routing strategy as a configuration step, providing clear alternatives and when-to-use guidance.

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

create_or_merge_userA
Idempotent
Inspect

Create a new user profile or merge supplied values into an existing profile (POST). Existing fields not included are preserved.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileNoProfile data to create or merge (e.g. { email: "...", phone_number: "..." })
user_idYesThe user ID
Behavior4/5

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

Annotations already indicate non-read-only and idempotent behavior. The description adds meaningful context about the merge semantics—specifically that existing fields not included are preserved—which goes beyond the structured annotations. There is 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.

Conciseness5/5

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

The description is a single, concise sentence that front-loads the purpose and includes key behavioral information. No unnecessary words or repetitive details.

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

Completeness4/5

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

For a simple upsert tool, the description adequately covers core behavior and preservation semantics. It lacks return value information (no output schema exists), but the essential functionality is clearly conveyed. Slightly more detail about the response or use cases would improve it, but it is complete enough for an AI agent to invoke correctly.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for both user_id and profile. The description itself does not add additional parameter-level detail beyond what the schema already provides, so it relies on the schema for parameter semantics.

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

Purpose5/5

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

The description clearly states the tool's function: create a new user profile or merge into an existing one. It uses specific verbs ('create', 'merge') and names the resource ('user profile'), and distinguishes from siblings like replace_profile by emphasizing merge and preservation.

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

Usage Guidelines4/5

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

The description implies the usage context: use this tool when you want to upsert profile data and preserve any existing fields not supplied. It does not explicitly name alternatives or exclusions, but the merge behavior with preservation provides clear context for when it is appropriate.

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_tokenB
Idempotent
Inspect

Create or replace a push/device token for a user.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYesThe token string
deviceNoDevice metadata
user_idYesThe user ID
provider_keyYesPush provider
Behavior2/5

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

Annotations already declare readOnlyHint=false and idempotentHint=true. The description only says 'create or replace' and does not add behavioral details like overwriting existing tokens, uniqueness constraints, or authentication requirements. No contradiction, but no value beyond annotations.

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

Conciseness5/5

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

The description is a single front-loaded sentence that states the verb and object without unnecessary words. It is concise and well-structured.

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

Completeness2/5

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

Despite 4 parameters and a nested device object, the description omits important context such as whether existing tokens are replaced per provider, how the device metadata is used, and what a successful operation returns. The absence of an output schema makes the minimal description less complete.

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

Parameters3/5

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

Schema description coverage is 100%, with descriptions for token, device, user_id, and provider_key. The tool description adds no parameter-specific meaning, so the baseline of 3 applies; the schema already documents the parameters.

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

Purpose5/5

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

The description uses a specific verb pair 'Create or replace' targeting the resource 'push/device token' for a user. It clearly distinguishes from sibling tools like delete_user_token and list_user_push_tokens by naming both create and replace behavior.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as patch_user_token or bulk_add_user_tokens. The description lacks context about preferred scenarios or exclusions, so the agent receives no usage direction.

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

create_or_update_tenantB
Idempotent
Inspect

Create or replace a tenant. Tenants represent organizations or groups that users belong to.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDisplay name for the tenant
brand_idNoBrand ID to associate with this tenant
tenant_idYesThe tenant ID
propertiesNoCustom properties for the tenant
user_profileNoDefault profile data for users in this tenant
parent_tenant_idNoParent tenant ID for hierarchical tenants
default_preferencesNoDefault notification preferences for users in this tenant
Behavior2/5

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

The description merely restates the operation ('create or replace') which is already conveyed by the tool name and idempotentHint annotation. It does not disclose what happens to existing tenant data during a replace (e.g., whether omitted fields are cleared, merged, or preserved), leaving important behavioral ambiguity.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no fluff. Every word contributes to understanding the core action, making it highly efficient.

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

Completeness2/5

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

Given the tool has 7 parameters, nested objects, upsert semantics, and no output schema, the description is too sparse. It does not mention return values, how 'replace' handles field omissions, or the meaning of nested objects beyond the schema's brief descriptions, leaving the agent with insufficient context for correct invocation.

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

Parameters3/5

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

All 7 parameters have schema descriptions, providing high coverage. The tool description adds no parameter-level details, but since the schema already documents each parameter, 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.

Purpose5/5

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

The description clearly states a specific verb ('Create or replace') and resource ('tenant'), making the tool's purpose unambiguous. It distinguishes from read-only tools like get_tenant or list_tenants by indicating an upsert operation.

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

Usage Guidelines3/5

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

The description provides minimal context by defining what a tenant is, but it does not explicitly state when to use this tool versus alternatives or mention any exclusions. The usage is implied by the tool name and description, but no explicit guidance is given.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable name for the section
routing_optionsNoDefault channels for the section. Defaults to empty if omitted.
has_custom_routingNoWhether the section defines custom routing for its topics
Behavior4/5

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

Annotations indicate the tool is not read-only and not idempotent, but the description adds valuable context: 'The section id is generated and returned.' This discloses that the API generates the identifier and that the response includes it. It also implies the creation is a mutating, one-time action consistent with the annotations. No 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.

Conciseness5/5

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

The description is two short sentences that immediately state the main action, then provide the generated ID behavior and the next step. There is zero waste, and the structure is front-loaded with the core purpose.

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

Completeness4/5

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

For a simple create operation with no output schema, the description sufficiently covers the key return value ('section id') and the recommended follow-up action. It does not explain the full response structure, but the absence of an output schema makes the ID disclosure the most critical detail. The description is complete enough for an agent to invoke the tool correctly.

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

Parameters3/5

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

The input schema has 100% description coverage for all parameters. The description does not repeat parameter details, which is appropriate since the schema already provides semantics for name, routing_options, and has_custom_routing. However, it adds no additional meaning beyond the schema, so it earns the baseline score for high coverage.

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

Purpose5/5

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

The description clearly states the tool's action: 'Create a preference section in your workspace.' It also distinguishes itself from the sibling tool by mentioning 'Add topics afterwards with create_preference_topic.' The detail that 'the section id is generated and returned' further clarifies the tool's purpose and behavior.

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

Usage Guidelines4/5

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

The description provides clear usage context by indicating this tool is the first step in creating a preference section, followed by adding topics with create_preference_topic. It implies when to use this tool (initial creation) but does not explicitly mention when not to use alternatives like replace_preference_section. This is sufficient for basic guidance.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable name for the preference topic
section_idYesId of the preference section to create the topic in
topic_dataNoArbitrary metadata associated with the topic
default_statusYesDefault subscription status applied when a recipient has not set their own
routing_optionsNoDefault channels delivered for this topic. Defaults to empty if omitted.
allowed_preferencesNoPreference controls a recipient may customize for this topic
include_unsubscribe_headerNoWhether to include a list-unsubscribe header on emails for this topic
Behavior4/5

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

Annotations only indicate readOnlyHint=false and idempotentHint=false. The description adds valuable behavioral details: the topic id is generated and returned, and a 404 error occurs if the section does not exist. This goes beyond the minimal annotation info.

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

Conciseness5/5

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

Two concise sentences front-load the core action, then cover return value and error behavior. No extraneous words or redundancy with schema/annotations.

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

Completeness4/5

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

With 7 parameters and no output schema, the description covers the essential operation, return, and error case. It does not mention optional parameter behavior, but the schema fills those gaps, making it complete enough for this simple create operation.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are fully documented. The description adds no extra parameter-level meaning beyond the schema, which is consistent with the baseline of 3.

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

Purpose5/5

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

The description clearly states a specific verb ('Create'), resource ('subscription preference topic'), and scope ('inside a section'). It also distinguishes from sibling tools like create_preference_section by clarifying the parent-child relationship.

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

Usage Guidelines4/5

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

The description explicitly notes that the section must already exist (404 if not), implying the correct prerequisite. It provides clear context for when to use this tool, though it does not explicitly name alternatives or exclusions.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasNoShort alias for referencing this provider
titleNoDisplay name for this provider configuration
providerYesProvider key from the catalog (e.g. sendgrid, twilio, firebase-fcm)
settingsNoProvider-specific settings (API keys, credentials, etc.)
Behavior4/5

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

Beyond annotations (readOnlyHint=false, idempotentHint=false), the description discloses a significant behavioral consequence: configurations can be referenced by routing strategies or notification templates, so mistakes can affect live sends. This adds valuable risk context that annotations alone do not provide.

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

Conciseness5/5

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

The description is three sentences long, front-loaded with the primary purpose, and every sentence earns its place. The warnings are concise and directly relevant to safe usage, with no redundant or extraneous content.

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

Completeness4/5

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

For a create tool with an object parameter and no output schema, the description provides sufficient context: what it does, a required validation step, and a risk warning. It does not mention return values, but this is not critical for successful invocation given the schema fully documents parameters.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds a constraint that the provider field must be a known Courier provider key, but the schema already says 'Provider key from the catalog,' making this only a minor reinforcement. No additional meaning is added for alias, title, or settings beyond what the schema provides.

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

Purpose5/5

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

The description opens with 'Create a new provider (integration) configuration'—a specific verb and resource that clearly distinguishes this from sibling tools like update_provider and list_providers. The mention of 'new' and 'create' makes 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.

Usage Guidelines4/5

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

The description provides clear contextual guidance: it tells the agent to confirm provider key and settings against list_provider_catalog before saving, and warns that mistakes can affect live sends. It does not explicitly contrast with update_provider, but the 'new' phrasing and the creation context imply the appropriate use case.

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

create_routing_strategyAInspect

Create a routing strategy defining how notifications are delivered across channels and providers.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable name for the routing strategy
tagsNoTags for categorization
routingYesRouting tree defining channel selection method and order
channelsNoPer-channel delivery configuration
providersNoPer-provider delivery configuration
descriptionNoDescription of the routing strategy
Behavior3/5

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

Annotations indicate readOnlyHint=false and idempotentHint=false, which align with the mutating 'Create' action. The description doesn't add contextual details such as uniqueness requirements, validation, or return behavior, but the annotations lower the bar and no 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.

Conciseness5/5

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

The description is a single, concise sentence that front-loads the action and resource. No unnecessary words or repetition.

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

Completeness3/5

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

The tool has a nested routing object and six parameters, but the schema covers these well. However, with no output schema, the description does not clarify what the tool returns or whether it requires existing channels/providers. This makes it adequate but not fully complete.

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

Parameters3/5

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

Schema description coverage is 100%, with each property including a description. The tool description adds a high-level purpose but no additional parameter-specific details. Thus, 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.

Purpose5/5

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

The description uses a specific verb 'Create' and identifies the resource as 'routing strategy' with clear scope: defining how notifications are delivered across channels and providers. It is distinct from sibling tools like replace_routing_strategy or archive_routing_strategy, as it focuses solely on creation.

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

Usage Guidelines2/5

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

No explicit guidance is provided on when to use this tool versus alternatives such as replace_routing_strategy or when prerequisites (e.g., existing channels/providers) must be met. The description only states what the tool does, not the context for its use.

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

delete_audienceB
DestructiveIdempotent
Inspect

Delete an audience by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
audience_idYesThe audience ID to delete
Behavior2/5

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

The description adds no behavioral context beyond the annotations. The destructiveHint and idempotentHint annotations already communicate the safety profile; the description merely restates the operation without disclosing consequences like permanence or cascading deletions.

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

Conciseness5/5

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

The description is a single sentence of six words, directly stating the action and target. No unnecessary words or redundancy.

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

Completeness4/5

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

For a one-parameter delete tool, the description, combined with the annotations, adequately conveys the operation and its destructive nature. However, it does not mention any return value or side effects, though the simplicity and annotations partially compensate.

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

Parameters3/5

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

The schema already covers audience_id with a clear description and 100% coverage, so the tool description adds no additional parameter meaning. The phrase 'by its ID' mirrors the schema's parameter description.

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

Purpose5/5

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

The description uses a specific verb 'Delete' with a clear resource 'audience' and identifies the targeting mechanism 'by its ID'. This distinguishes it from sibling delete tools like delete_brand and delete_list.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as update_audience or get_audience. There are no exclusions or context clues about prerequisites or circumstances.

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

delete_brandB
DestructiveIdempotent
Inspect

Delete a brand by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
brand_idYesThe brand ID to delete
Behavior2/5

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

The annotations already declare destructiveHint and idempotentHint, but the description adds no additional behavioral context such as permanence, cascading effects, or error behavior. The phrase 'by its ID' merely restates the parameter rather than revealing any new behavioral trait.

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

Conciseness4/5

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

The description is a single, front-loaded sentence with no redundant words. It is appropriately terse for a simple one-parameter delete operation, though it omits some contextual details that could be expected.

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

Completeness3/5

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

For a simple delete tool with a single parameter and annotations indicating destructiveness and idempotency, the description is minimally viable. However, it does not explain expected side effects or return behavior, so it falls short of fully complete contextual guidance.

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

Parameters3/5

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

Schema coverage is 100% with a descriptive parameter definition ('The brand ID to delete'). The description's 'by its ID' adds no meaning beyond what the schema already provides, 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.

Purpose5/5

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

The description clearly states a specific action ('Delete') on a specific resource ('a brand') with the required scope ('by its ID'). It is unambiguous and easily distinguished from sibling delete tools for other entities like delete_tenant or delete_list.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, no prerequisites, and no distinction from other deletion or archiving operations. It only implies usage for deleting a brand, which is already evident 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_listB
DestructiveIdempotent
Inspect

Delete a list by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYesThe list ID
Behavior2/5

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

The annotations already disclose that the operation is destructive and idempotent. The description adds no extra context (e.g., whether deletion is permanent, effect on subscribers, or reversibility), and merely restates the parameter use from the schema.

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

Conciseness5/5

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

The description is a single, focused sentence with no redundant words or filler. It is front-loaded with the verb and resource, making it easy to parse.

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

Completeness2/5

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

For a destructive operation, the description is extremely sparse. It does not explain consequences such as permanent deletion, impact on associated data, or any preconditions. The presence of a restore_list sibling hints at data recovery potential, but this is not addressed.

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

Parameters3/5

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

The input schema already fully describes the single required parameter 'list_id' with 100% coverage. The description's phrase 'by its ID' adds no semantic insight beyond what the schema provides, 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.

Purpose5/5

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 resource (a list) identified by ID. It distinguishes this tool from siblings like create_list, get_list, and list_lists, 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.

Usage Guidelines2/5

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 delete_audience or when to prefer restore_list. The usage is merely implied by the action itself, with no context or exclusions.

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

delete_profileA
DestructiveIdempotent
Inspect

Delete a user profile permanently.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesThe user ID to delete
Behavior3/5

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

Annotations already declare destructiveHint and idempotentHint. The description adds 'permanently', reinforcing irreversibility but not exceeding what the annotations imply. It does not disclose effects on related data or any auth requirements, but for a simple delete with annotation coverage, this is adequate.

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

Conciseness5/5

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

The description is a single clear sentence with no redundant words. Every word earns its place, conveying the action, resource, and permanence efficiently.

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

Completeness4/5

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

For a single-parameter delete tool with strong annotations, the description is sufficient. It lacks details on return value or error behavior, but the simplicity and clarity make it reasonably complete.

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

Parameters3/5

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

Schema coverage is 100%, and the parameter description 'The user ID to delete' is self-explanatory. The description does not add extra parameter meaning, so the baseline 3 applies.

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

Purpose5/5

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

The description uses a specific verb ('Delete'), names a clear resource ('user profile'), and adds 'permanently' to emphasize irreversibility. This distinguishes it from sibling tools like delete_audience or delete_list and makes the tool's function unambiguous.

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

Usage Guidelines4/5

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

The description provides clear context that this is the permanent deletion tool for user profiles. It does not explicitly mention alternatives or when-not-to-use, but the verb 'Delete' and resource 'user profile' are enough to convey primary usage.

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

delete_providerA
DestructiveIdempotent
Inspect

Delete a provider configuration. Returns 409 if the provider is still referenced by routing or notifications.

ParametersJSON Schema
NameRequiredDescriptionDefault
provider_idYesThe provider configuration ID to delete
Behavior4/5

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

Beyond the annotations (destructiveHint, idempotentHint), the description discloses a specific behavioral trait: the operation returns 409 if the provider is still referenced by routing or notifications, signaling a dependency check. Other behaviors like success response or reversibility are not detailed, but the key destructive constraint is captured.

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

Conciseness5/5

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

The description is two short, front-loaded sentences with zero waste: the first states the core action, the second adds a critical conflict condition. Every word earns its place.

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

Completeness4/5

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

For a single-parameter delete with annotations, the description covers the core action and the most important behavioral constraint (409 when referenced). It omits success-response details, but given the tool's simplicity and the presence of the 409 caveat, it is sufficiently complete.

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

Parameters3/5

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

The input schema already documents the only parameter (provider_id: 'The provider configuration ID to delete') with 100% coverage. The description adds no additional parameter meaning beyond the schema, so the baseline of 3 applies.

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

Purpose5/5

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 resource ('provider configuration'), which distinguishes it from sibling tools like create_provider, update_provider, get_provider, and list_providers. The added 409-on-referenced detail further specifies the tool's operational purpose.

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

Usage Guidelines3/5

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

The description implies when to use the tool (to remove a provider configuration) and the 409 note implies a precondition: references must be removed first. However, it does not explicitly state when not to use it or name alternatives (e.g., update_provider for modifications).

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

delete_tenantB
DestructiveIdempotent
Inspect

Delete a tenant by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
tenant_idYesThe tenant ID to delete
Behavior2/5

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

The description adds no behavioral context beyond the annotations. Annotations already convey destructive and idempotent hints, but the description omits details about permanence, cascading effects, or required permissions.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no superfluous words. It is concise and structured effectively.

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

Completeness4/5

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

For a simple single-parameter delete operation, the description plus annotations provide sufficient context for selection and invocation. However, it does not mention return values or irreversibility beyond the annotations, 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.

Parameters3/5

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

With 100% schema description coverage, the baseline is 3. The description adds no new parameter 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.

Purpose5/5

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

The description 'Delete a tenant by its ID' uses a specific verb and resource, clearly distinguishing it from sibling delete_* tools. It unambiguously states what the tool does.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. It only implies usage by its name and phrasing.

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

delete_tenant_preferenceA
DestructiveIdempotent
Inspect

Remove default notification preference for a topic from a tenant.

ParametersJSON Schema
NameRequiredDescriptionDefault
topic_idYesThe subscription topic ID
tenant_idYesThe tenant ID
Behavior3/5

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

Annotations already declare destructiveHint=true and idempotentHint=true. Description adds the scope (default notification preference for a topic from a tenant) but does not disclose side effects, irreversibility, or authorization requirements. 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.

Conciseness5/5

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

Single sentence, front-loaded with verb and object, no superfluous content.

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

Completeness4/5

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

For a simple delete operation with complete schema and annotations, the description adequately explains the purpose. It could mention side effects but overall sufficient for selection and invocation.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for both tenant_id and topic_id. The tool description adds no additional parameter semantics beyond the schema.

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

Purpose5/5

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

Description uses specific verb 'Remove' and resource 'default notification preference for a topic from a tenant', clearly distinguishing from sibling tools like update_tenant_preference and delete_user_preference_topic.

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

Usage Guidelines3/5

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

Usage is implied by the verb and resource, but no explicit guidance on when to use this over alternatives or prerequisites. It doesn't exclude user-level preferences or mention that this is tenant-level only.

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

delete_tenant_templateA
Destructive
Inspect

Delete a tenant notification template. Returns 204 on success, 404 if the template does not exist for this tenant.

ParametersJSON Schema
NameRequiredDescriptionDefault
tenant_idYesThe tenant ID that owns the template
template_idYesThe notification template ID to delete
Behavior4/5

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

Beyond the destructiveHint=true annotation, the description adds concrete behavioral details: it returns 204 on success and 404 if the template does not exist for the tenant. This clarifies expected outcomes and scoping, which is not present in the annotations.

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

Conciseness5/5

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

The description is a single, focused sentence followed by status codes. Every word adds value, and the most important action is stated first. No filler or redundancy.

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

Completeness4/5

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

For a simple delete operation, the description covers the primary success and error cases adequately. It does not mention irreversibility or side effects on related resources, but given the simplicity and the presence of destructiveHint, the information is reasonably complete. No output schema exists, so status codes are the key returned data.

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

Parameters3/5

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

The input schema provides complete descriptions for both parameters (tenant_id and template_id), achieving 100% coverage. The tool description adds no additional parameter information, so the baseline score of 3 is appropriate since the schema does the heavy lifting.

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

Purpose5/5

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

The description states a specific action: 'Delete a tenant notification template' – a clear verb+resource combination. It distinguishes itself from sibling tools like delete_tenant, archive_journey_template, and replace_tenant_template by targeting the exact resource.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives (e.g., archive vs delete, or replace). There are no prerequisites, exclusions, or explicit contexts. The only implicit signal is the delete verb, but the description does not help the agent decide between similar operations.

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

delete_user_list_subscriptionsA
DestructiveIdempotent
Inspect

Delete all list subscriptions for a user.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesThe user ID
Behavior3/5

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

The description confirms the destructive action, aligning with the destructiveHint=true annotation. It adds no additional behavioral context beyond the literal action, but the annotations already signal the key traits.

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

Conciseness5/5

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

One concise sentence that front-loads the verb and resource, with no wasted words.

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

Completeness4/5

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

For a simple single-parameter delete operation, the description and annotations provide sufficient context. The lack of an output schema is acceptable, as delete operations typically return nothing.

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

Parameters3/5

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

The input schema fully documents the single parameter user_id, and the description adds no extra semantic value beyond restating it as 'for a user.' With schema coverage at 100%, this is adequate.

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

Purpose5/5

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

The description uses a specific verb 'Delete' and clearly identifies the resource 'all list subscriptions for a user,' distinguishing it from sibling tools like get_user_list_subscriptions 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.

Usage Guidelines3/5

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

The description doesn't explicitly state when to use this tool versus alternatives like unsubscribe_user_from_list, though the scope is clear from 'all list subscriptions.' It lacks explicit exclusion or alternative guidance.

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

delete_user_preference_topicA
DestructiveIdempotent
Inspect

Delete a user's preference for a specific subscription topic, reverting it to the topic's default status.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesThe user ID
topic_idYesThe subscription topic ID
Behavior4/5

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

Annotations provide idempotentHint=true and destructiveHint=true. The description adds valuable context by explaining exactly what happens: the user's preference is removed and the topic falls back to its default status. This goes beyond the annotation flags and clarifies the postcondition.

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

Conciseness5/5

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

The description is a single, tightly worded sentence that starts with the action verb and includes the essential resource and outcome. No filler or redundant information is present.

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

Completeness4/5

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

For a simple two-parameter mutation with annotations for idempotency and destructiveness, the description covers the core semantics. It does not describe return values or error conditions, but the lack of an output schema and low complexity make this acceptable.

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

Parameters3/5

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

Schema description coverage is 100% for both parameters (user_id and topic_id), providing clear definitions. The description adds no additional parameter meaning, but since the schema fully explains them, the baseline 3 is appropriate.

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

Purpose5/5

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

The description uses the specific verb 'Delete' and names the exact resource: 'a user's preference for a specific subscription topic.' It also clarifies the semantic effect ('reverting it to the topic's default status'), which distinguishes it from update_user_preference_topic 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.

Usage Guidelines3/5

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

The description implies when to use it by stating the effect (revert to default), but it does not explicitly compare with alternatives like update_user_preference_topic or provide exclusion criteria. The usage context is clear but not fully defined.

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

delete_user_tokenA
DestructiveIdempotent
Inspect

Delete a specific push token for a user.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYesThe token identifier to delete
user_idYesThe user ID
Behavior3/5

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

Annotations already declare destructiveHint=true and idempotentHint=true. The description simply states 'Delete' without adding extra behavioral context such as reversibility, error handling, or side effects. It does not contradict annotations but also does not add value 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.

Conciseness5/5

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

A single 7-word sentence that is perfectly concise and front-loaded. No redundant information or filler.

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

Completeness5/5

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

For a simple delete operation with only two required parameters and no output schema, the description plus schema fully covers the necessary information. The low complexity and clear parameter details make this complete.

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

Parameters3/5

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

Schema coverage is 100% with both parameters described ('The user ID' and 'The token identifier to delete'). The tool description does not add additional meaning beyond the schema, which is sufficient for this simple case. Baseline of 3 applies.

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

Purpose5/5

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

The description uses a specific verb ('Delete'), resource ('push token'), and scope ('for a user'), clearly distinguishing it from sibling tools like patch_user_token or create_or_replace_user_push_token. It unambiguously names the operation and target.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, alternatives, or scenarios where this should be used, leaving the agent to infer from the name and siblings alone.

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.).

ParametersJSON Schema
NameRequiredDescriptionDefault
scopesNoPermission scopes for the token
user_idYesThe user ID to scope the token to
expires_inNoToken expiry duration (e.g. "1h", "2 days")1h
Behavior3/5

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

With annotations only declaring readOnlyHint=false and idempotentHint=false, the description carries the burden of explaining side effects. It mentions 'Generate' implying a write action, but does not clarify whether the token is persisted server-side, any required permissions, or rate limits. The safety profile is partly conveyed by annotations, but behavioral details are sparse.

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

Conciseness5/5

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

The description is two sentences with no redundant phrasing. It front-loads the primary function and then adds a brief use-case note, making it both concise and informative.

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

Completeness4/5

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

For a simple generation tool with no output schema, the description covers the core purpose and intended context. However, it does not explicitly state the return value (the JWT string), which would be helpful since there is no output schema to clarify this.

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

Parameters3/5

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

Schema coverage is 100%, with each parameter having a description. The tool description adds no additional parameter semantics beyond what the schema already 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.

Purpose5/5

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

The description clearly states a specific action ('Generate a JWT authentication token') and the resource ('for a user'), making the tool's purpose immediately obvious. It also specifies the use case ('client-side SDK auth (Inbox, Preferences, etc.)'), which helps distinguish it from sibling tools like push token or user token management.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool ('client-side SDK auth') and implicitly suggests it is for authentication tokens rather than other token types. It lacks explicit exclusion of alternatives, but given the absence of direct siblings, this is acceptable.

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

get_audienceA
Read-only
Inspect

Get an audience by its ID, including its filter definition.

ParametersJSON Schema
NameRequiredDescriptionDefault
audience_idYesThe audience ID
Behavior4/5

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

The readOnlyHint annotation already marks the operation as read-only, and the description adds context about the return value ('including its filter definition'), which goes beyond the annotation. No other behavioral traits are disclosed, but for a simple read operation this 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.

Conciseness5/5

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

The description is a single concise sentence that front-loads the action and includes the important detail about filter definition. No unnecessary words or repetition.

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

Completeness5/5

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

Given the tool's simplicity (one parameter, no output schema), the description is complete enough: it states what it does, how it identifies the audience, and what the response includes. The read-only annotation covers safety aspects.

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

Parameters3/5

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

The input schema already fully describes audience_id as 'The audience ID', and the description reinforces this with 'by its ID' without adding new meaning. With 100% schema description coverage, the description adds minimal value beyond the schema.

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

Purpose5/5

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

The description clearly states the tool gets an audience by ID, using the specific verb 'Get' with a specific resource and identifier. It also notes the return includes the filter definition, which distinguishes it from list_audiences and other sibling tools.

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

Usage Guidelines4/5

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

The description implies usage when you have an audience ID and need the full audience object. It does not explicitly mention alternatives like list_audiences, but the context is clear and 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_eventA
Read-only
Inspect

Get a specific audit event by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
audit_event_idYesThe audit event ID
Behavior3/5

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

The readOnlyHint annotation marks the operation as read-only, and the description's 'Get' is consistent. The description adds no extra details about return format, permissions, or error behavior, but for a simple getter with annotation coverage this is minimal but acceptable.

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

Conciseness5/5

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

Single sentence, direct, and front-loaded with the verb and resource. There is no filler, and every word contributes to the meaning.

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

Completeness4/5

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

For a simple single-parameter getter, the description is sufficiently complete to understand the tool's purpose. There is no output schema, but the lack of return-format detail is unlikely to block correct invocation. It could mention the relationship to list_audit_events, but this is not critical.

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

Parameters3/5

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

Schema description coverage is 100%, with audit_event_id fully described. The description's 'by its ID' adds no semantic detail beyond the schema. Parameter semantics are fully handled by the schema.

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

Purpose5/5

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

The description clearly states the action ('Get'), the resource ('specific audit event'), and the selection criterion ('by its ID'). This distinguishes it from list_audit_events and other get_* tools.

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

Usage Guidelines4/5

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

The need for an audit_event_id implies the tool is for fetching a single audit event when the ID is already known. It does not explicitly mention alternatives like list_audit_events for discovering IDs, but the scope is clear and no exclusions are stated.

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

get_brandA
Read-only
Inspect

Get a brand by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
brand_idYesThe brand ID
Behavior3/5

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

The description aligns with the readOnlyHint annotation ('Get' is a read operation) and contains no contradiction. However, it adds no behavioral context beyond the annotation—no mention of what is returned, not-found behavior, or any edge cases. With annotations already covering the safety profile, the description provides 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.

Conciseness5/5

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

A single, direct sentence communicates the entire purpose. There is no redundancy or filler, making it an appropriate model of conciseness for a simple retrieval tool.

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

Completeness4/5

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

For a low-complexity tool with one parameter, a readOnlyHint, and no output schema, the description is functionally sufficient to select and invoke correctly. It lacks details like return value shape or error handling, but those are not strictly necessary for a simple ID-based getter.

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

Parameters3/5

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

Schema coverage is 100%, and the brand_id parameter already carries a basic description in the schema. The description's 'by its ID' reinforces that the parameter identifies the brand but adds no new semantic detail such as format, constraints, or potential values. Baseline 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.

Purpose5/5

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

The description 'Get a brand by its ID' uses a specific verb ('Get') and resource ('brand') with a clear identifier qualifier. It distinguishes itself from siblings like list_brands, create_brand, update_brand, and delete_brand by specifying retrieval of a single entity by ID.

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

Usage Guidelines3/5

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

No explicit guidance is given about when to use this tool versus alternatives. The phrase 'by its ID' implies this is for single-brand retrieval, but there is no mention of when not to use it or that list_brands should be used for searching. Usage is only implied, not articulated.

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

get_bulk_jobA
Read-only
Inspect

Get the status of a bulk job.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesThe bulk job ID
Behavior3/5

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

The annotation readOnlyHint=true already communicates that this is a read-only operation, and the description aligns with that by saying 'Get'. However, the description adds no further behavioral context such as whether it returns only the status or additional job details.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no extraneous words. It delivers the essential information efficiently.

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

Completeness4/5

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

Given the simple nature of the tool (one required parameter, read-only annotation, no output schema), the description is nearly complete. It could mention the possible status values or response shape, but the plain description is adequate for understanding the tool's purpose and invocation.

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

Parameters3/5

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

Schema description coverage is 100% for the single parameter job_id, which is already documented as 'The bulk job ID'. The description adds no additional meaning beyond what the schema provides, 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.

Purpose5/5

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

The description uses the specific verb 'Get' with the resource 'status of a bulk job', clearly distinguishing this from sibling tools like create_bulk_job, run_bulk_job, and list_bulk_users. It precisely states what the tool does.

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

Usage Guidelines3/5

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

The description implies that this tool is used to check the status of a bulk job, but it does not explicitly state when to use it instead of alternatives, such as after creating or running a bulk job. There are no exclusions or use-case context provided.

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

get_journeyA
Read-only
Inspect

Get a journey by ID. Pass version=draft to retrieve the working draft, or version=vN for a historical version. Defaults to published.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to retrieve: "draft", "published" (default), or a version string like "v001"
journey_idYesThe journey template ID
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the read-only nature is known. The description adds useful behavioral details by explaining version selection and the default to published, which goes beyond the annotation. 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.

Conciseness5/5

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

Two concise sentences front-load the main action and provide necessary version detail without waste. Every word earns its place.

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

Completeness4/5

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

For a simple get-by-id tool with one optional parameter, the description is complete enough. It omits return format details, but no output schema exists and the operation is straightforward; the provided information suffices.

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

Parameters4/5

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

Input schema already documents both parameters with 100% coverage. The description adds value by clarifying version='draft'/'vN' semantics and the default behavior, enriching the schema descriptions.

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

Purpose5/5

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

Clearly states the function: 'Get a journey by ID' with specific verb+resource. Distinguishes from sibling tools like list_journeys by emphasizing retrieval of a single journey and mentioning version variants.

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

Usage Guidelines3/5

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

Provides version usage guidance ('Pass version=draft...') but does not explicitly contrast with alternatives or state when not to use this tool. The context implies it is for fetching specific journeys, yet exclusions/alternatives are absent.

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

get_journey_templateA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to retrieve: "draft", "published" (default), or "vN"
journey_idYesThe journey template ID that owns this notification
notification_idYesThe notification template ID
Behavior4/5

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

With readOnlyHint=true already annotating the safe read operation, the description adds valuable behavioral context about version handling: the draft version is required before publication, and the default is published. This goes beyond the annotation without contradiction.

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

Conciseness5/5

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

The description is two concise sentences, front-loads the core purpose, and every word adds value. There is no fluff or repetition of schema details.

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

Completeness4/5

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

For a simple read-only getter with 3 parameters and no output schema, the description covers the key complexity (version behavior). It does not describe return format, but the tool is straightforward and the annotations already indicate it is read-only. Slight gap on alternative usage, but overall adequate.

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

Parameters4/5

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

Schema coverage is 100%, providing the baseline of 3. The description enhances the 'version' parameter by explaining when to use draft vs published, which is not fully captured in the schema. It adds semantic nuance about publication status, elevating it above baseline.

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

Purpose5/5

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

The description clearly states the tool retrieves a journey-scoped notification template by notification ID, which is a specific verb+resource combination. It also distinguishes from siblings like get_journey_template_content or get_notification by emphasizing 'journey-scoped' and 'template'.

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

Usage Guidelines4/5

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

It provides clear context on when to use version=draft (required before publication) and indicates the default is published. However, it does not explicitly compare to alternatives like get_journey_template_content or get_notification, so it lacks explicit exclusion guidance.

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

get_journey_template_contentA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to retrieve: "draft", "published" (default), or a version string like "v001"
journey_idYesThe journey template ID that owns this notification
notification_idYesThe notification template ID
Behavior4/5

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

The description adds version behavior (defaults to published, draft/historical selection) beyond the readOnlyHint annotation, which is helpful. It does not contradict the annotation and gives useful context about what the tool returns for different version inputs.

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

Conciseness5/5

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

Two sentences, front-loaded with the core purpose, followed by precise version guidance. No wasted words; every phrase contributes to understanding the tool's behavior.

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

Completeness4/5

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

For a simple fetch operation with read-only annotation and well-documented schema, the description covers purpose, version semantics, and default behavior. It could mention what 'elemental content' includes or response format, but the absence is not critical given the clear tool name and schema coverage.

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

Parameters4/5

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

Schema already documents all parameters (100% coverage), so baseline is 3. The description adds meaningful nuance to the 'version' parameter by explaining the exact semantics of 'draft', 'vN', and the published default, which the schema description states more cryptically.

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

Purpose5/5

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

The description uses the specific verb 'Fetch' and identifies the resource as 'elemental content of a journey-scoped notification template', which clearly distinguishes it from sibling tools like get_notification_content or get_journey_template. The scope is explicit.

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

Usage Guidelines4/5

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

Provides clear usage context for version selection (draft, historical vN, or default published), which is direct and actionable. It does not explicitly name alternative tools or exclusion criteria, but the 'journey-scoped' qualifier implies when this tool is appropriate versus non-journey content fetchers.

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

get_listA
Read-only
Inspect

Get a list by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYesThe list ID
Behavior3/5

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

The readOnlyHint annotation already declares this as a read-only operation, and the description's 'Get' verb aligns. No additional behavioral context (e.g., error handling, return format) is provided, but given the 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.

Conciseness5/5

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

The description is a single concise sentence that communicates the essential purpose without any wasted words.

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

Completeness4/5

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

For a simple get-by-ID tool with full schema coverage and a safety annotation, the description is sufficient. It lacks a note about sibling operations or return details, but the core usage is clear and unambiguous.

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

Parameters3/5

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

The single parameter list_id is fully described in the schema with 100% coverage. The description adds no extra meaning beyond what the schema already provides, which is acceptable given high schema coverage.

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

Purpose5/5

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

The description clearly states the operation (get) and resource (list) with the required ID parameter. It is distinct from sibling tools like list_lists (which lists all lists) and get_list_subscribers (which retrieves subscribers).

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

Usage Guidelines3/5

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

The description implies usage when a specific list ID is known, but provides no explicit guidance on when to use this versus alternatives such as list_lists or restore_list. It lacks exclusions or alternative tool hints.

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

get_list_subscribersA
Read-only
Inspect

Get all subscribers of a list.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPagination cursor
list_idYesThe list ID
Behavior3/5

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

The annotation readOnlyHint=true already communicates that this is a safe read operation, and the description is consistent with this. However, the description adds no extra behavioral context (e.g., pagination behavior via cursor, possible empty results, or ordering). It merely restates the tool's name, so it provides minimal added transparency beyond the annotation.

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

Conciseness5/5

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

The description is a single concise sentence ('Get all subscribers of a list.') with no filler, redundancy, or irrelevant details. It is appropriately sized for the simplicity of the tool.

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

Completeness4/5

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

The tool is simple: two parameters, one required, no output schema, and a read-only annotation. The description adequately states the core function, and the schema covers parameters. The only minor gap is that it doesn't explicitly mention pagination, but that is inferred from the cursor parameter. Given the low complexity, the description is sufficiently complete.

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

Parameters3/5

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

Schema coverage is 100%, with both parameters (list_id and cursor) described. The tool description adds no additional parameter semantics beyond what the schema already provides, so the baseline of 3 applies.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Get all subscribers of a list.' It clearly indicates the operation and the target resource, distinguishing it from sibling tools 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.

Usage Guidelines3/5

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

The description implies usage (use when you need all subscribers of a given list) but does not explicitly mention alternatives or exclusions. No guidance is given about when to use this versus list_audience_members or get_user_list_subscriptions, so it relies on the name for context.

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

get_messageA
Read-only
Inspect

Get the full details and status of a single message by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesThe message ID to retrieve
Behavior4/5

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

Annotations declare readOnlyHint=true, and the description aligns by using 'Get'. It adds useful context about return scope ('full details and status'), which goes beyond the annotation. No contradictions.

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

Conciseness5/5

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

A single, front-loaded sentence that conveys purpose and key qualifier without waste.

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

Completeness4/5

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

For a simple single-ID retrieval tool with no output schema, the description adequately conveys what is returned ('full details and status'). It is complete for the tool's complexity.

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

Parameters3/5

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

The schema covers 100% of parameter semantics with 'The message ID to retrieve'. The description's 'by its ID' adds no new 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.

Purpose5/5

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

The description clearly states the verb (Get), resource (message), and scope (full details and status, by ID). This distinguishes it from sibling tools like get_message_content (content only) and get_message_history (history).

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

Usage Guidelines4/5

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

It implies the primary use case: retrieving a single message by ID. It doesn't explicitly name alternatives or exclusions, but the context is clear enough that an agent would know when to choose this over list_messages or get_message_content.

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

get_message_contentA
Read-only
Inspect

Get the rendered content (HTML, text, subject) of a previously sent message.

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesThe message ID
Behavior3/5

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

The readOnlyHint annotation already indicates a safe read operation. The description adds that content is 'rendered' and limited to 'previously sent' messages, which is useful scoping, but does not disclose error behavior, authentication needs, or rate limits. No contradiction with annotations.

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

Conciseness5/5

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

The description is a single sentence that is direct and informative, with no filler or redundant information. It efficiently conveys the purpose and scope.

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

Completeness4/5

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

For a simple getter with one required parameter and no output schema, the description sufficiently indicates the return contents (HTML, text, subject). It lacks details on return structure or edge cases, 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.

Parameters3/5

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

The schema has 100% coverage with a basic description for message_id. The tool description adds the context that the ID refers to a previously sent message, which provides some semantic value beyond the schema, but does not explain the format or how to obtain the ID.

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

Purpose5/5

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

The description clearly states the specific verb 'Get' and the resource being retrieved: 'rendered content (HTML, text, subject) of a previously sent message'. This distinguishes it from related tools like get_message (metadata) and get_message_history (history).

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

Usage Guidelines3/5

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

The phrase 'previously sent message' implies this tool is for sent messages rather than drafts, but it does not explicitly name alternatives like get_message for metadata or when not to use this tool. Usage context is implied but not elaborated.

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

get_message_historyA
Read-only
Inspect

Get the event history for a message, showing each step in the delivery pipeline (enqueued, sent, delivered, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by event type
message_idYesThe message ID
Behavior3/5

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

Annotations include readOnlyHint=true, so the agent knows this is a safe read operation. The description adds that it shows each step in the delivery pipeline, clarifying the nature of the returned data. However, it does not disclose details like ordering, timestamp inclusion, or pagination, which is a minor gap beyond the annotation.

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

Conciseness5/5

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

The description is a single, well-structured sentence that front-loads the core action ('Get the event history for a message') and immediately clarifies the output with examples. No unnecessary words or content.

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

Completeness5/5

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

Given the tool's simplicity (2 params, no output schema) and the presence of readOnlyHint and complete schema descriptions, the description sufficiently covers the tool's purpose and expected return content. The delivery pipeline examples provide enough context for an agent to understand what this tool returns.

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

Parameters3/5

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

Schema description coverage is 100%: both message_id and type have descriptive text. The description adds no parameter-level information, but the schema already provides the necessary meaning. Baseline 3 is appropriate given the complete schema coverage.

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

Purpose5/5

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

The description clearly states the tool retrieves the event history for a message, with specific examples of delivery pipeline steps (enqueued, sent, delivered). The verb 'Get' and resource 'event history for a message' are specific, and it is readily distinguishable from sibling tools like get_message or list_messages.

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

Usage Guidelines3/5

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

The description implies usage for inspecting the delivery pipeline of a message but does not explicitly state when to use this tool versus alternatives or provide exclusions. It gives context (showing each step) but lacks explicit guidance on choosing it over related message tools.

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

get_notificationA
Read-only
Inspect

Retrieve a notification template by ID. Optionally request draft, published, or a version such as v001.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to retrieve: draft, published, or a string like v001
notification_idYesThe notification template ID
Behavior2/5

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

The annotation already declares readOnlyHint=true, covering safety. The description's versioning detail ('draft, published, or a version such as v001') is already present in the schema's version parameter description, so the description adds no new behavioral context such as default behavior, response format, or 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.

Conciseness5/5

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

Two concise sentences, front-loaded with the main action, no filler words. Every sentence contributes to understanding the tool's purpose and option.

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

Completeness3/5

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

The tool is simple with a clear purpose and full schema coverage. However, no output schema exists, and the description does not mention default behavior (e.g., what happens if version is omitted) or the return format, leaving some gaps. Adequate but not fully complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters. The description restates the version parameter's possible values without adding new meaning. Baseline 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.

Purpose5/5

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

The description clearly states the action and resource: 'Retrieve a notification template by ID.' It also distinguishes from sibling tools like get_notification_content and get_notification_draft_content by mentioning optional draft/published/version retrieval, making the scope specific.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool (retrieving a specific notification template by ID, optionally with a version). It does not explicitly mention alternatives or exclusions, but the purpose is unambiguous and the optional versioning adds clarity.

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

get_notification_contentA
Read-only
Inspect

Get the published content blocks of a notification template.

ParametersJSON Schema
NameRequiredDescriptionDefault
notification_idYesThe notification template ID
Behavior3/5

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

The readOnlyHint annotation already signals a safe read operation. The description adds the distinction between published and draft content but does not disclose what a 'content block' consists of, return format, or any potential edge cases. Given the annotation covers safety, this is adequate but not rich.

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

Conciseness5/5

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

The description is a single, focused sentence with no filler or redundancy. It immediately conveys the tool's action and object, earning full marks for conciseness.

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

Completeness4/5

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

For a simple read-only getter with one parameter, the description is nearly complete. It clarifies the 'published' aspect, which is a key contextual distinction. The absence of an output schema is somewhat mitigated by the tool's simplicity, though more detail on 'content blocks' would improve completeness.

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

Parameters3/5

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

The input schema already provides 100% coverage for the single parameter ('notification_id' described as 'The notification template ID'). The description adds no further detail about the parameter, so it meets the baseline without enhancing understanding.

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

Purpose5/5

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

The description clearly states the tool retrieves 'published content blocks' of a notification template, using a specific verb and resource. The term 'published' distinguishes it from the sibling get_notification_draft_content, making its purpose unmistakable.

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

Usage Guidelines4/5

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

The description provides clear context by specifying 'published content blocks', implying this is for published templates and that a draft variant exists. However, it does not explicitly name alternatives or state when not to use it, so it falls short of full explicit guidance.

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

get_notification_draft_contentA
Read-only
Inspect

Get the draft (unpublished) content blocks of a notification template.

ParametersJSON Schema
NameRequiredDescriptionDefault
notification_idYesThe notification template ID
Behavior3/5

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

The readOnlyHint annotation already informs the agent this is a safe read operation. The description adds minimal context beyond the tool name ('draft (unpublished)'), but does not describe any additional behavioral aspects such as return format, pagination, or auth requirements. With annotations covering the safety profile, this is adequate but not rich.

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

Conciseness5/5

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

The description is a single, clearly worded sentence that immediately conveys the tool's purpose without unnecessary words or repetition. It is perfectly concise and well-structured.

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

Completeness4/5

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

This is a simple one-parameter read tool with a clear name, useful annotation (readOnlyHint), and complete schema. The description clarifies the 'draft' aspect, and while there is no output schema, the meaning of 'content blocks' is self-explanatory. The tool is adequately specified for its complexity.

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

Parameters3/5

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

The schema provides a full description for the single parameter ('The notification template ID'), achieving 100% schema description coverage. The description adds no extra parameter semantics beyond what the schema already states, so baseline 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb 'Get' and identifies the resource as 'draft (unpublished) content blocks of a notification template', clearly distinguishing it from the sibling tool get_notification_content which likely retrieves published content. The intent is unambiguous.

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

Usage Guidelines4/5

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

The description provides clear context that this tool is for draft/unpublished content, implying it should be used when draft content is needed instead of published content. However, it does not explicitly name alternative tools or state when not to use it, so it falls short of a full 5.

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

get_preference_sectionA
Read-only
Inspect

Retrieve a preference section by id, including its topics.

ParametersJSON Schema
NameRequiredDescriptionDefault
section_idYesId of the preference section
Behavior3/5

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

Annotations already declare readOnlyHint: true, so the safety profile is known. The description adds that the response includes topics, which is beyond the schema, but it does not disclose other behaviors such as error conditions, pagination, or whether topics are returned inline. With annotations lowering the burden, this is adequate but not rich.

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

Conciseness5/5

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

The description is one concise sentence, front-loaded with the verb and resource, and contains no fluff. It fully conveys the tool's purpose in minimal words.

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

Completeness5/5

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

For a simple read-only getter with a single parameter, the description is complete. It covers the action, resource, identifier, and expected content (including topics). No output schema is given, but the description suffices given the tool's simplicity.

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

Parameters3/5

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

The schema already provides 100% coverage for the single parameter, including its description ('Id of the preference section'). The tool description does not add further meaning, so the baseline of 3 applies.

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

Purpose5/5

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

The description clearly specifies the verb 'Retrieve', the resource 'preference section', and the identifier-based access ('by id'), while adding that topics are included. This differentiates it from siblings like list_preference_sections (which lists all) and get_preference_topic (which retrieves a single topic).

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

Usage Guidelines4/5

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

The description implies usage when you have a specific section_id and need the section with its topics. There is no explicit exclusion of alternatives, but the 'by id' phrasing gives clear context. While it does not name sibling tools, it is sufficient for a simple getter in the presence of many sibling tools.

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

get_preference_topicA
Read-only
Inspect

Retrieve a topic within a section. Returns 404 if the section or topic does not exist, or the topic belongs to a different section.

ParametersJSON Schema
NameRequiredDescriptionDefault
topic_idYesId of the subscription preference topic
section_idYesId of the preference section
Behavior4/5

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

The readOnlyHint annotation already signals a safe read operation. The description adds valuable context by specifying the 404 behavior and the requirement that the topic must belong to the given section, which is a meaningful validation detail. It does not cover auth or rate limits, but for a simple read tool this 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.

Conciseness5/5

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

The description is a single, well-structured sentence that fronts the core purpose and then adds a concise clarification about the 404 condition. No wasted words, and it is immediately scannable.

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

Completeness4/5

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

For a simple retrieval tool, the description covers the key behavioral nuance (section-topic relationship and error case) and the parameters are fully documented in the schema. Since there is no output schema, the description does not need to detail return values, and the 404 condition gives sufficient context for an agent to anticipate failure modes.

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

Parameters3/5

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

Schema description coverage is 100%, with both topic_id and section_id having clear descriptions in the schema itself. The tool description adds no further parameter semantics, so the baseline score of 3 is appropriate given the schema already handles parameter explanation.

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

Purpose5/5

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

The description clearly states the action ('Retrieve a topic within a section') and the resource (topic within a preference section). It distinguishes from sibling tools like get_user_preference_topic (which retrieves by user) and list_preference_topics (which lists topics) by emphasizing the section context. The 404 condition also clarifies the expected scope.

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

Usage Guidelines3/5

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

The description implies usage by indicating this tool retrieves a specific topic using both section_id and topic_id. However, it does not explicitly state when to use this over alternatives such as list_preference_topics or get_user_preference_topic. No exclusions or alternative conditions are provided.

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

get_providerA
Read-only
Inspect

Fetch a single provider configuration by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
provider_idYesThe provider configuration ID
Behavior3/5

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

The readOnlyHint=true annotation already declares this is a safe read operation, and the description is consistent with that. However, the description adds no additional behavioral context such as error handling, return format, or what happens if the ID doesn't exist. It doesn't contradict annotations but adds minimal extra value.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler words. Every word contributes to the meaning, making it highly efficient.

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

Completeness4/5

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

For a simple get-by-ID tool with one parameter and a readOnly annotation, the description adequately communicates the operation. It doesn't mention the response structure or not-found behavior, but these are less critical given the simplicity and the presence of sibling tools that establish context.

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

Parameters3/5

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

The schema provides 100% coverage for the single parameter with a clear description ('The provider configuration ID'). The description adds no further semantic detail beyond restating 'by ID', so the schema carries the parameter documentation burden.

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

Purpose5/5

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

The description 'Fetch a single provider configuration by ID' uses a specific verb ('fetch') and resource ('provider configuration') with a clear scope ('by ID'). It distinguishes itself from siblings like list_providers, create_provider, update_provider, and delete_provider.

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

Usage Guidelines3/5

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

The description implies usage when a single provider is needed by ID, but it doesn't explicitly mention alternatives such as list_providers for listing or when not to use this tool. Usage guidance is implied rather than stated.

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

get_routing_strategyA
Read-only
Inspect

Retrieve a routing strategy by ID. Returns the full entity including routing, channels, and providers.

ParametersJSON Schema
NameRequiredDescriptionDefault
routing_strategy_idYesThe routing strategy ID (rs_ prefix)
Behavior3/5

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

Annotations already declare readOnlyHint=true, and the description's 'Retrieve' is consistent. It adds some context by mentioning the response includes 'routing, channels, and providers,' which helps set expectations, but it does not disclose any deeper behavioral traits such as error handling, rate limits, or permission requirements. No contradiction with annotations.

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

Conciseness5/5

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

The description is a single, well-structured sentence that front-loads the verb and resource, with no filler words. Every word contributes to the meaning.

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

Completeness5/5

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

Given the tool's simplicity (one parameter, read-only, no output schema), the description is sufficient. It states the primary purpose and gives a high-level overview of the return content, which compensates for the lack of an output schema. Nothing critical is missing.

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

Parameters3/5

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

The schema has 100% coverage for the single parameter, with a clear description ('The routing strategy ID (rs_ prefix)'). The tool description adds no additional parameter-level meaning beyond what the schema already provides, so the baseline of 3 applies.

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

Purpose5/5

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

The description clearly states the action ('Retrieve') and the resource ('a routing strategy by ID'), and distinguishes it from siblings by specifying it returns the 'full entity including routing, channels, and providers.' This makes the tool's purpose unambiguous and distinct from list_routing_strategies or other get_* tools.

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

Usage Guidelines3/5

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

The description implies usage when a routing strategy ID is available, but it does not explicitly state when to use this versus alternatives like list_routing_strategies, nor does it provide exclusions or prerequisites. The 'by ID' phrasing gives some clue, but no direct guidance is given.

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

get_tenantB
Read-only
Inspect

Get a tenant by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
tenant_idYesThe tenant ID
Behavior2/5

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

The description adds no behavioral context beyond the readOnlyHint annotation. It does not disclose error behavior (e.g., not-found), return format, or any access requirements. With annotations present, the bar is lower, but the description still fails to add value beyond stating the operation.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with zero filler. It is appropriately concise for such a simple operation and earns its place.

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

Completeness4/5

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

The tool is a trivial single-parameter read operation with readOnlyHint and complete schema coverage. No output schema exists, but for a 'get by ID' operation the return is implied. The description is sparse but adequate; minor extra detail like error handling would improve completeness.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description simply repeats the parameter's existence ('by its ID') without adding format, constraints, or examples. It neither enhances nor detracts from the schema's minimal description.

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

Purpose4/5

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

The description clearly states the verb ('Get') and resource ('tenant') and notes retrieval is by ID. However, it doesn't explicitly distinguish from related tools like list_tenants or get_tenant_template, though the resource name and 'by its ID' make it reasonably clear.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as list_tenants for scanning tenants or get_tenant_template for tenant templates. There is no mention of when-not-to-use or prerequisites.

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

get_tenant_templateB
Read-only
Inspect

Get a tenant notification template association by template ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
tenant_idYesThe tenant ID
template_idYesThe template ID
Behavior3/5

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

Annotations already provide readOnlyHint=true, so the description needn't state safety. It adds the nuance that this retrieves an 'association' rather than the template content or a version, which clarifies the resource kind. However, it doesn't disclose return format or any other behaviors.

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

Conciseness5/5

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

Single sentence with no redundancy. It is front-loaded with the verb and provides the essential qualification in a compact phrase.

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

Completeness3/5

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

For a simple getter with two documented parameters and readOnly annotation, the description is minimally adequate. However, it lacks information about what the association contains or what the response looks like, and doesn't guide selection among sibling getters.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for both tenant_id and template_id. The description doesn't add parameter meaning beyond the schema, so baseline 3 is appropriate.

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

Purpose4/5

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

The description uses a specific verb ('Get') and resource ('tenant notification template association') with a clear lookup key (template ID). It distinguishes from sibling tools like list_tenant_templates and get_tenant_template_version, though it doesn't explicitly mention them.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like get_tenant_template_version or list_tenant_templates. The description only states what it does, not when to choose it.

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

get_tenant_template_versionA
Read-only
Inspect

Get a specific version of a tenant notification template (e.g. latest, published, or v1).

ParametersJSON Schema
NameRequiredDescriptionDefault
versionYesVersion identifier (latest, published, or v-prefixed)
tenant_idYesThe tenant ID
template_idYesThe template ID
Behavior3/5

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

The readOnlyHint annotation already declares this is a safe read operation. The description adds modest context by naming example version values, but does not disclose error handling, default behavior, or return format. It does not contradict the annotation.

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

Conciseness5/5

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

A single, tightly written sentence that conveys the tool's purpose and version examples without unnecessary words. Information is front-loaded with 'Get a specific version'.

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

Completeness4/5

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

For a simple getter with three straightforward parameters and a read-only annotation, the description is adequate. It could mention return values or error conditions, but the low complexity makes the lack of such details acceptable.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description's version examples ('latest, published, or v1') slightly reinforce the schema's 'Version identifier' description, but add no new meaning beyond the schema's own documentation.

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

Purpose5/5

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

The description clearly states the action ('Get') and the resource ('a specific version of a tenant notification template'), with concrete examples of version values ('latest, published, or v1'). This distinguishes it from siblings like get_tenant_template and 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.

Usage Guidelines3/5

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

The description implies usage when a specific version is needed, but does not explicitly contrast with alternatives or state when not to use it. No exclusions or alternative tool names are mentioned, so guidance is minimal but not entirely absent.

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

get_translationA
Read-only
Inspect

Get a translation for a specific locale (e.g. "en_US", "fr_FR").

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNoTranslation domain (only "default" is supported currently)default
localeYesLocale code (e.g. en_US, fr_FR)
Behavior3/5

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

The annotation readOnlyHint=true already informs the agent this is a safe read operation. The description adds locale-specific scoping and examples, but no additional behavioral details like error handling or fallback behavior. With annotations covering safety, this is baseline.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that conveys the purpose without wasted words. It is appropriately concise for a simple retrieval tool.

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

Completeness5/5

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

Given the low complexity (2 parameters, full schema coverage, readOnlyHint annotation), the description is sufficient. The verb 'Get' implies the return value, and the schema covers all inputs, so the overall information is complete.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters (locale, domain) are documented. The description repeats the locale examples from the schema, adding no significant new 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.

Purpose5/5

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

The description states 'Get a translation for a specific locale' with a clear verb ('Get') and resource ('translation'), and includes examples of locale codes. It effectively distinguishes this read tool from sibling update_translation.

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

Usage Guidelines4/5

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

The description provides clear context: use this tool when you need a translation for a specific locale, with examples. However, it does not explicitly mention alternatives or when not to use it, so it falls short of a 5.

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

get_user_list_subscriptionsA
Read-only
Inspect

Get all list subscriptions for a user.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPagination cursor
user_idYesThe user ID
Behavior3/5

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

The readOnlyHint annotation already declares this as a read-only operation. The description adds 'all', which may imply a complete list, but the presence of a cursor parameter suggests pagination could be required. No additional behavioral context is provided beyond the annotation.

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

Conciseness4/5

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

The description is a single, efficient sentence with no waste. However, it essentially restates the tool name with minor expansion ('for a user'), so it's concise but doesn't add significant informational value beyond the name.

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

Completeness3/5

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

For a simple read-only tool with an annotated schema, the description is minimally adequate. Yet, with no output schema and a pagination cursor parameter, the description does not clarify return format or pagination behavior, leaving some ambiguity around the promise of 'all' subscriptions.

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

Parameters3/5

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

Schema description coverage is 100% with both user_id and cursor having descriptions. The tool description does not add any extra parameter semantics beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

The description 'Get all list subscriptions for a user' clearly states the action (get), the resource (list subscriptions), and the target (a user). It distinguishes itself from sibling tools like get_list_subscribers (which fetches subscribers of a list) and delete_user_list_subscriptions (which deletes).

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

Usage Guidelines3/5

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

The description implies the usage context (when you need a user's list subscriptions) but does not provide explicit alternatives or when-not-to-use guidance. No mention of sibling tools like get_list_subscribers for the inverse relationship.

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

get_user_preferencesA
Read-only
Inspect

Get a user's notification preferences (subscriptions, opt-outs, channel preferences).

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesThe user ID
tenant_idNoScope preferences to a specific tenant
Behavior4/5

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

The readOnlyHint annotation already declares this is safe read operation. The description adds context about what the preferences include, going beyond the annotation. It does not add details about rate limits or pagination, but that is not critical given the read-only nature.

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

Conciseness5/5

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

The description is a concise single sentence that clearly conveys the tool's purpose without unnecessary words or repetition. It is well-structured and front-loaded.

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

Completeness4/5

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

For a simple read-only getter with two parameters, the description adequately explains what the tool returns. It could mention whether results are paginated or if tenant_id is required for multi-tenant setups, but overall it is complete enough for effective invocation.

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

Parameters3/5

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

The schema already provides descriptions for both parameters (user_id and tenant_id) with 100% coverage, so the description does not need to compensate. The description does not add additional meaning beyond what the schema already 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.

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'a user's notification preferences', and explicitly lists the types of preferences (subscriptions, opt-outs, channel preferences). This distinguishes it from sibling tools like get_user_preference_topic, which focuses on a single topic.

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

Usage Guidelines3/5

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

The description implies when to use this tool (whenever you need a user's notification preferences) but provides no explicit guidance on when to prefer it over sibling tools such as get_user_preference_topic or get_preference_section. No exclusions or alternatives are mentioned.

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

get_user_preference_topicA
Read-only
Inspect

Get a user's preference for a specific subscription topic.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesThe user ID
topic_idYesThe subscription topic ID
tenant_idNoScope to a specific tenant
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds minimal context beyond stating the specific topic, but does not disclose return format or behavior when the preference is missing. With annotations, the bar is lower, and the description adds only slight value.

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

Conciseness5/5

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

The description is a single concise sentence that front-loads the verb and resource. No wasted words, clearly understandable.

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

Completeness4/5

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

The tool is simple, with well-documented parameters and a readOnlyHint annotation. The description adequately explains the tool's purpose, but the absence of an output schema leaves return format unspecified. However, for a simple getter, the description is mostly complete.

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

Parameters3/5

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

Schema description coverage is 100% with all three parameters (user_id, topic_id, tenant_id) having descriptions. The description does not add syntax details but reinforces that topic_id refers to a subscription topic, which the schema already conveys. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'Get' with the resource 'user's preference' for a specific subscription topic, distinguishing it from sibling tools like get_user_preferences (plural) and get_preference_topic (topic definition). It is specific and unambiguous.

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

Usage Guidelines3/5

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

The description implies when to use this tool (when needing a single preference for a user and topic) but provides no explicit alternatives or exclusions. There is no mention of when to use get_user_preferences instead, leaving the decision to inference.

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

get_user_profile_by_idA
Read-only
Inspect

Get a user profile by their ID. Returns profile data including email, phone, and custom properties.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesThe user ID to look up
Behavior3/5

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

The readOnlyHint annotation already covers the read-only nature. The description adds that it returns profile data including email, phone, and custom properties, but does not disclose error behavior, permissions, or whether partial data can be returned. This adds some value 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.

Conciseness5/5

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

The description is one sentence, front-loaded with the action and resource, and includes the key return fields. Every word earns its place with zero waste.

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

Completeness5/5

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

For a simple, read-only, single-parameter get tool with no output schema, the description is sufficient: it states the purpose, the input, and the return content. No significant gaps remain given the annotations and schema coverage.

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

Parameters3/5

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

The input schema already provides 100% coverage for the single parameter user_id with description 'The user ID to look up'. The tool description's 'by their ID' reinforces this but adds no new meaning beyond the schema. Baseline 3 applies.

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

Purpose5/5

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

The description states a specific verb ('Get') and resource ('user profile'), with the scope ('by their ID') and a summary of returned data (email, phone, custom properties). This clearly distinguishes it from sibling tools like get_user_preferences or get_user_push_token.

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

Usage Guidelines3/5

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

Usage context is implied by the tool name and description: use this when you need a user profile by ID. However, there is no explicit guidance on when not to use it or comparison with alternatives (e.g., list_tenant_users, get_user_preferences).

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

get_user_push_tokenA
Read-only
Inspect

Get a specific push/device token for a user.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYesThe token identifier
user_idYesThe user ID
Behavior3/5

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

Annotations declare readOnlyHint=true, covering the safety profile. The description adds no behavioral details beyond the get operation, such as return format, error handling, or permission needs. It does not contradict annotations, but it offers little additional context.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no waste. It concisely states the action, resource, and scope.

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

Completeness3/5

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

For a simple getter with full schema coverage and a readOnlyHint, the description is minimally sufficient. However, it lacks any mention of the return value or format, error behavior, or how it relates to sibling list_user_push_tokens, leaving some gaps for an agent.

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

Parameters3/5

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

Both parameters have descriptions in the schema (100% coverage), so the schema already documents token and user_id. The tool description adds no extra semantic meaning to these parameters, matching the baseline for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Get' and clearly identifies the resource ('a specific push/device token') and scope ('for a user'). This distinguishes it from sibling tools like list_user_push_tokens, which retrieves all tokens, by emphasizing specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'specific' implies that this tool is for retrieving one token by identifier, but it does not explicitly state when to use this over list_user_push_tokens, nor does it mention exclusions or alternatives. Usage 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_automationAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
brandNo
profileNo
templateNo
recipientNo
automationYesThe automation definition with typed steps
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate the operation is non-read and non-idempotent. The description adds little beyond that, but the list of step actions includes 'send' and 'send-list', implying message-sending behavior. It does not disclose asynchrony, permissions, or side effects, so the burden is only partially met.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. It front-loads the core purpose and immediately provides the list of valid actions, followed by a helpful pointer to cancel_automation. This is optimally concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex tool with nested automation steps and no output schema. The description gives the action list and cancellation pointer, but lacks context about the operation's lifecycle, return values, or practical usage patterns. The detailed schema helps, but the description does not fully compensate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema coverage is low (17%), and the description compensates somewhat by listing the valid step actions, which are not aggregated elsewhere. However, it does not explain the top-level parameters (data, brand, profile, template, recipient) or how they relate to the automation steps, leaving gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Invoke an ad-hoc automation with inline steps.' It also enumerates valid step actions, making the tool's purpose unmistakable. The reference to cancel_automation distinguishes it from a related sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells users to use cancel_automation when they need to cancel a previously started automation, providing a clear when-not. However, it does not explicitly contrast with invoke_automation_template, though the term 'ad-hoc' implies that template-based invocations are a different use case.

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. Call list_automations first to get the template_id. Example: { template_id: "auto-onboarding", recipient: "user-123", data: { plan: "pro" } }.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNoData to pass to the automation
brandNoBrand ID override
profileNoProfile data for the recipient
templateNoNotification template override
recipientYesRecipient user ID
template_idYesThe automation template ID
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and idempotentHint=false, so the mutating nature is known. The description adds the prerequisite for template_id but does not disclose side effects, return format, or any other behavioral traits beyond the structured metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with an integrated example. It is front-loaded with the purpose and immediately gives actionable guidance. No words are wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with full schema coverage and no output schema, the description covers purpose, prerequisite, and example usage. It could mention the return value (e.g., run ID) but is otherwise complete 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description goes beyond by providing an example that illustrates the data object structure ({ plan: 'pro' }) and the required fields (template_id, recipient), adding practical meaning to the parameter usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation ('Invoke an automation run from an existing automation template') using a specific verb and resource. It distinguishes this from sibling tools like invoke_ad_hoc_automation and invoke_journey by specifying 'existing automation template.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a clear prerequisite ('Call list_automations first to get the template_id') and a concrete example. While it doesn't explicitly state alternatives or when not to use it, the context is clear enough for an agent to infer appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

invoke_journeyAInspect

Invoke a journey run from a journey template. Call list_journeys first to find the template_id. Example: { template_id: "j-onboarding", user_id: "user-123", data: { plan: "pro" } }.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNoData payload passed to the journey for conditions and template variables
profileNoProfile data for the user (email, phone, custom fields)
user_idNoRecipient user ID. Can also be resolved from profile or data.
template_idYesThe journey template ID
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and idempotentHint=false, and the description aligns with this. It adds minimal behavioral context beyond the action itself, with no mention of side effects, async behavior, or rate limits, but does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with a concrete example, no redundant wording, and is front-loaded with the core purpose. Each element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description does not explain return values, but the tool is a simple invocation action. The example and pre-step provide sufficient context for usage, though behavior implications could be more explicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds practical value with an example showing template_id, user_id, and data, and clarifies how template_id is obtained via list_journeys, enriching the schema's descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Invoke' and the resource 'a journey run from a journey template', distinguishing it from sibling tools like invoke_automation_template. The purpose is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance to call list_journeys first to find the template_id, offering a clear precondition. It does not explicitly mention when not to use it or alternatives, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_audience_membersC
Read-only
Inspect

List all members of an audience.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPagination cursor
audience_idYesThe audience ID
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already covers safety, but the description adds little beyond that. It claims to list 'all' members, yet the presence of a cursor parameter implies pagination, which is not disclosed. The description does not mention return format, pagination behavior, or any potential limitations, so it provides minimal behavioral insight beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no redundant information. It is front-loaded and concise, stating exactly what the tool does. There is no wasted content, making it appropriately sized for a simple list operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is incomplete relative to the tool's context. It omits pagination behavior despite the cursor parameter, and there is no output schema to describe return values. The phrase 'all members' is misleading given the pagination cursor, and no mention of response structure or iteration is provided. This is a significant gap for an API operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema descriptions cover both parameters (audience_id and cursor) with 100% coverage, so the structured data already explains their meaning. The description adds no additional parameter semantics. According to the rubric, baseline 3 is appropriate when schema coverage is high and the description does not need to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'List all members of an audience' clearly states the action (list) and resource (members of an audience). It is specific and distinguishable from sibling tools like list_audiences, but it does not explicitly mention alternatives or exclusions. The name itself carries most of the differentiation weight, so it does not fully meet the 5 threshold.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like list_audiences or get_audience. The description only states the basic function without providing context for selection among the many sibling list tools. 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.

list_audiencesA
Read-only
Inspect

List all audiences in the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPagination cursor
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true already tells the agent this is a safe read, so the description adds no extra behavioral context. It does not mention pagination behavior, response format, or other non-obvious traits, despite having a cursor parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no unnecessary words. It immediately conveys the action and scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one optional parameter and a readOnly annotation, the description is minimally adequate. However, it does not mention pagination or return shape, and there is no output schema to fill that gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with the cursor parameter described as 'Pagination cursor', so the schema carries the parameter semantics. The description adds no additional meaning to the parameter, keeping it at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all audiences in the workspace, using a specific verb and resource. It naturally distinguishes from siblings like get_audience (singular) and list_audience_members (members of audiences).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for enumerating audiences but offers no explicit guidance on when to use this tool versus alternatives such as get_audience or list_audience_members. No exclusions or alternative recommendations are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_audit_eventsA
Read-only
Inspect

List audit events in the workspace. Useful for tracking API usage and changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPagination cursor
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description is consistent. The description adds 'in the workspace' as a scoping constraint, which is a behavioral trait beyond the annotation. However, it does not disclose pagination behavior or what events are returned beyond the cursor parameter in the schema, so it adds limited behavioral value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence (or two short sentences) that communicates the action and a use case. It is concise and front-loaded with the main verb, with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one optional parameter and no output schema, the description covers the purpose, scope, and a use case. The absence of output schema means the return format is not explained, but the name and 'list' imply an array of events. Given low complexity, the description is nearly complete, though it could benefit from noting the return structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one parameter, cursor, with a description 'Pagination cursor', giving 100% schema description coverage. The tool description does not add any additional meaning to the parameters, so it relies entirely on the schema, earning baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the verb 'List' with a specific resource 'audit events' and a scope 'in the workspace'. This clearly distinguishes it from get_audit_event and other list_* siblings, so the tool's purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context for when to use it: 'Useful for tracking API usage and changes.' This implies a monitoring/auditing use case, but it does not explicitly state when not to use it or mention the alternative get_audit_event. Thus it has clear context without exclusions, earning a 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_automationsA
Read-only
Inspect

List automation templates in the workspace. Always call this first to discover template_id values before calling invoke_automation_template. Optionally filter by version.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPagination cursor
versionNoFilter by version state
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true annotation already declaring the safe read behavior, the description adds the workflow context that it should be called first and yields template IDs. It does not add details on pagination, rate limits, or result structure, but for a simple read-only list tool this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences front-load the purpose and immediately provide the key usage instruction. No filler or redundant detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with strong schema coverage and a read-only annotation, the description is complete: it states scope, the discovery workflow, and the optional version filter. It could mention return format or pagination behavior, but 'discover template_id values' covers the essential output expectation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with cursor and version already documented in the input schema. The description only repeats 'Optionally filter by version,' adding no new parameter semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List automation templates in the workspace.' It further specifies the purpose as discovering template_id values for invoke_automation_template, which distinguishes it from generic list tools and clearly identifies the operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit workflow guidance: 'Always call this first to discover template_id values before calling invoke_automation_template.' It does not, however, describe when not to use it or name alternative list tools, so it stops short of full when/when-not coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_brandsA
Read-only
Inspect

List all brands in the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPagination cursor
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true already signals a safe read operation. The description adds the workspace scope, which is useful, but it does not mention pagination behavior despite the cursor parameter, so some behavioral detail is missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence, front-loaded with the verb and resource. It contains no filler and 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.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (one optional param, no output schema), the description is mostly sufficient, but it fails to mention pagination. Saying 'all brands' while having a cursor parameter implies a paginated response, which is not disclosed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema describes the only parameter (cursor) as 'Pagination cursor', giving 100% coverage. The description adds no additional parameter semantics, so it correctly relies on the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'List' and a specific resource 'brands', stating the scope as 'all brands in the workspace'. This clearly distinguishes it from sibling tools like get_brand (single brand) and create_brand (write operation).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for listing all brands, which gives some usage context, but it does not explicitly contrast with alternatives like get_brand or mention when not to use it. There is no explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_bulk_usersB
Read-only
Inspect

List the users in a bulk job.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPagination cursor
job_idYesThe bulk job ID
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation covers the safety profile, so the agent knows this is a read-only operation. The description adds no additional behavioral context, such as pagination behavior or return format, beyond the schema. With annotations present, a baseline of 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no redundant words or filler. It is appropriately sized for a simple list operation, earning top marks for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (only 2 parameters, no output schema), so the minimal description is mostly sufficient. However, it does not explain what 'users' means in the response (e.g., IDs, full objects) nor mention pagination explicitly, leaving some gaps for an agent unfamiliar with the domain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both job_id and cursor having descriptive text. The description does not add any extra meaning beyond what the schema already provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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 resource as 'users in a bulk job,' making the core purpose clear. It does not explicitly contrast with sibling tools like get_bulk_job or add_bulk_users, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It does not mention that get_bulk_job might be for job status, or that add_bulk_users is for adding users. The usage context is entirely implied from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_digest_instancesA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax instances to return (default 20, max 100)
cursorNoPagination cursor from a previous response
schedule_idYesThe digest schedule id, in the form "sch/{uuid}"
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already declares this as a read-only operation. The description adds semantic value by explaining what an instance represents and the use case for monitoring before release. However, it does not disclose additional behavioral details such as pagination behavior, ordering, or whether only pending instances are returned. This is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, with the first sentence front-loading the primary action and the second adding necessary context. There is no wasted wording, making it appropriately concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description does a good job explaining what a digest instance is, which helps the agent understand the response semantics. It also ties the tool to the digest-release lifecycle. It could be slightly more explicit about the paginated return format, but the cursor parameter implies this, so it is mostly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage of parameter descriptions, including the format of schedule_id, default/max for limit, and cursor usage. The description adds no param-specific information beyond this, but the schema already documents them well, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'List the digest instances for a schedule.' It specifies the resource (digest instances) and the scope (per schedule), and distinguishes itself from sibling list tools by explaining what a digest instance is: 'events accumulated for a single user against the schedule.' This is specific and not a tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: 'useful for monitoring accumulation before a digest is released.' This tells the agent when this tool is appropriate. However, it does not explicitly name alternatives or exclusions, but given the specificity, the intended use is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_journeysA
Read-only
Inspect

List journey templates in the workspace. Call this first to discover journey IDs before calling invoke_journey, get_journey, or replace_journey. Optionally filter by version (published or draft).

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPagination cursor
versionNoFilter by version state. Defaults to published.
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safe-read nature is known. The description adds the 'call this first' sequencing and version filtering context, which is useful. However, it doesn't disclose pagination behavior or return format, leaving some behavioral traits to inference.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, and every word adds value. No wasted or redundant content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity, two optional parameters, and readOnly annotation, the description is reasonably complete. It explains the primary use case (discovering journey IDs) and filtering option. Since there is no output schema, mentioning return values would strengthen it, but the phrase 'discover journey IDs' partially covers that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description only restates the version filter ('published or draft') without adding new detail. Cursor pagination is not mentioned in the description, relying entirely on the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: 'List journey templates in the workspace.' It also hints at its role in discovering journey IDs before calling other tools, which somewhat distinguishes it from siblings, though it doesn't explicitly differentiate from the similarly named list_journey_templates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: 'Call this first to discover journey IDs before calling invoke_journey, get_journey, or replace_journey.' This tells the agent when to use the tool, but it doesn't mention when not to use it or alternatives like list_journey_versions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_journey_templatesA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size (1–100)
cursorNoPagination cursor
journey_idYesThe journey template ID
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already covers safety, and the description adds valuable context: the journey-scoping rule ('can only be used by send nodes within the same journey') and the workflow purpose. It does not describe pagination or return format, but the annotation lowers the burden and the added scope constraint is genuinely useful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the primary action, and every sentence adds value—the first states what it does, the second explains the scoping rule and the workflow context. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with readOnly annotation and 100% schema coverage, the description fully covers purpose, scope, and when to call it. No output schema exists, but the return type is implicitly a list of templates and the pagination parameters are documented in the schema, so the description is complete for this complexity level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are fully documented in the schema. The description does not add additional meaning about limit, cursor, or journey_id 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb-resource pair ('List notification templates scoped to a journey') and clearly distinguishes from sibling tools by emphasizing the journey-scoping constraint. It also mentions the intended workflow of discovering template IDs, which adds clarity beyond the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides an explicit use case: 'Call this to discover template IDs before wiring send nodes in replace_journey.' It gives clear context for when to use it, though it does not explicitly mention alternatives or when not to use it, which prevents a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_journey_template_versionsA
Read-only
Inspect

List published versions of a journey-scoped notification template, ordered most recent first.

ParametersJSON Schema
NameRequiredDescriptionDefault
journey_idYesThe journey template ID that owns this notification
notification_idYesThe notification template ID
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true already indicating a safe read operation, the description adds useful context by specifying that only published versions are listed and that they are ordered most recent first. It does not disclose additional behavioral traits such as pagination or rate limits, but the annotation covers the 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that front-loads the primary action and resource. Every word contributes meaning, with no fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a simple read-only list operation with complete schema coverage and a read-only hint. The description clarifies the scope (published, journey-scoped) and ordering, which is sufficient for invocation. It does not describe return value details, but no output schema exists, and the tool's purpose is straightforward.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both parameters already described meaningfully ('journey template ID that owns this notification' and 'notification template ID'). The description does not add additional parametric meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List'), identifies the resource ('published versions of a journey-scoped notification template'), and adds ordering ('most recent first'). It clearly distinguishes from sibling tools like list_notification_versions and list_journey_versions by specifying journey-scoped notification templates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: it lists published versions of a journey-scoped notification template, which implies when to use it. However, it does not explicitly mention when not to use it or suggest alternative tools for related queries, 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_journey_versionsA
Read-only
Inspect

List published versions of a journey, ordered most recent first.

ParametersJSON Schema
NameRequiredDescriptionDefault
journey_idYesThe journey template ID
Behavior3/5

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 about returning only 'published' versions and the ordering, but does not disclose details like pagination or the structure of each version. This is acceptable given annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that is direct and free of redundancy. Every word contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with one parameter, the description is sufficient. It specifies the scope (published), ordering, and resource. No output schema exists, but listing operations naturally return an array of versions; no additional context is critical for invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of the parameter (journey_id with description 'The journey template ID'). The tool description adds no additional semantic value beyond what the schema provides, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List'), the resource ('published versions of a journey'), and adds ordering ('most recent first'). This distinguishes it from sibling tools like list_journey_template_versions and list_journeys, which target different entities or include drafts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool—when you need published journey versions in reverse chronological order. However, it does not explicitly contrast with alternatives like list_journey_template_versions or note exclusions, so it falls 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.

list_listsA
Read-only
Inspect

Get all lists. Optionally filter by pattern (e.g. 'example.list.*').

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPagination cursor
patternNoFilter pattern (e.g. 'example.list.*')
Behavior3/5

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 disclosed. The description adds the filter pattern behavior, but this is already present in the input schema. It does not mention pagination behavior despite the cursor parameter, nor any other side effects. With annotations covering safety, some added context is present but limited.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, with two short sentences. It front-loads the action ('Get all lists') immediately and provides a concrete example for the filter in parentheses. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with good annotations and schema, the description is mostly complete. It clearly states the core functionality and filter option. However, it does not mention that results may be paginated via the cursor parameter or describe the return structure, which would be helpful given the lack of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both 'cursor' and 'pattern' already described in the input schema. The description redundantly mentions the pattern with an example but adds no new meaning beyond the schema. Baseline score of 3 is appropriate given high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get all lists' uses a specific verb ('Get') and resource ('lists'), clearly indicating this tool lists multiple lists. The optional filter pattern example ('example.list.*') further clarifies its purpose and distinguishes it from the sibling tool 'get_list' which presumably fetches a single list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives like 'get_list' or 'create_list'. It implies usage for retrieving all lists, and the filter pattern example gives a hint about filtering, but there is no direct comparison or exclusion of alternatives. No when-not-to-use guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_messagesA
Read-only
Inspect

List messages you've previously sent. Filter by status, recipient, notification, provider, tags, or tenant.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoFilter by metadata tags
listNoFilter by list ID
tagsNoComma-delimited list of tags
eventNoFilter by event ID
cursorNoPagination cursor for fetching the next page
statusNoFilter by status (e.g. DELIVERED, UNDELIVERABLE)
traceIdNoFilter by trace ID
archivedNoInclude archived messages
providerNoFilter by provider key (e.g. sendgrid, twilio)
messageIdNoFilter by message ID
recipientNoFilter by recipient user ID
tenant_idNoFilter by tenant ID
notificationNoFilter by notification ID
enqueued_afterNoISO 8601 timestamp; only return messages enqueued after this time
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already covers the read-only nature, and the description adds the 'previously sent' scope. However, it does not mention pagination behavior or default filtering behavior (e.g., archived messages excluded unless specified), which could be relevant for the agent. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that front-loads the core action ('List messages you've previously sent') and then succinctly enumerates the filtering options. No wasted words or redundancy with schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with 14 optional filter parameters and a read-only annotation, the description gives the core purpose and summarizes the main filter categories. It doesn't mention pagination or output details, but the schema fully documents parameters and the tool's purpose is clear. Given the annotations and schema coverage, the description is adequate and not incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage for all 14 parameters, so the description does not need to repeat them. The description does list some key filter dimensions (status, recipient, notification, provider, tags, or tenant) which maps well to the schema, but adds no additional meaning beyond the schema's own parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: 'List messages you've previously sent.' This is specific enough to distinguish from siblings like get_message (singular retrieval) and send_message (creation). The scope 'previously sent' adds a useful constraint that separates it from other list operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use this tool: when needing to list messages that were previously sent, with optional filtering. It does not explicitly mention alternatives or exclusions, but the context is evident from the name and the description's framing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_notification_checksB
Read-only
Inspect

List checks for a notification submission.

ParametersJSON Schema
NameRequiredDescriptionDefault
submission_idYesThe submission ID for the checks resource
notification_idYesThe notification template ID
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation covers the read-only nature, but the description adds no additional behavioral context such as return format, pagination, or what defines a 'check.' It essentially restates the tool's purpose without enriching the agent's understanding of runtime behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that is front-loaded with the action verb. No wasted words, making it highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with readOnlyHint and clear required parameters, the description is minimally adequate. However, 'checks' is undefined and there is no output schema, so a bit more context (e.g., what a check represents) would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage with descriptions for both parameters (notification_id and submission_id). The tool description does not add any extra parameter semantics 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'List checks for a notification submission' clearly identifies the action (list), resource (checks), and context (notification submission). It distinguishes from the sibling tool 'update_notification_checks' by focusing on listing rather than updating.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus other listing siblings (e.g., list_notification_versions, list_messages). The description is simply a one-liner with no mention of alternatives or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_notificationsA
Read-only
Inspect

List notification templates. Optionally filter by cursor.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPagination cursor
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true annotation, the description adds minimal behavioral context beyond what annotations already provide. 'Optionally filter by cursor' rephrases the schema parameter rather than disclosing additional behavioral traits like return format or ordering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no redundant words. It front-loads the core action and includes the only optional parameter, earning its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the single optional parameter, readOnlyHint annotation, and no output schema, the description is complete for a simple list operation. It clearly states what is listed and the one filtering mechanism, making it sufficient for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% since the cursor parameter is already described as 'Pagination cursor'. The description's 'filter by cursor' adds no new meaning beyond what the schema provides, meeting the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'List notification templates' uses a specific verb and resource, clearly distinguishing this from sibling tools like list_notification_checks and list_notification_versions. It clarifies that the tool lists templates, not raw notifications, resolving any ambiguity with the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates the tool's basic purpose but does not explicitly state when to use it versus alternatives. It implies usage for listing notification templates with optional cursor-based pagination, but provides no exclusions or comparisons to 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_notification_versionsA
Read-only
Inspect

List version history for a notification template.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax versions per page (default 10, max 10)
cursorNoPagination cursor from a previous response
notification_idYesThe notification template ID
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already indicates a safe read operation, and the description adds the concept of 'version history.' However, it does not disclose pagination behavior, ordering of versions, or what fields each version contains. With annotations covering safety, this is adequate but not enriched.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that directly states the tool's purpose with no filler. It is front-loaded with the verb and resource, making it highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with well-documented parameters and a readOnly annotation, the description covers the core function adequately. While it omits explicit mention of pagination and response structure, the schema descriptions for limit and cursor hint at pagination, and the lack of an output schema lowers the burden. Still, a bit more detail about what 'version history' entails would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage with descriptions for all three parameters (limit, cursor, notification_id). The description adds no parameter-level detail beyond what the schema already states, 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.

Purpose5/5

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 ('version history for a notification template'), clearly distinguishing it from other list_* tools such as list_notifications or list_journey_template_versions. The intent is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its use case (retrieving historical versions of a notification template) but provides no explicit guidance on when to choose it over similar version-listing tools like list_tenant_template_versions or list_journey_template_versions. No exclusions or alternatives are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_preference_sectionsA
Read-only
Inspect

List the workspace's preference sections. Each section embeds its topics.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description is consistent. It adds value by disclosing that each section embeds its topics, but does not mention pagination or ordering, which could affect agent expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no redundancy. The action verb is front-loaded and the scope is immediately clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple parameterless read-only tool, the description covers scope, resource, and the nested topics behavior, which is sufficient given the lack of output schema. Minor gap: no pagination details, but complexity is low.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters in the schema, so the baseline for parameter semantics is 4. The description correctly adds no parameter-related details because none are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'List' and resource 'preference sections', with clear workspace scope. It distinguishes from sibling `list_preference_topics` by noting that sections embed topics, and from `get_preference_section` by implying all sections.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when you need all preference sections with their embedded topics, but it does not explicitly name alternatives or when-not-to-use scenarios compared to sibling tools like `list_preference_topics`.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_preference_topicsB
Read-only
Inspect

List the topics in a preference section.

ParametersJSON Schema
NameRequiredDescriptionDefault
section_idYesId of the preference section
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true covers the read-only nature, and the description is consistent with that. However, it adds no additional behavioral details such as whether archived topics are included, ordering, pagination, or error behavior, which would be valuable 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, direct and free of filler. It is appropriately sized for a simple list operation, and every word contributes to the meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and a read-only annotation, the description is adequate but minimal. It does not mention the return shape, which is notable since no output schema is provided, and it lacks context about topics hierarchy or filtering.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The sole parameter section_id is fully documented in the schema with 100% coverage. The description adds no extra meaning beyond what the schema already 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.

Purpose4/5

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 ('topics in a preference section'), clearly stating what the tool does. The scope 'in a preference section' distinguishes it from list_preference_sections, though it does not explicitly reference sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like get_preference_topic or list_preference_sections. The description only states the operation without any context on prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_provider_catalogA
Read-only
Inspect

List available provider types from the catalog with their configuration schemas.

ParametersJSON Schema
NameRequiredDescriptionDefault
keysNoComma-separated provider keys to filter by
nameNoSubstring match on provider name
channelNoFilter by channel type (email, sms, push, etc.)
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark readOnlyHint=true, and the description's 'List' action is consistent. It adds useful context that the result includes configuration schemas, but does not describe pagination, response shape, or other side effects; still, the read-only nature is covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that conveys the action and output without redundancy. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with optional filters, the description sufficiently conveys what is returned (provider types and configuration schemas). It lacks details about default behavior (e.g., returns all if no filters) but the schema covers filtering, and annotations cover safety.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 3 parameters have descriptions in the schema (100% coverage), so the description doesn't need to explain them. The description only mentions the overall catalog output, not parameter-specific behavior. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear action: 'List available provider types from the catalog with their configuration schemas.' It distinguishes itself from sibling list_providers by focusing on the catalog of types rather than instances, and names the output (configuration schemas).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when/when-not guidance or alternative tools are mentioned. The description implies usage when one needs to discover provider types and their schemas, but it does not contrast with list_providers, leaving the choice somewhat inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_providersA
Read-only
Inspect

List configured provider integrations for the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPagination cursor
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint: true annotation already signals a safe read operation. The description adds the workspace scoping and the 'configured' qualifier, but does not disclose pagination behavior or return format, which are useful context beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence with no filler, earning a high score for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with readOnly annotation and a well-documented pagination parameter, the description, together with the schema and annotations, is sufficiently complete for an agent to invoke the tool correctly, though it could mention pagination explicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'cursor' is already described in the schema as 'Pagination cursor,' providing 100% coverage. The description adds nothing 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' and identifies the resource as 'configured provider integrations' scoped to 'the workspace,' distinguishing it from sibling tools like list_provider_catalog (which likely lists available catalog providers) and get_provider (which retrieves a single provider).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies use when the agent needs to enumerate the provider integrations configured in the workspace. It does not explicitly contrast with alternatives, but the scope and resource naming provide clear context; there are no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_routing_strategiesA
Read-only
Inspect

List routing strategies in the workspace. Returns metadata only; use get for full details.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results per page (default 20, max 100)
cursorNoPagination cursor
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, but the description adds behavioral context by stating 'Returns metadata only', which clarifies the output nature. It does not repeat annotation info and does not contradict the read-only hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose and provides a pointer to an alternative. Every word earns its place, with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with optional pagination parameters and no output schema, the description adequately covers the needed context: it defines the scope, clarifies the return type (metadata), and directs to the get tool for full details. No gaps are evident.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already covers both parameters (`limit` and `cursor`) with 100% description coverage, so the description adds no additional parameter semantics. 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List'), the resource ('routing strategies'), and the scope ('in the workspace'). It also distinguishes from the sibling tool `get_routing_strategy` by noting it returns metadata only, which makes 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs 'use get for full details', providing a clear alternative for when more than metadata is needed. This constitutes an explicit when-to-use and when-not-to-use guideline, differentiating it from the get operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_routing_strategy_notificationsA
Read-only
Inspect

List notification templates associated with a routing strategy. Useful for checking linked templates before archiving.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results per page (default 20, max 100)
cursorNoPagination cursor
routing_strategy_idYesThe routing strategy ID (rs_ prefix)
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already indicates a safe read operation, and the description's 'List' verb aligns with that. The description adds the relational context (templates associated with a routing strategy) and a practical use case, but does not disclose additional behavioral traits like auth requirements or error conditions, which are not critical for this simple read-only tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences. The first sentence states the function, the second adds context for usage. No redundant wording or filler, and the key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation, the description combined with the annotated schema is fully sufficient. It explains what the tool does, when to use it, and the schema covers all parameters. No output schema is needed for this straightforward listing action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides descriptions for all three parameters with 100% coverage, so the schema handles the parameter semantics. The description's mention of 'associated with a routing strategy' aligns with the routing_strategy_id parameter but does not add syntax or format details beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List notification templates associated with a routing strategy' with a specific verb, resource, and scope. It distinguishes itself from sibling tools like list_routing_strategies by specifying the association to a routing strategy, and the use case 'before archiving' reinforces its unique purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear context for when to use the tool: 'Useful for checking linked templates before archiving'. However, it does not explicitly mention alternatives or when not to use this tool, so it falls short of full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tenantsA
Read-only
Inspect

List all tenants in the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results per page
cursorNoPagination cursor
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, so the description is not burdened with conveying safety. It adds the scope (workspace-wide listing) but does not disclose pagination behavior, response format, or other runtime traits beyond what schema and annotations already imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, tightly worded sentence that includes the key action and scope. Every word earns its place; no filler or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with read-only annotation and two well-documented optional parameters, the description is almost sufficient. It lacks an explicit mention of paginated results, but the schema fills that gap; overall, the combination is quite complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for both parameters (limit and cursor) with clear descriptions. The tool description adds no additional semantics about pagination or parameter usage, so it remains at the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('tenants') with scope ('in the workspace'), making the tool's purpose immediately clear. It distinguishes from singular get_tenant and other list_* tools by focusing on the tenant collection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a full list of tenants is needed, but does not explicitly state when to prefer this over alternatives like get_tenant or list_tenant_users. No exclusions or alternative recommendations are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tenant_templatesB
Read-only
Inspect

List notification templates configured for a tenant.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results per page (default 20, max 100)
cursorNoPagination cursor
tenant_idYesThe tenant ID
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description is consistent with the readOnlyHint annotation and does not contradict it. It adds minimal behavioral context beyond the annotation, such as the tenant scoping, but does not disclose pagination behavior 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that conveys the tool's purpose without unnecessary words. It is well-structured and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and the schema covers parameters, while the annotation covers safety. The description implies the return is a list of templates, and pagination is handled by schema fields. Some context about the return shape could be added, but it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides complete descriptions for all three parameters (limit, cursor, tenant_id), so the description does not need to add parameter details. The description adds no extra semantics beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (list), the resource (notification templates), and the scope (configured for a tenant). However, it does not explicitly differentiate from sibling tools like get_tenant_template or list_tenants, though the resource type is evident.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives. The description simply states the function without providing context for selection or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tenant_usersB
Read-only
Inspect

List users associated with a tenant.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results per page (default 20, max 100)
cursorNoPagination cursor
tenant_idYesThe tenant ID
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include readOnlyHint: true, and the description aligns with that (listing is read-only). However, the description adds no extra behavioral context beyond the annotation—no mention of pagination, return structure, rate limits, or data scope. It does not contradict annotations, but it also contributes no new transparency value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no unnecessary words. It front-loads the action and resource, making it highly scannable and appropriately sized for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, and the description does not mention what the response contains or that pagination is supported (limit/cursor params exist). Given the lack of output schema and the presence of pagination-related parameters, the description is incomplete—it should at least hint at the return format or pagination behavior to fully inform the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for all three parameters (tenant_id, limit, cursor), each with descriptive text. The description itself does not add any semantic value beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'List users associated with a tenant' clearly states a specific verb (List), resource (users), and scope (tenant), distinguishing it from sibling tools like list_user_tenants (which lists tenants for a user). It is unambiguous and directly conveys the tool's function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, nor does it mention any exclusions, prerequisites, or relationship to other sibling tools like list_user_tenants. It is a bare statement of function without contextual usage hints.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_user_push_tokensA
Read-only
Inspect

List all push/device tokens for a user.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesThe user ID
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include readOnlyHint=true, so the safety profile is already disclosed. The description adds the 'all' scope, but does not mention details like pagination, ordering, or empty results. It adds some context beyond annotations but not rich behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that front-loads the action and resource. It contains no filler and is immediately understandable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with one well-schema'd parameter and no output schema, the description fully conveys the tool's purpose and scope. It is complete enough for an agent to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single parameter (user_id), which is already well-documented. The description does not need to add extra meaning, and 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List'), specifies the resource ('push/device tokens'), and clarifies scope ('for a user'). It clearly differentiates from siblings like get_user_push_token (singular) and create_or_replace_user_push_token (write operation).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies this tool is for retrieving all tokens for a user, providing context for when to use it. However, it does not explicitly mention alternatives or when not to use it, though the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_user_tenantsA
Read-only
Inspect

List all tenants a user belongs to.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results per page
cursorNoPagination cursor
user_idYesThe user ID
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already signals a safe, read-only operation. The description adds the scope 'a user belongs to' but discloses no additional behavioral traits such as pagination behavior, return format, or potential empty results. It does not contradict the annotation, but adds limited context 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short sentence that is front-loaded with the action and resource. There is no wasted text or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with full schema coverage and a read-only annotation, the description is largely sufficient. It lacks an explicit note about pagination or return structure, but the schema already covers pagination, and the tool's simplicity makes this a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters (user_id, limit, cursor) have descriptions in the schema, giving 100% coverage. The tool description adds no extra 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'List' and clearly identifies the resource as 'tenants a user belongs to', which distinguishes it from sibling tools like list_tenants (all tenants) and list_tenant_users (users in a tenant). It precisely conveys the tool's function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving tenant memberships for a given user, but it does not explicitly state when to use this tool over alternatives or mention any exclusions. There is no guidance on when not to use it, so usage is inferred from context.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
patchYesArray of JSON Patch operations to apply to the profile
user_idYesThe user ID
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a write operation (readOnlyHint=false) and non-idempotency. The description adds the JSON Patch RFC 6902 standard and limits operations to add/replace/remove, which is useful behavioral context. However, it does not disclose atomicity, error behavior on invalid paths, or prerequisites like an existing profile, so it provides only moderate transparency beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences that lead with the core action and then clarify supported operations. There is no filler or redundancy; every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (JSON Patch array), the description covers the main invocation details: partial update, allowed ops, and target paths. It does not explain whether the profile must exist or patch application semantics, but since there is no output schema and annotations are present, the description is reasonably complete 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with parameter descriptions for user_id and patch, so the baseline is 3. The description mentions 'specific profile paths' and allowed operations but does not add significant detail beyond the schema's descriptions of op, path, and value. No extra parameter-level guidance is given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('update'), resource ('user profile'), and scope ('partially', via JSON Patch RFC 6902). It clearly distinguishes from sibling tools like 'replace_profile' by emphasizing partial modification, 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Partially update' and 'Use add/replace/remove operations on specific profile paths' provides clear context for when to use this tool (partial updates) versus full replacement. However, it does not explicitly name alternatives like 'replace_profile' or state when not to use it, so it falls short of full 5 criteria.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
patchYesArray of JSON Patch operations
tokenYesThe token identifier
user_idYesThe user ID
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a write operation (readOnlyHint=false) and non-idempotent behavior (idempotentHint=false). The description adds the RFC 6902 context but does not disclose any additional behavioral traits such as whether the token must already exist, atomicity, or what happens on invalid patch operations. With annotations covering the basic safety profile, the description adds marginal value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that front-loads the action and resource. There is no filler or redundancy; every word contributes to the core meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and no annotations beyond basic hints, the description is too thin. It does not explain the effect of the patch (e.g., whether it creates, updates, or replaces token fields), how errors are surfaced, or any behavioral constraints. This is insufficient for an agent to confidently invoke the tool in diverse scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already documented. The description references RFC 6902, which adds context for the 'patch' parameter format beyond the schema's generic operation list, but the other parameters (user_id, token) are not elaborated further. Baseline of 3 is appropriate as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Apply a JSON Patch), the resource (a specific push token), and the method (RFC 6902), effectively distinguishing it from siblings like patch_profile or delete_user_token. It is a specific verb+resource statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives such as create_or_replace_user_push_token or delete_user_token. The description does not mention prerequisites, exclusions, or typical scenarios, leaving the agent to infer usage 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.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoHistorical version to roll back to (e.g. "v001"). Omit to publish the current draft.
journey_idYesThe journey template ID to publish
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavior beyond the annotations: it discloses that publishing makes the journey live and invokable, that passing a version performs a rollback, and that a 404 is returned when no draft exists. Since the annotations already indicate a non-read-only, non-idempotent operation, the description adds useful error and effect context 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loads the primary action, and covers both normal and rollback scenarios without waste. Every clause adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter publish action with no output schema, the description covers the key behaviors: publishing the draft, rollback via version, and the 404 error case. It does not describe the success response, but this is not critical for a simple mutation tool with adequate annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already fully documents both parameters (journey_id, version) with descriptions. The tool description restates the version's rollback behavior but adds no new semantic detail beyond the schema. Baseline 3 is appropriate given 100% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Publish') and resource ('current draft of a journey'), clearly distinguishing it from related tools like publish_journey_template and create_journey. It also conveys the outcome ('making it live and invokable') and the rollback alternative, 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the tool, including the normal case (publish draft) and the rollback case ('Pass version to roll back'). It does not explicitly name alternatives or exclusion criteria, but the intended usage is evident from the phrasing.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to roll back to (e.g. "v1"). Omit to publish current draft.
journey_idYesThe journey template ID that owns this notification
notification_idYesThe notification template ID
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a mutating, non-idempotent operation. The description adds 'draft' and 'roll back' semantics but does not disclose side effects like whether publishing overwrites the live version or requires special permissions. This is moderate added context, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that directly states the main action and the optional rollback capability. No filler or redundant information, front-loaded with the core verb and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the straightforward 3-parameter schema with full descriptions and no output schema, the description sufficiently covers the tool's function and scope. It could elaborate on the effects of publishing (e.g., what happens to previous versions), but the current coverage is adequate for selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all three parameters. The description mentions the version rollback purpose, but this duplicates the schema's own description. No additional meaning is provided for the required IDs beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Publish' and clearly identifies the resource as a 'journey-scoped notification template.' This distinguishes it from sibling tools like publish_notification and publish_journey by specifying the journey-scoped context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The qualifier 'journey-scoped' provides clear context for when to use this tool versus alternatives, but it does not explicitly name alternative tools or state when not to use it. This meets the 'clear context, no exclusions' level.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoHistorical version to publish (e.g. v001); omit to publish current draft
notification_idYesThe notification template ID to publish
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses behavioral details beyond the annotations: it publishes the current draft by default, allows publishing a specific historical version, and returns 204 on success. Annotations only indicate non-read-only and non-idempotent, so the description adds useful context about the action's effects and default behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the primary purpose, then providing the prerequisite and parameter details. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with no output schema, the description covers the essential context: purpose, prerequisite, default vs. version behavior, and success response. It lacks potential error cases or permission requirements, but these are not critical for a straightforward publish action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters are already fully described in the schema (notification_id and version), achieving 100% schema coverage. The description reinforces the version parameter's meaning with an example ('v001') but does not add new semantic information beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Publish a notification template') and its effect ('making it available for sending'). It specifically names 'notification template', distinguishing it from sibling publish tools like 'publish_tenant_template' or 'publish_journey_template'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when the tool must be called ('Must be called before send_message_template unless the template was created with state: PUBLISHED'), providing clear usage context relative to an alternative tool. Also explains the default vs. version-based behavior.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate a non-read, non-idempotent operation, and the description aligns by disclosing that it creates a new published version and makes the current state visible. It adds context about snapshotting all sections and topics, which is useful beyond the structured hints. No contradictions found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the verb and resource, then adds necessary explanatory detail about the snapshot and visibility. Every word earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter, no-output-schema tool, the description provides enough information about what the tool does and its effect. It does not mention return values or error cases, but these are less critical for such a straightforward publish action. The description is complete enough 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, so the schema fully covers the input. The description naturally has nothing to add about parameter semantics; the baseline of 4 is appropriate for a zero-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Publish') and resource ('the workspace's preferences page'), clearly distinguishing it from sibling tools that manage individual sections or topics. It also explains the mechanism: taking a snapshot of every section with topics under a new published version, which goes beyond a generic 'publish' label.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used to make the current state of preferences visible on the hosted page, which gives clear context for when to use it after editing sections/topics. However, it does not explicitly state when not to use it or name alternative tools, so it stops short of full usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publish_tenant_templateBInspect

Publish a version of a tenant notification template.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoVersion to publish (e.g. v1, latest); defaults to latest if omitted
tenant_idYesThe tenant ID
template_idYesThe template ID
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral context beyond what the annotation readOnlyHint=false already conveys. It does not explain side effects, such as making the version live or overwriting the current published version, nor does it state any requirements like the version needing to exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that clearly states the purpose, with no wasted words or repetition of schema information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write operation with no output schema, the description is too sparse. It does not clarify what 'publish' means in this domain (e.g., sets the active version), what happens on success, or whether there are any prerequisites, leaving the agent without enough context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all three parameters with descriptions (tenant_id, template_id, version), providing 100% coverage. The description adds no additional meaning to the parameters, so it stays at the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Publish a version of a tenant notification template' uses a specific verb ('publish') and a clear resource ('version of a tenant notification template'), which distinguishes it from sibling publish operations like publish_journey_template or publish_notification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, nor does it mention any exclusions or prerequisites. It is a single sentence with no contextual usage information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

put_journey_template_contentA
Idempotent
Inspect

Replace the elemental content of a journey-scoped notification template. Overwrites all elements. Call publish_journey_template afterwards to make it live.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoTemplate state after update
versionNoContent version string (e.g. "2022-01-01"). Server defaults when omitted.
elementsYesArray of elemental content nodes
journey_idYesThe journey template ID that owns this notification
notification_idYesThe notification template ID
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a write operation (readOnlyHint=false) and idempotency (idempotentHint=true). The description adds valuable behavioral details: it overwrites all elements (destructive to existing content) and requires a subsequent publish action to take effect. This goes beyond the structural metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences, each adding distinct value: the action, the overwrite scope, and the follow-up publish requirement. There is no redundant wording or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and a straightforward parameter set, the description covers the core action, the overwrite semantics, and the necessary next step. It does not mention return values or error conditions, but these are less critical for a PUT-like operation and the schema handles parameter details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers all five parameters with descriptions (100% coverage), so the baseline is 3. The description adds minimal parameter-specific meaning beyond saying 'elements' are elemental content, which is already in the schema. No additional insight into version or state handling is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Replace') and resource ('elemental content of a journey-scoped notification template'), and clarifies scope by stating 'Overwrites all elements.' This clearly distinguishes it from sibling tools like put_notification_element (single element) or replace_journey_template (full template replacement).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The instruction 'Call publish_journey_template afterwards to make it live' gives clear sequential context. 'Overwrites all elements' implicitly discourages use for partial updates, but it does not explicitly name alternatives like put_notification_element. Still, the usage context is clear and practical.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

put_journey_template_localeA
Idempotent
Inspect

Set locale-specific content overrides for a journey-scoped notification template. Each element override must reference an existing element by its id.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoTemplate state after update
elementsYesArray of element overrides with id and locale-specific content
locale_idYesLocale identifier (e.g. es, fr, pt-BR)
journey_idYesThe journey template ID that owns this notification
notification_idYesThe notification template ID
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate idempotentHint=true and readOnlyHint=false. The description adds a behavioral constraint: 'Each element override must reference an existing element by its id,' which is not in the annotations. It does not contradict annotations; the action 'set' aligns with a write operation. It does not disclose error handling or state transitions, but the added constraint gives 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary action and scope. The second sentence adds a critical requirement without redundancy. Every word contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters, full schema coverage, and annotations indicating idempotency, the description covers the core operation and a key constraint. It does not explain the 'state' parameter or return format, but no output schema exists and the schema already documents 'state.' The description is sufficiently complete for selecting and invoking the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema covers 100% of parameters with descriptions, so the baseline is 3. The description mentions the element id requirement, reinforcing what the schema already states for the 'elements' parameter. It adds no further parameter-level detail, so the score stays at baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Set locale-specific content overrides for a journey-scoped notification template.' It uses a specific verb ('set'), a specific resource ('journey-scoped notification template'), and qualifies the scope ('locale-specific content overrides'), distinguishing it from sibling tools like put_notification_locale or 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly defines when to use the tool (when setting locale-specific overrides on a journey template). It does not explicitly name alternative tools or state exclusions, but the phrase 'journey-scoped' and 'locale-specific' provides clear usage context compared to related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

put_notification_contentA
Idempotent
Inspect

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" }] }].

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoTemplate state after update
versionNoContent version string
elementsYesArray of elemental content nodes
notification_idYesThe notification template ID (nt_ prefix)
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and idempotentHint=true. The description adds important behavioral context by stating 'Overwrites all elements,' disclosing the destructive scope beyond a generic update. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and usage in the first sentence, then provides a practical multi-channel example. The example is lengthy but directly relevant and earns its place; there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers core behavior, element syntax, and channel targeting. No output schema exists, and while return values are not mentioned, this is acceptable for a replace operation. It could be more explicit about version/state handling, but those parameters are described in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema describes elements generically as 'Array of elemental content nodes,' but the description enriches this with a detailed example showing channel, meta, and text element structure. This gives meaningful guidance for constructing the elements parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Replace') and clearly identifies the resource ('elemental content of a V2 notification template'). The phrase 'Overwrites all elements' clarifies the full-replacement scope, distinguishing it from sibling tools like 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides concrete guidance: 'Use channel elements to target specific channels' and supplies a multi-channel example. However, it does not explicitly name alternatives such as put_notification_element or put_notification_locale, so the when-not-to-use guidance is implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

put_notification_elementA
Idempotent
Inspect

Update a single element within a V2 notification template.

ParametersJSON Schema
NameRequiredDescriptionDefault
ifNoConditional expression for element visibility
refNoReference identifier
dataNoElement data payload
loopNoLoop expression for repeating elements
typeYesElement type (e.g. text, action, image, divider, meta)
stateNoTemplate state after update
channelsNoChannels this element applies to
element_idYesThe element ID to update
notification_idYesThe notification template ID (nt_ prefix)
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already communicate that this is a mutating operation (readOnlyHint=false) and safe to retry (idempotentHint=true). The description adds the context of 'single element' and 'V2 template', but does not disclose details such as whether unspecified fields are preserved, whether a draft/published state is required, or how the update affects the template state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that communicates the essential purpose without any redundant words or filler. It is appropriately concise for the tool's scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the schema and annotations cover parameters and safety, the description lacks guidance on how this tool relates to siblings or what the behavior is regarding partial updates vs full replacement. Given the tool has 9 parameters, no output schema, and nested objects, a bit more context would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with each parameter documented. The description itself does not add parameter-level meaning 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action ('Update') and the specific resource ('a single element within a V2 notification template'), distinguishing it from siblings like put_notification_content or replace_notification. It is specific about the scope ('single element') and the template version ('V2').

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use the tool: when updating one element in a V2 notification template. However, it does not explicitly mention when not to use it or name alternatives such as put_notification_content or replace_notification, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

put_notification_localeA
Idempotent
Inspect

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." }] }.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoTemplate state after update
elementsYesArray of element overrides with id and locale-specific content
locale_idYesLocale identifier (e.g. es, fr, pt-BR)
notification_idYesThe notification template ID (nt_ prefix)
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate mutation (readOnlyHint=false) and idempotency (idempotentHint=true). The description adds valuable behavioral context: each element override must reference an existing element by its id, preventing invalid requests. The example also illustrates the expected structure, though it does not explain if existing overrides are replaced or merged.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: two sentences and an illustrative JSON example. It front-loads the purpose, specifies a key constraint, and the example is directly useful for invocation. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers purpose, a critical constraint, and provides a full example. It does not explain the optional 'state' parameter, but the schema documents that. Overall, it gives enough context for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, but the description adds meaningful examples for locale_id and the elements array. The example shows that elements can contain title and content fields not explicitly listed in the schema's properties (which allows additionalProperties), thus clarifying the intended data shape.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Set locale-specific content overrides for a V2 notification template.' This is a specific verb+resource+scope combination that distinguishes it from siblings like put_notification_content (general content) and put_journey_template_locale (journey templates). The example further clarifies the exact operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies use for localized notification templates, and the example shows a Spanish locale use case. However, it does not explicitly mention alternatives or when not to use this tool, so it stops short of a 5. The context from sibling names helps fill the gap.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
schedule_idYesThe digest schedule id, in the form "sch/{uuid}"
Behavior4/5

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 valuable behavioral context by disclosing that a 204 is also returned when there are no in-progress instances to release, which goes 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence states the action, and the second addresses an edge case, making it highly efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema and annotations present, the description is complete: it explains the action, the timing difference, and the no-op edge case. No further context seems necessary for an agent to invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of the parameter details, including the expected format 'sch/{uuid}' for schedule_id. The description does not add additional parameter semantics, so it relies on the schema, which is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb+resource ('Release a digest schedule early') and clarifies the action with 'send what users have collected so far now instead of waiting for the scheduled time.' This clearly distinguishes it from sibling tools like list_digest_instances or send_message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys clear context for when to use it (when you want to release a digest before its scheduled time). However, it does not explicitly mention when not to use it or name alternative tools, such as checking in-progress instances via list_digest_instances.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_all_user_tenantsA
DestructiveIdempotent
Inspect

Remove a user from all tenants.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesThe user ID
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructive and idempotent behavior, and the description's 'Remove' aligns with this. The description adds the 'all tenants' scope but does not disclose additional behavioral traits such as irreversibility or authorization requirements. With annotations present, this does not contradict and provides some context, but not rich detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that directly states the purpose. It is front-loaded and contains no filler, earning high marks for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple tool with one parameter and no output schema. The description sufficiently communicates the core function, and the annotations fill in the safety profile. No additional context seems necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema contains one parameter (user_id) with a simple description 'The user ID'. Schema coverage is 100%, so the description does not need to add parameter semantics; however, it adds no additional information about the parameter's format or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Remove a user from all tenants.' This uses a specific verb (Remove) and resource (user's tenant memberships) and distinguishes from the sibling tool 'remove_user_from_tenant' which targets 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit usage guidance or alternative mention is provided. The scope 'all tenants' implicitly differentiates from single-tenant removal, but the description does not state when to choose this over alternatives. This is adequate but lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_user_from_tenantA
DestructiveIdempotent
Inspect

Remove a user from a tenant.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesThe user ID
tenant_idYesThe tenant ID
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description simply restates the tool's action and adds no behavioral context beyond what the annotations already provide. With destructiveHint and idempotentHint present, the description adds no extra insight into side effects, reversibility, or other behaviors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no unnecessary words. Every word contributes to the meaning, making it efficiently front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple remove operation with complete schema coverage and annotations indicating destructive and idempotent behavior, the description is sufficient. It does not explain return values, but no output schema exists, so that is not required. Some details on effects could be added, but the current level is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides descriptions for both parameters (user_id and tenant_id) with 100% coverage. The description does not add any additional meaning or nuance to these parameters, so it does not go beyond the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Remove a user from a tenant' uses a specific verb and clearly identifies the resources involved. It distinguishes the tool from siblings like add_user_to_tenant and remove_all_user_tenants, which have different actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by its action and resource names, but it does not explicitly state when to use this tool versus alternatives such as remove_all_user_tenants. There is no mention of prerequisites or exclusions, leaving the context to be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

replace_journeyA
Idempotent
Inspect

Replace (update) a journey draft. Full document replacement — include all nodes and properties in the body. Call publish_journey afterwards to make changes live, or pass state: "PUBLISHED" to publish immediately. Send node template IDs must already be scoped to this journey.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesJourney display name
nodesYesComplete array of journey nodes. Use server-assigned node ids from get_journey — do NOT invent new ids. Each node requires type plus type-specific fields.
stateNoSet to PUBLISHED to publish immediately after replace.
enabledNoWhether the journey is active.
journey_idYesThe journey template ID to update
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the destructive 'full document replacement' behavior, requiring all nodes and properties to be included. It also reveals the prerequisite about send node template IDs and explains the state parameter's immediate-publish effect. This goes well beyond the annotations (readOnlyHint=false, idempotentHint=true) which only indicate write semantics and idempotency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three focused sentences with no filler. The purpose is stated first, followed by the critical replacement semantics, publish workflow, and the prerequisite. Every sentence carries meaningful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 parameters, no output schema, and rich annotations, the description covers all essential invocation details: what the tool does, full replacement nature, how to publish, and the node ID prerequisite. The schema already provides the remaining parameter details, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed descriptions for all 5 parameters, including the nodes array semantics and state enum. The description adds little beyond the schema—repeating 'include all nodes and properties' which largely mirrors the schema's 'Complete array' note. The only marginal addition is the workflow guidance about publish_journey, but it does not change parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description opens with a specific verb+resource: 'Replace (update) a journey draft' and clarifies it's a full document replacement. It also differentiates from the sibling publish_journey by explicitly stating the follow-up publish step or immediate publish via state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly explains when to use it (updating a journey draft) and the workflow: either call publish_journey afterwards or pass state: 'PUBLISHED'. Also provides the prerequisite that node template IDs must be scoped to this journey. Does not explicitly exclude alternatives like create_journey or replace_journey_template, but gives sufficient context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

replace_journey_templateA
Idempotent
Inspect

Replace the draft of a journey-scoped notification template. Full document replacement. Call publish_journey_template afterwards to make it live.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNo"PUBLISHED" to publish immediately after replace
journey_idYesThe journey template ID that owns this notification
notificationYesFull notification template definition
notification_idYesThe notification template ID
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false and idempotentHint=true, and the description aligns by stating 'Replace' and 'Full document replacement', which is a mutating but idempotent operation. The description adds important context that this only affects the draft ('Replace the draft') and that publishing is a separate step, which is not present in annotations. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences that state the action, clarify its scope, and provide a necessary follow-up step. Every sentence adds value with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the schema and annotations, the description provides the key behavioral context (draft vs. live, full replacement) and a clear post-action. However, it omits the existence of the state parameter, which allows immediate publishing, and does not describe return values or error scenarios. This is a minor gap but not critical for a well-documented schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers all parameter descriptions (100% coverage), so the baseline is 3. The description adds the phrase 'Full document replacement', reinforcing that the 'notification' parameter should be the complete template definition, but it does not add new details about individual parameters. The state parameter is not mentioned in the description, but the schema already documents its behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Replace the draft of a journey-scoped notification template' with the specific verb 'replace' and resource 'journey-scoped notification template'. It further clarifies 'Full document replacement', distinguishing it from partial updates. The follow-up note about calling publish_journey_template positions this tool as the draft-update step, differentiating it from publish and other replace variants.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: when you need to replace a draft of a journey-scoped template. It explicitly says to call publish_journey_template afterwards, giving the agent a clear next step. However, it does not contrast this tool with sibling replace tools like replace_notification or replace_journey, nor mention alternative approaches like using the state parameter for immediate publishing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

replace_notificationA
Idempotent
Inspect

Replace a notification template entirely (full document PUT).

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoTemplate state after update (defaults to DRAFT)
notificationYesFull notification template payload
notification_idYesThe notification template ID to replace
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the behavioral trait of 'full document PUT,' indicating that the entire template is replaced, which aligns with and enriches the idempotentHint annotation. It does not discuss side effects like versioning or required permissions, but annotations already cover the mutation aspect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, immediately front-loaded with the verb and resource. The parenthetical 'full document PUT' efficiently conveys the HTTP semantics. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a replace tool with detailed schema and annotations, the description is adequate: it states the core purpose and the full-replacement nature. However, it could be improved by mentioning the state parameter or what happens to previous versions, though the schema covers the state parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all parameters documented in the input schema. The description adds no additional parameter-level information, and 'full document PUT' merely reinforces that the notification payload is the complete template, which is already stated in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('replace') and resource ('notification template'), and explicitly says 'entirely' and 'full document PUT', which clearly distinguishes it from partial update tools like put_notification_content and from create/publish tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a full replacement is needed, but it does not explicitly state when not to use it or name alternative tools. There is no mention of partial update alternatives or when to prefer create_notification.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

replace_preference_sectionA
Idempotent
Inspect

Replace a preference section. Full document replacement; missing optional fields are cleared. Topics attached to the section are unaffected.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable name for the section
section_idYesId of the preference section
routing_optionsNoDefault channels for the section. Omit to clear.
has_custom_routingNoWhether the section defines custom routing for its topics
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint=false, idempotentHint=true), the description adds critical behavior: missing optional fields are cleared and attached topics are unaffected. This provides useful context about side effects that the annotations alone do not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with the main purpose front-loaded. Every word earns its place; no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a mutation tool: it explains the replacement semantics, field clearing, and topic preservation. No output schema exists, but the description covers the essential behavioral aspects without needing to detail return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

While schema coverage is 100%, the description adds global meaning to parameters by explaining that all missing optional fields are cleared, not just routing_options. This clarifies how omission affects has_custom_routing and other fields, supplementing the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('Replace a preference section') and clarifies it is a full document replacement, distinguishing it from create/partial update tools like create_preference_section and update_tenant_preference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Full document replacement' implies when to use this tool versus partial updates, and the description clearly sets expectations. However, it does not explicitly name alternative tools or 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.

replace_preference_topicA
Idempotent
Inspect

Replace a topic within a section. Full document replacement; missing optional fields are cleared.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable name for the preference topic
topic_idYesId of the subscription preference topic
section_idYesId of the preference section
topic_dataNoArbitrary metadata associated with the topic. Omit to clear.
default_statusYesDefault subscription status applied when a recipient has not set their own
routing_optionsNoDefault channels delivered for this topic. Omit to clear.
allowed_preferencesNoPreference controls a recipient may customize. Omit to clear.
include_unsubscribe_headerNoWhether to include a list-unsubscribe header on emails for this topic
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses a key behavioral trait not captured by annotations: missing optional fields are cleared. This is valuable because it clarifies the full-replacement semantics. The annotations (readOnlyHint=false, idempotentHint=true) are consistent with this behavior, and the description adds detail without contradicting the structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences, front-loaded with the primary action and followed by the critical caveat about clearing. There is no wasted text, and every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 8 parameters, nested objects, and no output schema, the description covers the essential semantics (full replacement and clearing behavior). The schema and annotations provide the remaining context, so the description is appropriately complete without over-explaining obvious details. A slightly more explicit note about whether the topic must already exist could push it to a 5, but the current description is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers all 8 parameters with 100% description coverage, so the baseline is 3. The description adds extra semantic value by explaining that omitting optional fields (e.g., topic_data, routing_options, allowed_preferences) clears them, which directly informs how those parameters behave beyond their individual schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb+resource ('Replace a topic within a section') and clearly indicates the scope of the operation. It distinguishes the tool from siblings like create_preference_topic, update_user_preference_topic, and archive_preference_topic by framing it as a replacement operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Full document replacement' clearly signals when this tool should be used (i.e., when the complete topic document must be replaced) and implies that partial updates would use a different tool. While no explicit alternative is named, the context is clear enough for an agent to select this tool over siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

replace_profileA
DestructiveIdempotent
Inspect

Fully replace a user profile (PUT). All existing data is overwritten; include every field you want to keep.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileYesComplete profile data to replace with
user_idYesThe user ID
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as destructive and idempotent. The description adds meaningful context beyond annotations by explicitly stating 'All existing data is overwritten,' clarifying the extent of the destructive behavior and that omitted fields are lost. This is valuable but not exhaustive (e.g., no permission or response details).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action, no filler. Every word earns its place, delivering clarity and critical warnings efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with well-documented schema and annotations, the description captures the key behavioral nuance (full overwrite) and essential usage warning. It doesn't address what happens to omitted fields explicitly, but 'all existing data is overwritten' implies they are removed. No output schema reduces the need to explain return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions already cover both parameters (user_id and profile) at 100% coverage. The description's instruction to 'include every field you want to keep' adds semantic nuance to the profile object, reinforcing that it must contain the full desired state, not just changes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Fully replace a user profile (PUT).' The verb 'replace' is specific and the resource is identified, distinguishing it from siblings like patch_profile (partial update) and delete_profile.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: 'Fully replace' and warns to 'include every field you want to keep.' It implies a contrast with partial updates but does not explicitly name patch_profile as an alternative, so it falls short of the 5-level explicit alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

replace_routing_strategyA
Idempotent
Inspect

Replace a routing strategy. Full document replacement; missing optional fields are cleared.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable name
tagsNoTags. Omit to clear.
routingYesRouting tree
channelsNoPer-channel delivery configuration. Omit to clear.
providersNoPer-provider delivery configuration. Omit to clear.
descriptionNoDescription. Omit to clear.
routing_strategy_idYesThe routing strategy ID
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a write operation (readOnlyHint=false) and idempotent (idempotentHint=true). The description adds critical behavioral context by stating 'Full document replacement' and 'missing optional fields are cleared,' which is not explicit in the annotations. This tells the agent exactly how the tool behaves beyond the 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, with the verb and resource front-loaded in the first sentence. Every word earns its place; the second sentence clarifies a critical behavioral detail. No unnecessary filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 7 parameters and nested objects, the description captures the most important context (full replacement and clearing behavior) in a compact way. It does not mention return values or error conditions, but with no output schema and a clear schema for inputs, the description is sufficiently complete for a replace operation. The idempotency hint is already covered by annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description's statement that 'missing optional fields are cleared' summarizes the per-field 'Omit to clear' notes already present in the schema, adding little beyond what the schema conveys. It does not introduce new parameter-level meaning or syntax details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Replace') and resource ('routing strategy'), clearly distinguishing it from sibling tools like create_routing_strategy, archive_routing_strategy, and get_routing_strategy. The added phrase 'Full document replacement; missing optional fields are cleared' further clarifies the operation scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for replacing an existing routing strategy with a full document, but it does not explicitly state when to use it versus alternatives (e.g., create_routing_strategy or patch_profile). However, the note about clearing missing optional fields provides important guidance on the replacement semantics, making the intended use clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

replace_tenant_templateA
Idempotent
Inspect

Create or replace a tenant notification template (draft unless published is true).

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoOptional title merged into template content when provided
contentNoElemental content object (e.g. elements and version per Courier Elemental schema)
routingNoMessage routing configuration
channelsNoChannel-specific delivery configuration
providersNoProvider-specific routing configuration
publishedNoWhen true, publish immediately after save
tenant_idYesThe tenant ID
template_idYesThe template ID
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=false and idempotentHint=true, but the description adds the key behavioral trait that templates are drafts unless 'published' is true. This goes beyond the annotations and clarifies the default behavior, which is valuable 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler. It front-loads the action and resource, and every word contributes meaningful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core upsert behavior and draft/publish nuance, and the schema fully documents all 8 parameters. It lacks explicit mention of return values or versioning side effects, but for a write operation with idempotentHint, this is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter already has a description. The tool description does not add any additional parameter-level meaning beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Create or replace' and the resource 'tenant notification template', with an important qualifier about draft vs published state. This distinguishes it from sibling tools like publish_tenant_template, create_notification, and delete_tenant_template.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context by indicating this tool is for creating or replacing tenant templates, and the published flag hints at when one might instead use publish_tenant_template. However, it does not explicitly name alternatives or state exclusions, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
message_idYesThe message ID of the original message to resend
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, idempotentHint=false), it discloses important behaviors: the original message remains unchanged, a new messageId is generated, and rate limiting may return 429. These details help the agent anticipate 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with the main purpose and followed by essential behavioral details. No redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with full schema coverage and no output schema, the description provides sufficient context: what it does, side effects, and rate-limit behavior. No critical information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the parameter description already states 'The message ID of the original message to resend.' The tool description adds no further semantic details about message_id, so it does not exceed the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Resend a previously sent message.' It explains the behavior (loads original request, enqueues new send, new messageId, original unchanged) and clearly distinguishes from siblings like send_message and cancel_message.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly implies this is for resending an existing message using its message_id. It does not explicitly contrast with send_message or other alternatives, but the context is clear enough that an agent can infer when to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_listA
Idempotent
Inspect

Restore a previously deleted list.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYesThe list ID
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose the mutation nature (readOnlyHint=false) and idempotency (idempotentHint=true). The description adds the 'previously deleted' context but no further behavioral details such as error handling or permissions, which is acceptable given annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, six-word sentence that is front-loaded and contains 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.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one parameter, no output schema, and clear annotations, the description is adequate. It lacks edge-case behavior (e.g., what happens if the list does not exist or is already restored), but the tool's simplicity and idempotency hint make this acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully documents the single parameter 'list_id' with a clear description. The tool description does not add extra parameter semantics, but none are needed; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Restore') with a clear resource ('list') and context ('previously deleted'), making the tool's purpose unambiguous. It distinguishes itself from siblings like 'delete_list' and 'create_list'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'previously deleted list' implies when to use this tool: when recovery of a deleted list is needed. No explicit alternatives or exclusions are given, but the context is clear enough for a simple tool.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesThe bulk job ID to run
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and idempotentHint=false, so the agent understands this is a mutating, non-idempotent action. The description adds the useful context that delivery is triggered to all added users, but this is limited additional behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that is front-loaded with the action verb 'Run' and includes the key effect. Every word earns its place, making it appropriately sized and structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter, no output schema, and annotations present, the description sufficiently covers purpose and effect. It doesn't mention prerequisites or return values, but these are not necessary given the tool's simplicity and available annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (job_id is described as 'The bulk job ID to run'), so the schema fully documents the parameter. The description adds no extra parameter semantics, warranting the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Run' with the resource 'bulk job' and clearly states the effect ('triggering delivery to all added users'). This distinguishes it from sibling tools like create_bulk_job and get_bulk_job, providing a clear and specific purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context by stating that it triggers delivery to all added users, implying when to use it (after adding users). However, it does not explicitly mention alternatives or exclusions, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_messageAInspect

Send a message to a user using inline title and body content (no template). Optionally specify routing channels.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesMessage body
dataNoKey-value data to include with the message
titleYesMessage title
methodNoRouting method: deliver to all channels or stop after first successall
user_idYesThe recipient user ID
channelsNoChannel names to route through (e.g. email, sms, push). Omit to use default routing.
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and idempotentHint=false, so the description correctly aligns with a non-read-only, non-idempotent operation. The description adds useful context about inline content and optional routing channels, but it does not disclose side effects beyond sending (e.g., message persistence, async delivery, failure behavior).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, composed of two short sentences. The main action is front-loaded, and every phrase adds value—identifying the resource, content style, and routing option—without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 6 parameters and no output schema, the description provides enough core context: it identifies the primary use case and optional routing. It does not explain every parameter (data, method), but those are sufficiently documented in the schema. Given the sibling context and annotations, the description is reasonably complete, though it could explicitly mention when to use this over send_message_template.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all 6 parameters with descriptions (100% coverage), so the baseline is 3. The description adds semantic value by clarifying that title and body are inline (no template) and that channels are optional, which goes slightly beyond the schema's field-level descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Send a message'), the target ('to a user'), and the content format ('inline title and body content (no template)'). It distinguishes itself from template-based variants and list-sending siblings by specifying the inline content and single-user recipient.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly contrasts with template-based tools via 'no template' and indicates single-user targeting. It also notes optional routing channels, suggesting when this tool is appropriate, but it does not explicitly name alternative tools or list exclusions (e.g., 'use send_message_template for templated messages').

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. The template must be published before sending — call publish_notification first if needed. Example: { user_id: "user-123", template: "nt_01abc123", data: { name: "Alex", resetUrl: "https://app.example.com/reset" } }.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNoKey-value data for template variables
methodNoRouting methodall
user_idYesThe recipient user ID
channelsNoChannel names to route through. Omit to use template routing config.
templateYesTemplate ID or notification slug
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false and idempotentHint=false, already conveying a mutating, non-idempotent operation. The description adds the crucial prerequisite that the template must be published, along with a concrete example, but does not disclose other behavioral aspects like immediate vs. queued delivery or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences: a clear purpose, a necessary prerequisite with an alternative action, and a practical example. Every sentence adds value with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description doesn't need to detail return values. It covers the operation's purpose, prerequisite, and usage example. The schema handles parameter details like channels and method, so the description is sufficiently complete for a send action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% field descriptions, but the description's example enriches parameter understanding by showing how user_id, template, and data keys map to actual values. This adds semantic clarity beyond the schema's raw definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Send a message to a user using a published notification template.' This distinguishes it from siblings like send_message, send_message_to_list, and publish_notification by specifying the use of a template and the prerequisite publication step.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear contextual guidance by stating the template must be published and directing to call publish_notification if needed. This helps the agent understand a key precondition, though it does not explicitly contrast with alternatives such as send_message for raw sends.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesMessage body
dataNoKey-value data to include
titleYesMessage title
methodNoRouting methodall
list_idYesThe list ID to send to
channelsNoChannel names to route through. Omit to use default routing.
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and idempotentHint=false, so the mutation and non-idempotent nature are known. The description adds that all subscribers are targeted and content is inline, but does not disclose rate limits, auth requirements, or the impact of the 'method' parameter (single vs all). It provides some value beyond annotations but lacks deeper 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the core action and avoids any filler. Every word earns its place, making it highly concise and easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 6 parameters, 3 required, nested objects, and no output schema, this description is insufficiently complete. It only covers list_id, title, and body; it omits the routing method (all vs single), channel routing, and any mention of return values or post-send behavior. Given sibling tools and the tool's complexity, the description leaves significant gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with meaningful descriptions for all parameters, including list_id, method, and channels. The description merely echoes that title and body are the inline content, adding no new parameter-level insight. Baseline 3 is appropriate as the schema carries the semantic weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (send), the target (all subscribers of a list), and the approach (inline title and body content). It distinguishes from sibling tools like send_message_to_list_template by specifying inline content, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for list-wide sends with inline content, but it does not explicitly mention when to use this tool versus alternatives like send_message or send_message_to_list_template. No exclusions or conditions are provided, leaving the guidance to be inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_message_to_list_templateAInspect

Send a message to all subscribers of a list using a notification template.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNoKey-value data for template variables
methodNoRouting methodall
list_idYesThe list ID to send to
channelsNoChannel names to route through. Omit to use template routing config.
templateYesTemplate ID or notification slug
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey readOnly=false and idempotent=false, and the description adds value by specifying the broadcast scope and template usage. However, the description says 'all subscribers' without acknowledging the 'method' parameter's 'single' option, which could be misleading. No side effects, rate limits, or return behavior are disclosed, but the schema partially fills these gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the core action and target, with no redundant words. It is as concise as possible while conveying the key purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 parameters including a `method` enum, a nested `data` object, and `channels` array, the description is somewhat sparse. It does not mention the 'single' routing option or the customizable channels, though these are documented in the schema. The tool is more complex than the description implies, but the high schema coverage mitigates the gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All five parameters have descriptions in the input schema (100% coverage), so the description does not need to compensate for missing schema info. The description adds no parameter-specific details beyond what the schema already states, aligning with the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (send), target (all list subscribers), and medium (notification template), making it distinct from sibling tools like send_message (generic single message) and send_message_template (likely sends to an individual). The verb+resource structure is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'to all subscribers of a list' provides clear context for when to use this tool: when the intent is a bulk template-based send to a list's entire audience. However, it does not explicitly mention alternatives or exclusion cases (e.g., when to use send_message_to_list or send_message_template), so it stops short of full comparative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

subscribe_user_to_listA
Idempotent
Inspect

Subscribe a user to a list. Creates the list if it doesn't exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYesThe list ID
user_idYesThe user ID to subscribe
preferencesNoOptional notification preferences
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false (mutation) and idempotentHint=true (idempotent). The description adds a valuable behavioral detail beyond annotations: the side effect 'Creates the list if it doesn't exist.' This discloses a potentially surprising behavior not evident from the schema or annotations. However, it doesn't explain other behaviors like preference handling or return values, so it's not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no redundancy. Every word contributes: it identifies the action, the target, and a critical side effect. It is front-loaded with the primary purpose and follows with a concise caveat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 params and no output schema, the description provides enough core context: what it does and a key side effect. The optional preferences parameter is adequately described in the schema, so not explaining it in the description is acceptable. It could potentially mention idempotency implications or return behavior, but the annotations cover idempotency. Overall, it's sufficiently complete for its simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for all three parameters, so the schema already documents list_id, user_id, and preferences. The description's mention of 'Creates the list if it doesn't exist' adds context to list_id's semantics (it can be a new list), but it doesn't elaborate on format, constraints, or preferences. Per the baseline rule for high schema coverage, a score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb+resource: 'Subscribe a user to a list.' It also adds a key distinguishing behavior: 'Creates the list if it doesn't exist,' which differentiates it from sibling tools like subscribe_user_to_lists (plural) and add_subscribers_to_list. This is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its usage by stating the action and auto-create behavior, but it does not explicitly mention when to use this tool versus alternatives such as subscribe_user_to_lists, bulk_subscribe_to_list, or unsubscribe_user_from_list. There is no 'use this when' or 'instead of' guidance, making it dependent on the agent inferring context from the tool name and sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

subscribe_user_to_listsA
Idempotent
Inspect

Subscribe a user to one or more lists. Creates lists that do not exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
listsYesArray of lists to subscribe to
user_idYesThe user ID
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnlyHint=false and idempotentHint=true. The description adds the notable side effect that missing lists are automatically created, which is useful beyond annotations. However, it does not disclose error handling, partial failures, or effects on existing subscriptions, so the additional context is limited.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, with the primary action front-loaded and the key behavior (auto-creation) stated succinctly. There is no redundant or filler content, making it concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has only two parameters, no output schema, and annotations that cover safety. The description covers the core behavior sufficiently for a simple mutation, but it omits details about return values, error scenarios, or when to prefer this over related tools like bulk_subscribe_to_list, so it is minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: both user_id and lists are documented, and the nested listId and preferences have descriptions. The description does not add any extra meaning beyond what the schema already provides, so it relies on the schema's parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the specific action: subscribing a user to one or more lists, and adds the unique behavior of creating any lists that do not exist. This clearly distinguishes it from sibling tools like subscribe_user_to_list and bulk_subscribe_to_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when you need to subscribe a user to multiple lists and want auto-creation, but it does not explicitly mention alternatives or provide exclusions. Sibling tools like the singular subscribe_user_to_list are not referenced, so usage 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.

track_inbound_eventA
Idempotent
Inspect

Track an inbound event that can trigger automations. Requires event name, messageId (for deduplication), and properties.

ParametersJSON Schema
NameRequiredDescriptionDefault
eventYesThe event name (appears as trigger in Automation Trigger node)
userIdNoUser ID associated with the event
messageIdYesUnique ID for deduplication (returns 409 if not unique)
propertiesYesEvent properties payload
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and idempotentHint=true. The description adds valuable behavioral context: it mentions deduplication via messageId and that tracking can trigger automations, which are side-effecting behaviors beyond a simple write. It does not contradict the annotations and adds detail about the deduplication/automation 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences: the first clearly states the purpose, the second lists required parameters. Every sentence earns its place, with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (4 params, 3 required, nested object, no output schema) and existing annotations, the description provides sufficient context: it states the purpose, required fields, and deduplication behavior. It doesn't describe return values, but with no output schema and the simple nature of a tracking tool, 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description restates that event, messageId, and properties are required, and notes messageId's deduplication role, which is also in the schema. It adds minimal semantic value beyond the schema descriptions (e.g., event appears as a trigger, messageId returns 409 on duplicate).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'track' with a clear resource 'inbound event' and states its purpose ('can trigger automations'). This distinguishes it from sibling invoke tools like invoke_ad_hoc_automation by clarifying this is for inbound event tracking 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by mentioning that the event can trigger automations, and lists required parameters. However, it does not explicitly state when to use this tool over alternatives (e.g., invoke_ad_hoc_automation) or provide any exclusion criteria, so guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unsubscribe_user_from_listA
DestructiveIdempotent
Inspect

Unsubscribe a user from a list.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idYesThe list ID
user_idYesThe user ID to unsubscribe
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the agent knows this is a destructive yet repeatable operation. The description adds no further behavioral context such as side effects or permanence, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no filler words. It is front-loaded and efficiently communicates the core operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with annotations covering destructiveness and idempotency, the description is adequate. It lacks explicit return-value information, but the absence of an output schema and the straightforward action make this a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides 100% coverage with descriptions for both list_id and user_id. The description adds no additional parameter-specific 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (unsubscribe) and the objects (a user from a list). It distinguishes from sibling tools like subscribe_user_to_list by indicating the opposite operation and from bulk operations by implying a single user-list pair.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as delete_user_list_subscriptions or bulk unsubscribe tools. The description only states the action without any context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_audienceA
Idempotent
Inspect

Create or update an audience with a filter definition.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDisplay name
filterNoFilter definition object (operator, rules)
audience_idYesThe audience ID
descriptionNoDescription
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description adds the create-or-update behavior, but annotations already declare idempotentHint=true and readOnlyHint=false. It does not disclose extra context like side effects, permissions, or resource handling, but does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded, no filler. Every word contributes to meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Description is adequate for a simple tool with full schema and annotations, but lacks explicit upsert semantics (what happens if audience_id already exists) and return format. There is a slight mismatch: filter is highlighted but not required in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% parameter description coverage, so baseline is 3. The description's mention of 'a filter definition' aligns with the schema's filter property but adds no new semantic detail beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses specific verb 'Create or update' with resource 'audience' and scope 'with a filter definition', clearly distinguishing it from sibling get/delete/list operations on audiences.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use guidance or alternatives mentioned. The purpose implies it handles audience creation/updating but does not state conditions or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_brandA
Idempotent
Inspect

Replace an existing brand with new values.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesBrand display name
brand_idYesThe brand ID to update
settingsNoBrand settings (colors, email, inapp)
snippetsNoBrand snippets
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a write operation (readOnlyHint=false) and idempotency (idempotentHint=true). The description adds the word 'replace' but does not clarify critical behaviors like whether unsupplied optional fields are cleared or merged, making the behavioral disclosure incomplete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short, clear sentence with no filler or redundant information. Every word earns its place and it is immediately understandable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with nested objects and no output schema, the description is quite sparse. The comprehensive schema and annotations cover parameter details and some behavioral aspects, but the ambiguity around 'replace' affecting nested settings/snippets leaves a gap in completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides complete descriptions for all four parameters (100% coverage), so the description does not need to explain them. It adds only the generic phrase 'new values,' which provides no additional meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Replace') with a clear resource ('existing brand') and action ('with new values'), which distinguishes it from create/delete/get siblings. However, it does not explicitly name alternatives or clarify the full replacement semantics beyond the verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied by the phrase 'existing brand'—it is for modifying an already-created brand—but there is no explicit guidance about when to use this versus create_brand or list_brands, nor any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_notification_checksA
Idempotent
Inspect

Update check statuses for a notification submission.

ParametersJSON Schema
NameRequiredDescriptionDefault
checksYesChecks to update
submission_idYesThe submission ID for the checks resource
notification_idYesThe notification template ID
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and idempotentHint=true, which align with the description's 'Update' action. The description adds no extra behavioral context such as side effects, permissions, or response behavior, but the annotations lower 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one concise sentence, front-loaded with the action and content. Every word earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple update tool with full schema coverage and annotations, the description is largely sufficient. It lacks return value behavior, but the absence of an output schema is partially mitigated by the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the description adds no parameter meaning beyond what the schema already provides. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Update') and resource ('check statuses for a notification submission'), clearly distinguishing it from sibling tools like list_notification_checks (read) and cancel_notification_submission (cancel).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the name and description but not explicitly stated. No alternatives or when-not-to-use guidance is provided, though the contrast with list_notification_checks is obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_providerA
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasNoShort alias
titleNoDisplay name
providerYesProvider key (must match existing; changing provider type is not supported)
settingsNoProvider-specific settings
provider_idYesThe provider configuration ID
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral context beyond the annotations. Annotations indicate readOnlyHint=false and idempotentHint=true, but the description explains the full replacement semantics ('omitted optional fields are cleared') and the real-world consequence ('Changing API keys or settings affects live delivery if this integration is in use'). This is exactly the kind of detail that helps an agent understand 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each earning its place. The first sentence states the core purpose, the second details the replacement semantics and prerequisite, and the third warns about operational impact. It is front-loaded and free of extraneous detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 parameters, nested settings object, no output schema), the description covers the essential aspects: what it does, the prerequisite (get_provider), the treatment of optional fields, and the live delivery impact. It does not describe error cases or authorization requirements, but these are less critical for a replace operation with clear annotations and schema. The description is sufficient for confident use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already includes descriptions for all parameters (100% coverage), but the description adds valuable meaning about how optional parameters are treated: 'omitted optional fields are cleared.' This directly informs parameter semantics, especially for alias, title, and settings. The schema says provider key 'must match existing,' which is reinforced by the description's 'existing provider configuration.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Replace an existing provider configuration.' It explicitly distinguishes this from create/delete/get operations by emphasizing 'existing' and 'full replacement.' The note to 'retrieve current config with get_provider first' further clarifies the intended use case and differentiates it from related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: use when replacing an existing provider configuration, and explicitly instructs to first retrieve the current config with get_provider. It also warns about the impact on live delivery. However, it does not explicitly state when not to use this tool or name alternatives like create_provider or delete_provider, though these are implied by the word 'existing.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_tenant_preferenceA
Idempotent
Inspect

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"] }.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYesSubscription status for the topic
topic_idYesThe 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_idYesThe tenant ID
custom_routingNoDefault channels when has_custom_routing is enabled
has_custom_routingNoWhen true, use custom_routing instead of template defaults
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false and idempotentHint=true, which the description complements by explaining the tool's scope (tenant-level, not per-user) and the 404 error condition. The example illustrates the expected payload structure, adding useful behavioral context beyond the annotations. However, it does not describe the success response or any side effects on existing preferences.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded: the main action is stated first, followed by a crucial distinction, an error hint, and a useful example. Every sentence serves a purpose, and the example is compact. No redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters and no output schema, the description covers the essential context: scope, error behavior, and a concrete usage example. It lacks explicit mention of the return value or success criteria, but given the annotations and schema coverage, this is a minor gap. Overall, it provides enough context for an agent to select and use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all parameters, so the baseline is 3. The description adds value by showing a complete example that clarifies how has_custom_routing and custom_routing interact, and by explicitly tying topic_id to the 404 error. This goes beyond the schema's individual parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Set the default notification preference'), the target resource ('subscription topic on a tenant'), and explicitly distinguishes from per-user preferences. It also includes a concrete example, making the purpose unambiguous and differentiating it from sibling tools like update_user_preference_topic.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use and when-not-to-use guidance: it controls tenant-level defaults and does NOT set per-user preferences, directing to the user preferences API. It also specifies the prerequisite (topic_id must exist) and interprets the 404 error, giving clear operational context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_translationB
Idempotent
Inspect

Create or update a translation for a specific locale.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesTranslation content (PO file format)
domainNoTranslation domaindefault
localeYesLocale code (e.g. en_US, fr_FR)
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and idempotentHint=true, so the safety profile is known. The description adds the 'create or update' upsert semantics, which is useful behavioral context beyond the annotations, but it doesn't disclose details like replacement behavior or 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.

Conciseness5/5

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 core action and target in ten words, earning its place entirely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (3 params, no output schema) and annotations plus schema cover most operational details. However, the description lacks any context about what a 'translation' refers to in this system, which could be ambiguous given many sibling tools. Still, it provides adequate minimum for a straightforward upsert.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with each parameter having a clear description (body as PO file format, domain with default, locale with example). The tool description itself adds no extra parameter information 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Create or update') and resource ('a translation for a specific locale'). It distinguishes from the sibling get_translation by indicating write capability, but doesn't explicitly differentiate from other locale-related tools like put_notification_locale, so it misses full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 prefer this over other translation/locale tools, no prerequisites, and no exclusion criteria. It is a bare functional statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_user_preference_topicA
Idempotent
Inspect

Update a user's preference for a specific subscription topic (opt in, opt out, or set channel preferences).

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYesPreference status
user_idYesThe user ID
topic_idYesThe subscription topic ID
custom_routingNoCustom channel routing order
has_custom_routingNoWhether custom channel routing is set
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and idempotentHint=true, so the description adds value by specifying the types of updates (opt-in/out, channel preferences). However, it does not disclose what happens to custom_routing when omitted, whether the operation replaces existing settings, or any prerequisites. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is one concise sentence that is front-loaded with the action and resource, followed by clarifying examples. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and 5 parameters, the description covers the core purpose but leaves gaps: it doesn't explain how custom_routing interacts with status, whether status is required when setting channel preferences, or what the API returns. Adequate for simple usage but not fully complete given the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the baseline is 3. The description adds meaning by linking 'opt in, opt out' to the status parameter and 'channel preferences' to custom_routing, which helps the agent understand the semantic relationship beyond raw field names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (update), the resource (user preference for a subscription topic), and the specific operations (opt in, opt out, or set channel preferences). It distinguishes from sibling tools like bulk_update_user_preferences by emphasizing a single user and specific topic.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: it is for updating a specific user-topic preference, not for bulk operations. However, it does not explicitly mention alternatives like bulk_update_user_preferences or replace_preference_topic, so it falls short of a full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Manage 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.
    22
    12
    MIT
  • F
    license
    -
    quality
    D
    maintenance
    Enables sending emails (including mass emailing), querying, updating, and canceling delayed emails via the Resend API.
  • A
    license
    B
    quality
    C
    maintenance
    Manages SendGrid email workflows including design library, transactional templates, marketing contacts and lists, single sends, and direct email sends via the SendGrid v3 API.
    80
    581
    MIT
  • A
    license
    B
    quality
    F
    maintenance
    Provides an interface to manage email marketing, contact lists, dynamic templates, and email analytics via SendGrid's API.
    21
    581
    29
    ISC

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.