MCP Braze
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Brazelist my campaigns"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Braze
Production-ready MCP server for Braze customer engagement
Built with the MCP SDK — Works with Claude Desktop & Claude.ai
Overview
A comprehensive MCP server enabling AI assistants to interact with Braze's customer engagement platform. Features 92 tools covering user management, messaging, campaigns, analytics, email/SMS operations, catalogs, and SCIM provisioning—built for production reliability.
Related MCP server: Braze Universal MCP Server
Δ Capabilities
Core
92 Tools — Users, messaging, campaigns, analytics Multi-Channel — Push, email, SMS, in-app, webhooks Header Auth — Multi-tenant ready architecture
Reliability
Circuit Breaker — Cascading failure prevention Auto-Retry — Exponential backoff with jitter Health Checks — K8s liveness & readiness probes
Security
Input Validation — Zod schemas everywhere Injection Prevention — XSS & path attacks blocked Rate Limiting — Token bucket algorithm
Performance
Request Queue — Concurrency control (10 max) Request Deduplication — Shares concurrent results Response Caching — TTL-based with LRU eviction
Quick Start
npm install && npm run build
node dist/index.jsConfiguration
{
"mcpServers": {
"braze": {
"command": "node",
"args": ["/path/to/mcp-braze/dist/index.js"],
"env": {
"BRAZE_API_KEY": "your-api-key",
"BRAZE_REST_ENDPOINT": "https://rest.iad-01.braze.com"
}
}
}
}{
"mcpServers": {
"braze": {
"command": "npx",
"args": [
"-y", "mcp-remote",
"https://your-server.com/mcp",
"--header", "x-braze-api-key:your-api-key",
"--header", "x-braze-rest-endpoint:https://rest.iad-01.braze.com"
]
}
}
}Deploy server with HTTP transport
Claude.ai → Settings → Connectors
Add URL:
https://your-server.com/mcpAdd headers:
x-braze-api-key,x-braze-rest-endpoint
Platform | Config Path |
macOS |
|
Windows |
|
β Tools
Category | Tools |
Users |
|
Messaging |
|
Scheduling |
|
Exports |
|
| |
SMS |
|
Subscriptions |
|
Templates |
|
Catalogs |
|
Preferences |
|
SCIM |
|
° Deprecated — use email_blocklist instead
Usage
"Track a purchase event for user123 with amount $99.99"
"Send the welcome campaign to users who signed up today"
"Get campaign analytics for the last 30 days"
"List all users in the Premium segment"
"Create a new email template for order confirmations"Authentication
Priority | API Key | REST Endpoint |
1 |
|
|
2 |
|
|
3 |
|
|
4 |
| — |
Braze REST Endpoints
Region | Endpoint |
US-01 |
|
US-02 |
|
US-03 |
|
US-04 |
|
US-05 |
|
US-06 |
|
US-07 |
|
US-08 |
|
EU-01 |
|
EU-02 |
|
Find your endpoint in Braze Dashboard → Settings → APIs and Identifiers
Stability & Resilience
Auto-retries on HTTP 429, 500, 502, 503, 504
Handles network errors (ECONNRESET, ETIMEDOUT, ECONNREFUSED)
Respects
Retry-AfterheadersConfigurable max retries, delays, jitter
Prevents cascading failures:
CLOSED — Normal operation
OPEN — Fast-fail mode (5 failures trigger)
HALF_OPEN — Recovery testing
Timeout: 30s default (AbortController)
Deduplication: Shares identical concurrent requests
Queue: Limits to 10 concurrent requests
Rate Limiting: Token bucket algorithm
Kubernetes-ready probes:
health— Full status reportliveness— Alive checkreadiness— Traffic ready
Deployment
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY dist ./dist
EXPOSE 3000
CMD ["node", "dist/index.js"]docker build -t mcp-braze .
docker run -p 3000:3000 \
-e BRAZE_API_KEY=your-key \
-e BRAZE_REST_ENDPOINT=https://rest.iad-01.braze.com \
mcp-braze# Server
PORT=3000
NODE_ENV=production
# Auth (prefer headers in production)
BRAZE_API_KEY=
BRAZE_REST_ENDPOINT=
BRAZE_APP_ID=
# Rate Limiting
RATE_LIMIT_ENABLED=true
RATE_LIMIT_REQUESTS_PER_SECOND=10
# Caching
CACHE_ENABLED=true
CACHE_TTL_SECONDS=300
CACHE_MAX_SIZE=1000
# Circuit Breaker
CIRCUIT_BREAKER_ENABLED=true
CIRCUIT_BREAKER_THRESHOLD=5
CIRCUIT_BREAKER_RESET_TIMEOUT=60000
# Logging
LOG_LEVEL=info
# Sentry (Optional)
SENTRY_DSN=
SENTRY_ENVIRONMENT=productionArchitecture
src/
├── index.ts # Entry point
├── server.ts # MCP server init
├── tools/ # 92 tools
│ ├── users.ts
│ ├── messaging.ts
│ ├── scheduling.ts
│ ├── exports.ts
│ ├── email.ts
│ ├── sms.ts
│ ├── subscriptions.ts
│ ├── templates.ts
│ ├── catalogs.ts
│ ├── preference-center.ts
│ └── scim.ts
└── lib/ # Core utilities
├── auth.ts # API key extraction
├── client.ts # Braze HTTP client
├── validation.ts # Zod schemas
├── errors.ts # Error handling
├── retry.ts # Backoff
├── circuit-breaker.ts # Failure prevention
├── rate-limiter.ts # Token bucket
├── cache.ts # TTL cache
├── request-queue.ts # Concurrency
├── deduplication.ts # Request dedup
├── idempotency.ts # Safe retries
├── health.ts # K8s probes
├── logger.ts # Structured logging
└── sentry.ts # Error tracking~3,500 lines · 154 unit tests · 126 e2e tests
References
MCP Specification | |
MCP SDK | |
mcp-remote | |
Braze API |
MIT License
DELTΔ & βETΑ
From Change to What's Next
Available Tools
92 toolscampaigns_analyticsC
Get campaign performance analytics over time.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| length | Yes | Number of days to return (max 100) | |
| ending_at | No | End date (ISO 8601) | |
| campaign_id | Yes | Campaign ID | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does not state that this is a read-only operation, what authentication is required, how results are returned, or any rate limits. 'Over time' hints at a time series, but return format, granularity, and pagination remain undocumented.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately sized for a simple analytics retrieval tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter analytics tool with no annotations and no output schema, the description is too sparse. It does not clarify available metrics, time-range behavior beyond the schema, or how it relates to other analytics siblings, leaving important context missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters. The description adds no additional parameter meaning, making the baseline score of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Get campaign performance analytics over time.' It is not a tautology and conveys the core action. However, it does not explicitly distinguish this tool from siblings like sends_analytics or canvas_analytics, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance or alternatives are given. An agent must infer that this is for campaign-level analytics rather than sends, canvas, segments, or events analytics. No exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaigns_detailsC
Get details for a specific campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| campaign_id | Yes | Campaign ID | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not state that this is a read-only lookup, whether it requires an existing campaign, or what the response contains. For an unannotated retrieval tool with auth parameters, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no wasted words, which is structurally sound. But the brevity reflects under-specification rather than disciplined concision, so it earns only a middling score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and no parameter commentary in the description, an agent lacks key details: read-only semantics, failure behavior for unknown campaign_id, and whether the apiKey/restEndpoint parameters are caller-supplied or preconfigured. The definition is thin for a tool in a crowded sibling set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so campaign_id, apiKey, and restEndpoint are each documented in the schema. The description adds no format, ID-source, or auth-scoping context beyond that, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get details for a specific campaign'), which is clear enough on its own. However, it gives no differentiation from close siblings like campaigns_list, campaigns_analytics, canvas_details, or segments_details, leaving the agent to infer boundaries from names alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus campaigns_list or campaigns_analytics, and no mention of prerequisites or required identifiers beyond the schema. The agent must infer usage entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaigns_listC
List all campaigns in the workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (0-indexed) | |
| apiKey | No | Braze REST API key | |
| restEndpoint | No | Braze REST endpoint URL | |
| sort_direction | No | ||
| include_archived | No | Include archived campaigns | |
| last_edit_time_gt | No | Filter by edit time (ISO 8601) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and falls short: it says 'all campaigns' but never mentions pagination (despite a 'page' parameter), that archived campaigns are excluded unless include_archived is set, or that authentication credentials are required. Nothing about rate limits or return behavior is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero filler and the resource front-loaded. It is efficient, though its brevity contributes to the under-specification noted in other dimensions rather than being a model of dense information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter list tool with no annotations and no output schema, the description is too thin. It omits pagination behavior, archiving defaults, filtering semantics, and what the response contains — all of which an agent needs to call this correctly alongside 70+ siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents page, include_archived, last_edit_time_gt, apiKey, and restEndpoint. The description adds no parameter meaning beyond that, which is the baseline expectation when the schema does the heavy lifting; only sort_direction lacks a schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List all campaigns') with clear scope ('in the workspace'), so an agent immediately knows the operation. However, it does nothing to distinguish itself from closely related siblings such as campaigns_details, campaigns_analytics, or canvas_list, leaving the agent to infer which is appropriate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like campaigns_details (a single campaign) or campaigns_analytics (metrics). No prerequisites, no mention of the required API key/endpoint parameters, and no exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaigns_schedule_createC
Schedule an API-triggered campaign for future delivery.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| send_id | No | ||
| audience | No | ||
| schedule | Yes | ||
| broadcast | No | ||
| recipients | No | ||
| campaign_id | Yes | API-triggered campaign ID | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies creation of a schedule but says nothing about required auth (apiKey/endpoint), whether re-scheduling an existing campaign overwrites prior schedules, whether the campaign must already be API-triggered, or 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, which is well-structured. However, the extreme brevity leaves the complexity of an 8-parameter tool unaddressed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 params, nested objects, low schema coverage, no output schema and no annotations, one sentence is clearly insufficient. Nothing about prerequisites, side effects or required campaign state is conveyed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 38% across 8 parameters including nested audience, recipients and schedule objects, and the description adds zero parameter meaning. The undocumented params (send_id, broadcast, audience, recipients) are left entirely to the agent to guess.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Schedule'), resource ('API-triggered campaign') and scope ('for future delivery'). The 'API-triggered' qualifier usefully distinguishes it from a general campaign scheduler, but it does not explicitly name sibling alternatives like messages_schedule_create or campaigns_schedule_update, so the differentiation is implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this versus campaigns_trigger_send (immediate send) or the update/delete schedule variants. An agent must infer from the name alone that this creates a new schedule rather than modifying one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaigns_schedule_deleteC
Delete a scheduled API-triggered campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| campaign_id | Yes | Campaign ID | |
| schedule_id | Yes | Schedule ID to delete | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden, and it discloses almost nothing. It does not confirm the operation is destructive/irreversible, whether it cancels or merely detaches the schedule, what permissions are required, or what happens if the schedule_id is invalid. The 'API-triggered' qualifier is the only added behavioral hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste. It is efficient, though so terse that it borders on under-specification for a destructive operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no annotations and no output schema, the definition is too thin. It omits confirmation of what gets destroyed, authorization requirements, and any post-delete state an agent would need to reason about before calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the two required IDs and the auth/endpoint parameters are already documented in the schema; this sets the baseline at 3. The description adds no syntax, format, or sourcing detail beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Delete') and resource ('scheduled API-triggered campaign'), which cleanly separates it from campaigns_schedule_create and campaigns_schedule_update. It does not explicitly name the near-identical siblings canvas_schedule_delete or messages_schedule_delete, but the resource qualifier 'campaign' makes the scope inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives, no prerequisites (e.g., the campaign must have an existing API-triggered schedule), and no exclusions. The agent must infer everything 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.
campaigns_schedule_updateC
Update a scheduled API-triggered campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| schedule | Yes | ||
| campaign_id | Yes | Campaign ID | |
| schedule_id | Yes | Schedule ID to update | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Update' implies a mutation, but nothing is said about required permissions, whether the update is idempotent or reversible, how it interacts with an existing schedule, or what happens on failure. For a mutation endpoint with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with no wasted words and the action front-loaded, which is efficient. But for a five-parameter tool with a nested schedule object, the description is undersized rather than appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutation tool with no annotations, no output schema, and a nested object parameter set. The description supplies none of the missing context (preconditions, mutation semantics, effect on the existing schedule), leaving an agent without enough to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the schema already documents campaign_id, schedule_id, and the nested schedule fields (time, in_local_time, at_optimal_time). The description adds nothing beyond that baseline, which is the expected 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb (Update) and resource (scheduled API-triggered campaign), and the 'API-triggered' qualifier narrows the campaign type. However, it does nothing to distinguish this from siblings like campaigns_schedule_create, campaigns_schedule_delete, or canvas_schedule_update, so an agent still has to infer which schedule operation to pick from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus creating or deleting a schedule, no prerequisite or precondition, and no mention of alternatives. The agent is left to infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaigns_trigger_sendB
Trigger an API-triggered campaign. The campaign must be configured as API-triggered in Braze.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| send_id | No | Custom send identifier | |
| audience | No | ||
| broadcast | No | ||
| recipients | No | Specific recipients | |
| campaign_id | Yes | API-triggered campaign ID | |
| restEndpoint | No | Braze REST endpoint URL | |
| trigger_properties | No | Personalization properties |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden and fails to. It does not state that this is a live send (irreversible), whether send_id deduplicates or provides idempotency, auth requirements beyond the apiKey field, rate limits, or what a successful response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, purpose front-loaded ahead of the prerequisite, with no filler. It is efficient, though the sparseness is a coverage problem rather than a conciseness virtue.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter send tool with nested audience/recipients objects, zero annotations, and no output schema, the description is insufficient. An agent gets no guidance on the audience/recipients/broadcast interaction, recipient dedup via send_id, or what constitutes success.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, so the schema documents most parameters (apiKey, send_id, campaign_id, restEndpoint, recipients, trigger_properties) while broadcast and audience are bare. The description adds no meaning beyond the schema — notably it never explains audience vs recipients or broadcast semantics — so the baseline 3 stands.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Trigger) and resource (API-triggered campaign) and names Braze as the system. It does not differentiate itself from near-siblings like canvas_trigger_send or messages_send, so an agent must infer the distinction from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides one real prerequisite — the campaign must be pre-configured as API-triggered — which is genuinely actionable. It says nothing about when to prefer this over canvas_trigger_send, messages_send, or campaigns_schedule_create, so alternative-selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canvas_analyticsC
Get Canvas performance analytics over time.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| length | Yes | Number of days | |
| canvas_id | Yes | Canvas ID | |
| ending_at | No | ||
| restEndpoint | No | Braze REST endpoint URL | |
| include_step_breakdown | No | ||
| include_variant_breakdown | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It implies a time-series read via 'over time' but says nothing about required authentication (apiKey/restEndpoint), the maximum allowed length, rate limits, whether results are paginated, or what happens if the Canvas ID is invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no padding or redundancy. It is economical, though its brevity is also the source of its incompleteness rather than a sign of tight editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with 7 parameters, no annotations, no output schema, and 57% schema coverage, the description is far too thin. It lacks any explanation of the step/variant breakdown options, the time-range semantics, or the response shape an agent needs to interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 57%, and the description adds no parameter detail beyond the vague 'over time' hint. The three undocumented parameters (ending_at, include_step_breakdown, include_variant_breakdown) are neither explained in the schema nor in the description, leaving meaningful gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (Get) and resource (Canvas performance analytics) and adds a temporal scope ('over time'), which distinguishes it from canvas_details and canvas_summary. However, it does not explicitly differentiate itself from the near-identical campaigns_analytics or sends_analytics siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus canvas_summary, canvas_details, or campaigns_analytics, nor any mention of prerequisites such as a required Canvas ID or time window. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canvas_detailsC
Get details for a specific Canvas.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| canvas_id | Yes | Canvas ID | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose whether this is a read-only operation, any rate limits, authentication requirements (beyond the apiKey parameter), or what the return format looks like. For a detail-fetch tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. It efficiently conveys the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should do more to explain behavioral aspects like read-only nature, authentication, and return details. The minimal description leaves 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: all three parameters (apiKey, canvas_id, restEndpoint) are documented in the schema. The description adds no 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (details for a specific Canvas), and names the identifier. It is differentiable from siblings like canvas_list or canvas_summary by the word 'specific', though it does not explicitly contrast with canvas_summary which could also return details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives like canvas_summary, canvas_analytics, or canvas_list. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canvas_listC
List all Canvases in the workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| apiKey | No | Braze REST API key | |
| restEndpoint | No | Braze REST endpoint URL | |
| sort_direction | No | ||
| include_archived | No | ||
| last_edit_time_gt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It doesn't disclose pagination behavior, authentication requirements (apiKey/restEndpoint), or whether the list is filtered by default (e.g., include_archived). For a list tool with 6 parameters and no annotations, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that is front-loaded with the essential action. It contains no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (6 parameters, no output schema, no annotations) and low schema description coverage, the description is incomplete. It fails to explain pagination, filtering options, or authentication, which are crucial for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 33% (only apiKey and restEndpoint are described). The description adds no meaning for the other parameters (page, sort_direction, include_archived, last_edit_time_gt), leaving them undocumented. A baseline of 3 is not warranted because the description does not compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('List') and resource ('Canvases in the workspace'), which is easily distinguishable from siblings like canvas_details or canvas_analytics. However, it lacks explicit differentiation from campaigns_list (a similar list tool for a different resource).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like canvas_details or campaigns_list. The description only states what it does, not when to use it or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canvas_schedule_createC
Schedule an API-triggered Canvas for future delivery.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| audience | No | ||
| schedule | Yes | ||
| broadcast | No | ||
| canvas_id | Yes | API-triggered Canvas ID | |
| recipients | No | ||
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It contributes only the fact that the Canvas must be API-triggered; it says nothing about required API key/permissions, idempotency, behavior when a schedule already exists, or reversibility. For a scheduling mutation with zero annotation coverage this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the verb and resource first and no filler. It is efficient, though the brevity is partly under-specification rather than tight editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters, nested objects, 43% schema coverage, no annotations, and no output schema, the description should do meaningful work but does not. An agent cannot determine prerequisites (API-triggered Canvas, auth), scheduling conflict behavior, or parameter usage from it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 43% across 7 parameters, including nested audience, recipients, and schedule objects, so the burden falls on the description. The description explains none of them — it does not clarify broadcast vs recipients, the schedule.time format, or how canvas_id relates to 'API-triggered'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Schedule an API-triggered Canvas') plus the outcome ('future delivery'), which implicitly separates it from the immediate-send canvas_trigger_send and from canvas_schedule_update/delete siblings. It does not name any sibling explicitly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance. The phrase 'for future delivery' hints that this is the deferred counterpart to canvas_trigger_send, but the agent is left to infer that routing, and nothing states prerequisites or when to prefer update vs create.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canvas_schedule_deleteC
Delete a scheduled API-triggered Canvas.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| canvas_id | Yes | Canvas ID | |
| schedule_id | Yes | Schedule ID to delete | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It says 'Delete' but never states that the schedule is removed while the Canvas itself survives, that the deletion is irreversible, or whether special permissions/API key scopes are required. For a destructive operation with zero annotation coverage this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the action front-loaded and no filler. It is efficient, though its brevity borders on under-specification for a destructive tool rather than being an example of well-packed conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, two-required-parameter tool with no annotations and no output schema, the description omits critical context: scope of destruction (schedule only vs. Canvas), irreversibility, and auth/permission expectations. An agent could call it correctly, but would do so without knowing the consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (canvas_id, schedule_id, apiKey, restEndpoint all documented), so the baseline is 3. The description adds nothing about parameter meaning beyond what the schema already spells out.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Delete) and resource (a scheduled API-triggered Canvas), and the resource name distinguishes it from the sibling campaigns_schedule_delete and messages_schedule_delete. It does not explicitly name those siblings, but the resource specificity makes selection unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of the sibling alternatives (campaigns_schedule_delete, messages_schedule_delete) or of canvas_schedule_update as a non-destructive path. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canvas_schedule_updateC
Update a scheduled API-triggered Canvas.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| schedule | Yes | ||
| canvas_id | Yes | Canvas ID | |
| schedule_id | Yes | Schedule ID to update | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full behavioral burden. It does not disclose permissions, side effects, reversibility, rate limits, or response behavior for a mutation tool; only the word 'Update' implies a write.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single front-loaded sentence with no filler. It is appropriately concise, though sparse; missing detail is scored elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Mutation tool with no annotations, no output schema, nested object, and five parameters needs more context. The description leaves usage, behavior, and return expectations unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so baseline is 3. The description adds no parameter meaning beyond the schema; nested schedule fields are documented in the schema, not the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Update' and resource 'scheduled API-triggered Canvas', which separates it from create/delete and campaign/message siblings. It does not explicitly name or contrast with alternatives, so sibling differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, prerequisites, or alternatives are given. The agent must infer that this is for modifying an existing Canvas schedule rather than creating or deleting one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canvas_summaryC
Get summary analytics for a Canvas.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| length | Yes | Number of days | |
| canvas_id | Yes | Canvas ID | |
| ending_at | No | ||
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read operation with 'Get', but does not disclose required permissions, behavior of the length/ending_at parameters, rate limits, or what the summary contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is appropriately concise, though its brevity leaves the specification thin.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter analytics tool with no annotations and no output schema, the description is incomplete. It does not explain the required time-range parameters, the meaning of 'summary', or how this differs from related analytics tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the schema already documents most parameters. The description adds no meaning beyond the schema, which is acceptable at this coverage level but not helpful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Get' and resource 'Canvas' are clear, but 'summary analytics' is vague and does not distinguish this tool from sibling canvas_analytics. An agent cannot tell from the description alone which Canvas analytics tool to choose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus canvas_analytics, canvas_details, or campaigns_analytics. It offers no prerequisites, exclusions, or context for selecting it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
canvas_trigger_sendB
Trigger an API-triggered Canvas. The Canvas must be configured as API-triggered in Braze.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| audience | No | ||
| broadcast | No | ||
| canvas_id | Yes | API-triggered Canvas ID | |
| recipients | No | ||
| restEndpoint | No | Braze REST endpoint URL | |
| canvas_entry_properties | No | Entry properties |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, and it discloses only the API-triggered precondition. It says nothing about whether the send is immediate, how broadcast versus recipients interact, whether recipient lists are deduplicated, rate limits, or authentication requirements beyond the presence of an apiKey parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, and the operative precondition is front-loaded rather than buried. Nothing in the text needs to be removed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, nested-object, no-annotation, no-output-schema trigger tool, the description is significantly under-specified. An agent can identify the operation but lacks the information needed to construct a correct payload for broadcast or audience-based sends.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 57% across 7 parameters with nested objects, so the description needs to compensate and does not. Non-obvious parameters such as broadcast, audience, send_to_existing_only, and the top-level versus per-recipient canvas_entry_properties distinction are left entirely undocumented here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Trigger') and resource ('Canvas'), so the agent knows exactly what operation it performs. It does not explicitly distinguish itself from the near-identical sibling campaigns_trigger_send or from messages_send, but the Canvas-versus-Campaign distinction is inherent in the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states one important precondition -- the Canvas must already be configured as API-triggered in Braze -- which implies when this tool is applicable. However, it offers no guidance on when to prefer this over campaigns_trigger_send, messages_send, or the canvas_schedule_* family.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
catalog_item_createC
Create a single catalog item.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| item_id | Yes | Item ID | |
| item_data | Yes | Item data fields | |
| catalog_name | Yes | Catalog name | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not disclose whether creation is idempotent or upserts on an existing item_id, what happens on a duplicate ID, what permissions/API key scope are needed, or how many requests/rate limits apply. Only the bare fact of mutation is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, which is efficient. It is arguably too terse for a five-parameter mutation tool with a nested payload, but nothing in it is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, no output schema, and a free-form nested item_data object, the description should cover at least auth prerequisites, the batch-vs-single choice, and what is returned on success. None of that is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are documented in the schema and a baseline of 3 applies. The description adds no meaning beyond the schema, and notably says nothing about the structure of the free-form item_data object or the required catalog_name/item_id pairing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create) and resource (catalog item), and the qualifier 'a single' hints at scope versus a bulk operation. However, it never names the competing sibling catalog_items_create, so the distinction between single-item and batch creation must be inferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this tool rather than catalog_items_create (bulk), catalog_item_update, or catalog_item_edit. No prerequisites are mentioned, even though the schema requires an apiKey and restEndpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
catalog_item_deleteC
Delete a single catalog item.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| item_id | Yes | Item ID to delete | |
| catalog_name | Yes | Catalog name | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Delete' implies a destructive mutation, but the description does not state irreversibility, permission requirements, side effects, or authentication needs. This is a significant gap for a destructive tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with no waste. It is front-loaded and to the point, though it is perhaps too terse to be fully helpful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations, no output schema, and no supplementary behavioral context, the description is too sparse. An agent needs to know if the operation is reversible, what permissions are required, and how it relates to sibling deletion tools. None of that is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters (apiKey, item_id, catalog_name, restEndpoint) with clear descriptions. The description adds nothing beyond what the schema provides. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Delete) and resource (catalog item) with scope limited to a single item. However, with sibling tools like catalogs_delete, catalog_items_delete, and catalog_item_edit present, the description does not differentiate exactly how this differs from those similarly-named alternatives besides the singular 'item'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. There are two other deletion tools (catalogs_delete, catalog_items_delete) and it doesn't state the conditions or prerequisites for choosing this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
catalog_item_editC
Edit a single catalog item (partial update).
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| item_id | Yes | Item ID | |
| item_data | Yes | Fields to update | |
| catalog_name | Yes | Catalog name | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Partial update' hints at merge semantics but says nothing about permissions/auth (only the apiKey param hints at this), whether changes are reversible, what happens to omitted fields, or any rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence that is front-loaded with the core verb and resource. It is efficient, though arguably under-specified rather than optimally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, no output schema, a nested free-form item_data object, and several confusingly similar siblings, this one-line description leaves far too much unspecified for an agent to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter (apiKey, item_id, item_data, catalog_name, restEndpoint) is documented in the schema. The description adds no syntax or format detail beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource ('Edit a single catalog item') and adds scope via '(partial update)'. However, the sibling set contains catalog_items_edit, catalog_item_update, catalog_items_update and catalog_items_create, and the description offers no way to distinguish catalog_item_edit from these near-identical tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no mention of alternatives, which is a real gap given several sibling tools appear to perform overlapping edits/updates. The agent must guess between catalog_item_edit, catalog_items_edit and catalog_item_update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
catalog_item_getB
Get a single catalog item by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| item_id | Yes | Item ID | |
| catalog_name | Yes | Catalog name | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read operation, but does not disclose authentication requirements, rate limits, error behavior (e.g., missing item), or return characteristics. For a tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It states the core action and scope efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with full schema coverage and no output schema, the description covers the basic purpose. However, given no annotations, it omits behavioral context such as that it is a read-only operation and what the response contains, leaving the agent with only minimal information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters (including apiKey, item_id, catalog_name, restEndpoint). The description's phrase 'by ID' aligns with item_id but adds no syntax, format, or conditional detail beyond what the schema provides; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), resource ('catalog item'), and scope ('single ... by ID'), which distinguishes it from the sibling list tool catalog_items_list. However, it does not explicitly name the sibling or contrast them, so it falls short of the clearest possible differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use guidance, prerequisites, or alternatives. It implies retrieval by ID but does not say when to choose this over catalog_items_list or catalog_items_create, leaving the agent to infer the context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
catalog_items_createB
Create multiple items in a catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Items to create (max 50) | |
| apiKey | No | Braze REST API key | |
| catalog_name | Yes | Catalog name | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it discloses nothing about mutation behavior: whether duplicate IDs error or upsert, whether the write is atomic across the batch, permission/API-key requirements, or rate limits. For a bulk mutation endpoint this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler and no redundancy. It is efficient, though its brevity is partly under-specification rather than discipline.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a bulk write tool with no annotations and no output schema, the description omits critical context: duplicate-ID handling, partial-failure semantics, and the 50-item cap's implications. An agent could invoke it but cannot predict its failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (items, apiKey, catalog_name, restEndpoint) are already documented in the schema. The description adds only the notion of batching, matching the baseline 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb+resource ('Create ... items in a catalog') and the word 'multiple' implicitly separates it from the singular sibling catalog_item_create. It never names or contrasts siblings explicitly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied through the word 'multiple' — an agent can infer batch creation, but the description never states when to use this batch tool versus catalog_item_create / catalog_items_update / catalog_items_edit, nor any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
catalog_items_deleteC
Delete multiple items from a catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Items to delete (max 50) | |
| apiKey | No | Braze REST API key | |
| catalog_name | Yes | Catalog name | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it says nothing about irreversibility, whether deletion is permanent, failure behavior for partial batches, or auth requirements. For a destructive batch operation this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. Nothing is repeated and the scope qualifier ('multiple') comes before the resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and a destructive batch semantic, the description should disclose irreversibility and batch-failure behavior. Parameter documentation is fully handled by the schema, but the behavioral side is left entirely unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters including the items array and its max-50 constraint are already documented. The description adds no format or syntax detail beyond the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Delete) plus resource (items in a catalog) and scope (multiple). An agent can distinguish it from the singular catalog_item_delete and catalogs_delete without opening schemas, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this batch delete versus catalog_item_delete, nor any prerequisites such as API key scope or endpoint selection. The only usage constraint (max 50 items) lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
catalog_items_editC
Edit multiple items in a catalog (partial update).
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Items to edit (max 50) | |
| apiKey | No | Braze REST API key | |
| catalog_name | Yes | Catalog name | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does disclose that updates are partial, but omits permission/auth requirements, batching failure behavior, rate limits, and whether unspecified fields are preserved or cleared.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though its brevity borders on under-specification rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batch mutation tool with no annotations and no output schema, the one-line description is too thin: it doesn't clarify merge-vs-replace semantics for partial updates, per-item error behavior, or how it relates to sibling edit/update tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents catalog_name, items, apiKey, and restEndpoint. The description adds only the notion of multiple items and partial updates, which aligns with but does not extend the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Edit ... items in a catalog') and signals batch scope with 'multiple items', which distinguishes it from the singular catalog_item_edit sibling. However, it does not explain how it differs from the near-identical catalog_items_update sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given. With siblings like catalog_item_edit and catalog_items_update that overlap heavily, the agent gets no criterion for choosing this tool over them, and no prerequisites or preconditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
catalog_items_listC
List items in a catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| cursor | No | Pagination cursor | |
| catalog_name | Yes | Catalog name | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. The word 'List' implies a read-only operation, but the description does not disclose pagination behavior despite a cursor parameter, nor does it mention authentication, rate limits, or return characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and free of filler, which is structurally appropriate. However, it is so sparse that it omits useful context rather than earning its brevity through complete coverage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with complete schema coverage and no output schema, the description is minimally adequate. It omits pagination context and sibling differentiation, but the schema covers the parameters well enough to make the tool callable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema. The description adds no additional parameter-level meaning beyond 'items in a catalog', making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List items in a catalog'), so an agent can tell it is a read operation on catalog items. It does not explicitly distinguish itself from siblings such as catalogs_list or catalog_item_get, which prevents a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like catalog_item_get or catalogs_list. The one-line description only implies usage from the name and resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
catalog_items_updateB
Update multiple items in a catalog (replaces entire item).
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Items to update (max 50) | |
| apiKey | No | Braze REST API key | |
| catalog_name | Yes | Catalog name | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one genuinely important trait: the operation replaces the entire item, so unspecified fields are overwritten. It says nothing about auth requirements (the apiKey/restEndpoint params), error behavior, or the 50-item batch limit beyond what the schema already states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the replacement constraint front-loaded in the parenthetical. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is thin: it omits auth prerequisite context for the apiKey/restEndpoint parameters and gives no sense of outcome or failure modes. It communicates the bare minimum needed to recognize the operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters including the max-50 items constraint and the id field. The description's 'multiple items' phrasing adds no syntax or format detail beyond the schema, making 3 the appropriate baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (update) and resource (multiple items in a catalog), and the parenthetical '(replaces entire item)' pins down the semantics that distinguish it from a partial-update sibling. It stops short of naming catalog_items_edit as the contrasting alternative, so differentiation is implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance. The '(replaces entire item)' note hints at the replace-vs-merge distinction, but the description never tells the agent to prefer catalog_items_edit for partial updates, which is the key routing decision among the many catalog siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
catalog_item_updateA
Update a single catalog item (replaces entire item).
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| item_id | Yes | Item ID | |
| item_data | Yes | New item data | |
| catalog_name | Yes | Catalog name | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose one important behavioral trait — the operation replaces the entire item rather than patching it, implying omitted fields are dropped — but says nothing about required permissions, reversibility, or how the API key/endpoint affect the call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste; the distinguishing qualifier and the replacement semantics are packed into the most valuable position.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, no output schema, and a nested required object, the description is thin: it conveys the full-replace semantics but omits nothing about behavioral consequences of dropping fields, auth requirements, or the response. Adequate but with clear gaps given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the schema and the baseline is 3. The description adds no additional parameter meaning (e.g., what item_data must contain or how the nested object is treated), so it neither compensates nor detracts.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Update) and resource (a single catalog item), and the qualifier 'single' distinguishes it from the plural batch sibling catalog_items_update. The parenthetical '(replaces entire item)' further hints at the update-vs-edit distinction. It stops short of naming the edit/update siblings explicitly, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance and no named alternative. The '(replaces entire item)' note implicitly signals when to prefer this over a partial-edit sibling, but the agent must infer that from the parenthetical rather than from any stated rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
catalogs_createC
Create a new catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| catalogs | Yes | Catalogs to create | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and falls short. It does not state that this is a mutating/write operation, that an API key is required for auth, what happens on duplicate catalog names, or whether the change is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste. It is appropriately terse, though the terseness borders on under-specification rather than true efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no annotations and no output schema, the description is too thin: it omits auth requirements, idempotency/duplicate behavior, and any hint of what a catalog or its required fields represent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (apiKey, catalogs, restEndpoint) are already documented in the schema. The description adds no syntax, format, or field-level meaning beyond it, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create) and resource (catalog), so the operation is unambiguous. However, it offers no differentiation from siblings like catalogs_delete or catalogs_list beyond the verb embedded in the name itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as catalog_items_create or how this relates to other catalog operations. The agent gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
catalogs_deleteC
Delete a catalog and all its items.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| catalog_name | Yes | Catalog name to delete | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says it deletes 'all its items' – a cascading destructive effect – but does not state irreversibility, required permissions, or side effects on dependent resources. After the deletion, dependent catalogs items or references may break, and this is not disclosed. The description is minimal for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence that is front-loaded with the verb and resource, and efficiently states the cascading scope. There is zero waste or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with no annotations and no output schema, the description is far too thin. It omits any warning about irrevocability, permission requirements, or downstream effects, and gives no guidance on when this should be used versus deleting individual items. An agent could easily misuse this tool without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter (apiKey, catalog_name, restEndpoint) is already documented in the schema. The description adds no parameter detail beyond what's in the schema. Baseline 3 is correct when the schema does the heavy lifting and the description provides no extra parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Delete') and resource ('catalog') and clarifies scope ('and all its items'). It distinguishes itself from item-level siblings like catalog_items_delete and catalog_item_delete by operating on the catalog itself. It doesn't claim catalog-only vs. sibling nuances beyond that, but the verb+resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives is given. It doesn't explain the destructive, cascading nature of the deletion, nor does it clarify prerequisites (e.g., whether the catalog must be empty or have no items). An agent has no indication of when this is appropriate versus editing items individually.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
catalogs_listC
List all catalogs in the workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'List all' implies a read-only, unfiltered operation, but there is no mention of pagination, result limits, permissions required, or whether catalogs are returned in any order. For a no-annotation tool this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the resource front-loaded and no wasted words. It is perhaps too terse given the missing behavioral context, but structurally it is clean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with no output schema, the description covers the core purpose but omits return shape hints, pagination behavior, and any auth context beyond the schema parameters. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters (apiKey, restEndpoint) already carry schema descriptions at 100% coverage, so the schema does the heavy lifting. The description adds nothing about them, which is the expected baseline when coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (List) plus resource (catalogs) and scope (in the workspace). This clearly separates it from catalogs_create, catalogs_delete, and catalog_items_list. It does not name any sibling explicitly, though none is close enough to require it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus catalog_items_list or catalogs_create, and no prerequisites for when listing catalogs is the right call. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
content_blocks_createC
Create a new content block.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Content block name | |
| tags | No | Tags for organization | |
| state | No | Initial state | |
| apiKey | No | Braze REST API key | |
| content | Yes | Content block HTML/text content | |
| content_type | No | Content type (default: html) | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses nothing: no permission/auth requirements, no default state, no idempotency, no validation or failure behavior for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero padding. It is efficient, though its brevity reflects under-specification rather than disciplined concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with no annotations and no output schema, the description is far too thin: it omits auth context, defaults, and any hint of what a successful create returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with 7 documented parameters including two enums, so the schema already explains each field. The description adds no parameter meaning beyond the schema, which is the baseline 3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new content block'), which is enough to tell it apart from content_blocks_list, content_blocks_info and content_blocks_update by verb alone, though it never names those siblings or scopes what a content block is.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to create versus update or list, no prerequisites, and no mention of the required apiKey/restEndpoint context. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
content_blocks_infoC
Get details for a specific content block.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| restEndpoint | No | Braze REST endpoint URL | |
| content_block_id | Yes | Content block ID | |
| include_inclusion_data | No | Include campaigns/canvases using this block |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. 'Get' implies a safe read, but nothing is said about authentication (the apiKey/restEndpoint params hint at it), rate limits, or what include_inclusion_data actually returns. This is thin for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, which is efficient. However, its brevity reflects under-specification rather than tight targeting of exactly what the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 4 parameters, no output schema, and no annotations, so the description must do more work. It never explains the return shape or the optional include_inclusion_data enrichment, leaving an agent without needed context for calling it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema, and the baseline is 3. The description adds nothing about the meaning or effect of content_block_id or include_inclusion_data, so it does not exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get details') and resource ('a specific content block'), which clearly identifies it as a single-item read. It does not distinguish itself from siblings like content_blocks_list or content_blocks_update beyond the name, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as content_blocks_list or content_blocks_info's siblings, and no stated prerequisites. The agent must infer that this is the single-block counterpart to the list tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
content_blocks_listC
List all content blocks in the workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 100) | |
| apiKey | No | Braze REST API key | |
| offset | No | ||
| restEndpoint | No | Braze REST endpoint URL | |
| modified_after | No | Filter by modified date (ISO 8601) | |
| modified_before | No | Filter by modified date (ISO 8601) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it discloses nothing about read-only safety, pagination behavior, or the fact that results can be narrowed. 'List all' also obscures that the operation supports date filtering, which is the only behavioral hint available and it is absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence, front-loaded with the verb and resource and free of waste. It is arguably under-specified rather than padded, so it does not lose points for verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no annotations and no output schema, the description is too thin: it does not explain the filtering capability surfaced by the schema, the pagination model, or the return shape, leaving the agent to infer behavior from field names alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (83%), so the schema already documents limit, modified_after, modified_before, and the auth fields; the baseline of 3 applies. The description adds nothing about the filter semantics, and its phrase 'all content blocks' slightly tensions with the available modified_after/before filters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('content blocks') scoped to the workspace, so an agent can identify it as the read/list operation. However, it offers no explicit differentiation from the close siblings content_blocks_info, content_blocks_create, and content_blocks_update beyond the plain verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this list operation versus content_blocks_info or the create/update siblings, and no mention of prerequisites such as credentials. Usage is only implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
content_blocks_updateC
Update an existing content block.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New name | |
| tags | No | New tags | |
| state | No | New state | |
| apiKey | No | Braze REST API key | |
| content | No | New content | |
| restEndpoint | No | Braze REST endpoint URL | |
| content_block_id | Yes | Content block ID to update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says only that an existing block is updated, but does not disclose whether this is a partial or full replacement, what permissions or authentication are required, whether changes are reversible, or what side effects occur. It conveys mutation but no meaningful behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately sized for what it attempts to convey, even though it is under-specified elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a mutation tool with 7 parameters, no annotations, no output schema, and no usage guidance, the description is far too thin. An agent lacks essential context about authentication requirements, update semantics, and consequences, making this definition inadequate for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all 7 parameters (including content_block_id, name, tags, state, apiKey, content, restEndpoint) are documented in the schema. The description adds no additional parameter meaning, which is the baseline when the schema already does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Update') and resource ('content block'), making the core action unambiguous. However, it does not differentiate this tool from siblings like content_blocks_create, content_blocks_info, or content_blocks_list, so an agent gets no routing help 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to use this tool versus alternatives, no prerequisites (such as needing an existing content block ID or API credentials), and no exclusions. The description offers no usage guidance at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_blacklistA
[DEPRECATED: Use email_blocklist] Add email addresses to the blacklist.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email addresses to blacklist | ||
| apiKey | No | Braze REST API key | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses deprecation status (a non-obvious behavioral trait), but says nothing about authentication expectations, whether re-adding an existing address is idempotent, or how many addresses can be submitted at once, leaving real gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short clauses with zero waste, and the most decision-relevant information (the deprecation redirect) is front-loaded before the purpose statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter mutation with full schema coverage and no output schema, the description covers purpose and lifecycle status adequately. It is not rich on operational behavior, but nothing essential to calling it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (email, apiKey, restEndpoint) are already documented in the schema. The description only implies that the target is an email list and adds no format, limit, or auth detail beyond the structured fields — baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add email addresses to the blacklist') and immediately flags itself as deprecated in favor of the sibling tool email_blocklist, so an agent can distinguish it from the near-identically named alternative without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the condition that should select another tool: '[DEPRECATED: Use email_blocklist]'. This is a direct when-not-to-use statement with a named alternative, which is the strongest form of routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_blocklistB
Add email addresses to the blocklist. Blocked emails will not receive any messages.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email addresses to blocklist (max 50) | ||
| apiKey | No | Braze REST API key | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the consequence of blocking (no messages delivered) and "Add" implies an additive, persistent mutation, but it says nothing about reversibility, permissions, or whether re-adding an existing address is idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and followed by the effect. Efficient, though the second sentence borders on restating what "blocklist" already implies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers the core action and its effect but omits auth requirements (implied only by the apiKey param), response behavior, and how it relates to email_blacklist. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the "max 50" limit, so the schema already documents all three parameters. The description adds no syntax, format, or batching detail beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Add") and resource ("email addresses to the blocklist"), so the action is unambiguous. However, it does not distinguish itself from the near-identical sibling email_blacklist, leaving an agent to guess which one to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives despite a confusingly similar sibling (email_blacklist). "Blocked emails will not receive any messages" describes an effect, not a usage condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_bounce_removeC
Remove email addresses from the hard bounce list.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Single email to remove | ||
| apiKey | No | Braze REST API key | |
| emails | No | Multiple emails to remove (max 50) | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It states a destructive removal but not the consequences: whether the removal is reversible, whether it re-enables sending to previously bounced addresses, whose permission is required, or whether it is rate limited.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or repetition. It is efficient, though its brevity is also the source of the missing behavioral detail rather than an asset.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with zero annotation coverage and no output schema, the description is too thin. It omits prerequisites, reversibility, error behavior, and the choice between the single-email and multi-email modes, leaving the agent to infer behavior from parameter names alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters (email, emails with max 50, apiKey, restEndpoint) are already fully documented in the schema. The description adds nothing beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (Remove) plus resource (email addresses) and target scope (hard bounce list), which is easily distinguished from close siblings like email_spam_remove and email_blocklist. It does not, however, explicitly name or contrast those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given. The description never states prerequisites (Braze REST API key and endpoint are required by the schema) or when an agent should prefer this over email_hard_bounces (inspection) or email_blocklist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_hard_bouncesC
Query emails that have hard bounced within a date range.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Filter by specific email | ||
| limit | No | Max results (default 100, max 500) | |
| apiKey | No | Braze REST API key | |
| offset | No | Offset for pagination | |
| end_date | No | End date (YYYY-MM-DD) | |
| start_date | No | Start date (YYYY-MM-DD) | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Query' implies a read, but it says nothing about auth requirements (the apiKey/restEndpoint params hint at this), pagination behavior, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no redundant phrasing. It is efficient, though its brevity leaves information gaps that conciseness alone cannot excuse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only reporting tool with full schema coverage and no output schema, the description is minimally adequate but omits return-shape and pagination expectations that an agent would need to drive repeated calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with all seven parameters documented inline, including the limit cap and date format. The description adds no meaning beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (query) and a precise resource (emails that hard bounced) with a date-range scope. It distinguishes itself from the create/remove-oriented email siblings, though it doesn't name which neighbor it replaces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives such as email_bounce_remove or email_unsubscribes, and no prerequisites or context about acceptable date ranges. The agent must infer the call site.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_spam_removeC
Remove email addresses from the spam list.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Single email to remove | ||
| apiKey | No | Braze REST API key | |
| emails | No | Multiple emails to remove (max 50) | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It says 'Remove' but does not state that this is a mutating/destructive operation, whether it requires authentication, whether removal is idempotent, or what happens if an address is not on the list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though its extreme brevity is part of why substance is missing elsewhere rather than a virtue in itself.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutation tool with no annotations, no output schema and both single and batch parameter forms. The description does not explain the single-vs-batch choice, auth requirements, or any confirmation/limit behavior, so it is thin for the complexity involved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents email, emails (max 50), apiKey and restEndpoint. The description adds no syntax, format or batching guidance beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Remove') and resource ('email addresses from the spam list'), which is better than a tautology. However, the sibling list contains several near-identical removal tools (email_bounce_remove, email_blacklist, email_blocklist, sms_invalid_phones_remove), and the description does nothing to distinguish the spam list from a blocklist or blacklist, leaving real ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the adjacent suppression-list tools, nor any prerequisite note. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_subscription_statusC
Change email subscription status for users.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email address to update | ||
| apiKey | No | Braze REST API key | |
| restEndpoint | No | Braze REST endpoint URL | |
| subscription_state | Yes | New subscription state |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it says only that it changes state. It omits whether the change is reversible, whether it requires the API key in apiKey/restEndpoint (implied by parameters but not explained), what happens to users not yet in Braze, and whether the update is synchronous or queued.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded with the action and resource and contains no filler. It is appropriately terse, though its brevity is achieved partly by omitting necessary detail rather than by disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is far too thin. It does not explain the auth/endpoint requirements that three of the four parameters imply, nor how it differs from the six other subscription-related siblings, leaving an agent without enough context to select or invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents email, apiKey, restEndpoint, and the subscription_state enum. The description adds nothing beyond that baseline, so a 3 is the appropriate floor rather than a higher score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb (Change) and resource (email subscription status for users), making the purpose immediately legible. However, it does not distinguish this tool from its many near-identical siblings such as subscription_status_set, subscription_status_set_v2, subscription_user_status, and subscription_status_get, leaving the agent to guess which variant applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of the alternative subscription tools despite a sibling list full of near-duplicates. An agent cannot tell from the description whether this is the v1 or legacy path versus subscription_status_set_v2.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_templates_createC
Create a new email template.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | HTML body content | |
| tags | No | Tags for organization | |
| apiKey | No | Braze REST API key | |
| subject | Yes | Email subject line | |
| preheader | No | Email preheader text | |
| restEndpoint | No | Braze REST endpoint URL | |
| template_name | Yes | Template name | |
| plaintext_body | No | Plain text body |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it says nothing about authentication requirements (apiKey/restEndpoint are visible only in the schema), whether creation is idempotent, what happens on name collision, or what the response contains. For a mutation tool with zero annotation coverage this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with no wasted words. It is efficient, though the terseness borders on under-specification rather than optimal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A mutation tool with 8 parameters, no annotations, and no output schema needs more than a five-word sentence. Nothing about auth, error behavior, response shape, or field semantics beyond the schema is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with all 8 parameters documented in the schema itself, so the baseline of 3 applies. The description adds no format, constraint, or default information beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create) and resource (email template), which distinguishes it from email_templates_list, email_templates_info, and email_templates_update in the sibling set. However, it does not explicitly differentiate itself from those siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as email_templates_update for modifying an existing template. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_templates_infoC
Get details for a specific email template.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| restEndpoint | No | Braze REST endpoint URL | |
| email_template_id | Yes | Email template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. "Get" implies a safe read, but there is no disclosure of auth requirements beyond the key/endpoint params, no rate-limit or failure notes, and no hint at what "details" are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is efficient, though it borders on under-specification rather than being genuinely informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-item read with a fully documented schema and no output schema, the description is minimally adequate. It leaves unclear what "details" comprise and offers no routing guidance, but nothing critical to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (apiKey, restEndpoint, email_template_id all documented), so the schema already carries parameter meaning. The description adds nothing beyond that baseline, so a 3 is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Get") and resource ("details for a specific email template"), and the word "specific" plus singular template signals retrieval of one item. This implicitly contrasts with sibling email_templates_list, though it never names it explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this versus email_templates_list, email_templates_update, or content_blocks_info. Usage is only inferable from the name and the word "specific".
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_templates_listC
List all email templates in the workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 100) | |
| apiKey | No | Braze REST API key | |
| offset | No | ||
| restEndpoint | No | Braze REST endpoint URL | |
| modified_after | No | Filter by modified date (ISO 8601) | |
| modified_before | No | Filter by modified date (ISO 8601) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. The description doesn't disclose any behavioral traits such as pagination behavior, authentication requirements, rate limits, or output format. It's purely a restatement of the obvious.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single short sentence, front-loaded with the key action and resource. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters, no annotations, and no output schema, the description is too sparse. It doesn't explain pagination, filtering capabilities (despite modified_after/before parameters), or what the return value contains. Missing key context an agent would need to use it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents most parameters (limit, apiKey, restEndpoint, modified_after, modified_before). The description adds no parameter details. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (email templates) with scope (in the workspace). Clear enough to distinguish from siblings like email_templates_info and email_templates_create, though it doesn't explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs. alternatives. With siblings such as email_templates_info, content_blocks_list, and campaigns_list, there's no indication of when this is appropriate. Simply implies it's for listing templates via the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_templates_updateC
Update an existing email template.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | New HTML body | |
| tags | No | New tags | |
| apiKey | No | Braze REST API key | |
| subject | No | New subject line | |
| preheader | No | New preheader | |
| restEndpoint | No | Braze REST endpoint URL | |
| template_name | No | New template name | |
| plaintext_body | No | New plain text body | |
| email_template_id | Yes | Template ID to update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure and falls short. It does not say whether updates are partial or full-replacement, whether the template must already exist, whether auth is required (apiKey/restEndpoint are schema params), or whether changes are reversible. For a mutation tool with zero annotation coverage this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence is front-loaded and free of waste, but for a nine-parameter mutation endpoint this is terse to the point of under-specification rather than genuinely efficient. It is neither bloated nor informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A mutation tool with no annotations, no output schema, and no partial-update semantics should explain more about what changes and what the caller must supply. Given the complexity of a nine-param template update, the description leaves the agent guessing about behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all nine parameters (body, subject, tags, template_name, etc.). The description adds no format or semantics beyond that, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource combination ('Update an existing email template'), which is unambiguous and accurate. It does not differentiate from siblings like email_templates_create or email_templates_info, but the resource is clear enough that a name-plus-description read is sufficient.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as email_templates_create or content_blocks_update. The agent must infer that this is the mutation path for an already-existing template.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_unsubscribesC
Query emails that have unsubscribed within a date range.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Filter by specific email | ||
| limit | No | Max results (default 100, max 500) | |
| apiKey | No | Braze REST API key | |
| offset | No | Offset for pagination | |
| end_date | No | End date (YYYY-MM-DD) | |
| start_date | No | Start date (YYYY-MM-DD) | |
| restEndpoint | No | Braze REST endpoint URL | |
| sort_direction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read-only query but says nothing about authentication (the required apiKey/restEndpoint params), rate limits, pagination behavior, or the shape of results, all of which matter for an 8-parameter API tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence with the resource and scope front-loaded and no wasted words. It is efficient, though brevity here edges toward under-specification for an 8-param tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, 8 parameters, and a dense sibling set, the description is too thin. It omits authentication requirements, pagination semantics, and any differentiation from the many adjacent email/subscription tools an agent could confuse it with.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (88%), so the schema already documents email, limit, offset, dates, and endpoint. The description adds only the date-range framing that start_date/end_date already imply, contributing little beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Query) and resource (emails that have unsubscribed) with a scope (within a date range). However, it does not distinguish this tool from closely related siblings like email_hard_bounces, email_subscription_status, or subscription_status_get, leaving the agent to infer the difference between unsubscribes and bounce/subscription events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use or when-not-to-use guidance and does not name any alternative sibling. Given the crowded email/subscription family, an agent cannot tell from this sentence when to prefer this tool over email_hard_bounces or subscription_status_get.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
events_analyticsC
Get custom event analytics over time.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | ||
| event | Yes | Event name | |
| apiKey | No | Braze REST API key | |
| app_id | No | ||
| length | Yes | Number of days | |
| ending_at | No | ||
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it discloses nothing: no auth requirement (despite apiKey/restEndpoint params), no rate limits, no return shape, no note on how 'length' plus 'unit' interact with 'ending_at'. One sentence of pure restatement is all that is offered for a 7-parameter analytics call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, which is structurally clean. The problem is under-specification rather than verbosity, so the sentence earns its place but is not enough.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no output schema and no annotations, the description is far too thin: no pagination, response structure, auth, or default behavior for 'unit'/'ending_at' is given. The agent has no way to know what result to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 57%, so the description must compensate, but it adds no meaning: 'event', 'length' ('Number of days'), 'unit' enum values, and 'ending_at' are entirely undocumented in prose. 'Over time' loosely gestures at unit/length but supplies no format or interaction rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb (Get) and resource (custom event analytics) with the temporal qualifier 'over time'. It is distinguishable from events_list (which lists events) and from kpi_* tools, but it never names a sibling or scopes what 'over time' means, leaving the boundary with siblings like sessions_analytics fuzzy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no alternatives named. An agent choosing among events_list, events_analytics, and the kpi_* tools gets no routing help from the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
events_listC
List all custom events tracked in the app.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| apiKey | No | Braze REST API key | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read operation via 'List', but omits authentication needs (apiKey), pagination behavior (page), rate limits, and whether results are complete or paged.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero waste. It is appropriately sized for a simple list endpoint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotations, and incomplete parameter descriptions, the definition is too thin for confident invocation. It lacks auth, pagination, and return format details that an agent would need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%; apiKey and restEndpoint are documented in the schema, but page is undocumented. The description adds no parameter meaning at all, so it fails to compensate for the page gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('custom events tracked in the app'), making the enumeration purpose clear. However, it does not differentiate from close siblings like events_analytics or other list tools, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no when-to-use guidance, no alternatives such as events_analytics for event metrics, and no conditions for using this list. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kpi_dauC
Get daily active users (DAU) over time.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| app_id | No | Specific app ID | |
| length | Yes | Number of days | |
| ending_at | No | ||
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral-disclosure burden. It does not state that this is a read-only operation, does not mention authentication requirements, rate limits, pagination, or what the returned time series looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is appropriately concise for a simple metric endpoint, though its brevity contributes to the broader completeness gaps.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter analytics tool with no annotations and no output schema, one sentence is insufficient. It omits return format, time-window semantics, default behavior, and authentication context that an agent would need to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is about 80%, so the schema largely documents parameters such as apiKey, app_id, length, and restEndpoint. The description adds no parameter meaning beyond the schema, and ending_at lacks a schema description, leaving a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific metric and temporal scope: 'daily active users (DAU) over time.' It clearly identifies the resource, though it does not explicitly differentiate this tool from siblings such as kpi_mau or kpi_new_users.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The only usage signal is the metric name itself, which is implicit at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kpi_mauC
Get monthly active users (MAU) over time.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| app_id | No | ||
| length | Yes | Number of days | |
| ending_at | No | ||
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden but only implies a read operation via 'Get'. It does not disclose authentication requirements despite an apiKey parameter, rate limits, time granularity, or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is appropriately concise, though the brevity contributes to gaps captured in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with five parameters, no annotations, and no output schema, the description is too sparse. It does not explain undocumented parameters, usage context, or behavioral details an agent would need to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%, leaving app_id and ending_at undocumented. The description adds no parameter meaning beyond what the schema already provides, and does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), resource ('monthly active users (MAU)'), and temporal scope ('over time'). It implicitly distinguishes itself from sibling kpi_dau by using 'monthly' versus 'daily', but it does not explicitly name or contrast with any alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as kpi_dau, kpi_new_users, or kpi_uninstalls. It also omits prerequisites or conditions for selecting this metric.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kpi_new_usersC
Get new users count over time.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| app_id | No | ||
| length | Yes | Number of days | |
| ending_at | No | ||
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says nothing about whether this is a read-only query, what permissions or API key are required, rate limits, or what granularity/format the time series returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and free of filler, which is good. However, it is terse to the point of under-specification for a 5-parameter analytics tool, so it earns only a middling score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters, no annotations, no output schema, and two undocumented parameters, the description leaves too much unexplained. An agent cannot determine the returned granularity, the time-range semantics, or the authentication expectations from this definition alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 60% and the description adds no parameter meaning at all. It does not explain 'length' (days), 'ending_at' (undocumented in schema), 'app_id' (undocumented), or how they shape the returned series.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('new users count') with a temporal scope ('over time'), which cleanly separates it from siblings like kpi_dau, kpi_mau, and kpi_uninstalls. It does not explicitly name those siblings, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to use this tool versus the other KPI tools (kpi_dau, kpi_mau) or the users_* analytics tools. No prerequisites, exclusions, or alternatives are given; usage is only weakly implied by the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kpi_uninstallsC
Get app uninstalls over time.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| app_id | No | ||
| length | Yes | Number of days | |
| ending_at | No | ||
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read operation and a time-series result, but says nothing about auth requirements, rate limits, data freshness, timezone handling, maximum ranges, or return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is as concise as possible while still naming the operation and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter analytics tool with no annotations, no output schema, and 60% schema description coverage, the one-line description is too thin. It omits required parameter semantics, return value expectations, and behavioral constraints an agent would need to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%, with only apiKey and length described in the schema. The description adds no parameter meaning; 'over time' loosely hints at temporal parameters but does not explain app_id, ending_at, or how length interacts with the result.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('app uninstalls over time'), which is clear enough to distinguish it from most siblings. However, it does not explicitly differentiate itself from other KPI tools like kpi_dau, kpi_mau, or kpi_new_users.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as sessions_analytics or other KPI endpoints. The implied context is analytics, but no explicit when-to-use or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
live_activity_updateB
Update an iOS Live Activity. Used for real-time updates like sports scores, delivery tracking.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| app_id | Yes | Braze app ID | |
| stale_date | No | ISO 8601 stale time | |
| activity_id | Yes | Live Activity ID to update | |
| end_activity | No | End the Live Activity | |
| notification | No | ||
| restEndpoint | No | Braze REST endpoint URL | |
| content_state | Yes | Updated content state | |
| dismissal_date | No | ISO 8601 dismissal time |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It is silent on whether this needs API credentials, what ending the activity does, whether updates are reversible, and typical latency/rate limits for a write against a live user-facing surface.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, purpose first and use cases second, with zero filler. Appropriately sized for the information it chooses to convey.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nine-parameter mutation tool with a nested notification object, no annotations and no output schema, the description leaves too much uncovered. It should at minimum signal that ending an activity is irreversible and that authenticated API credentials are required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 89%, so the schema already documents most parameters including apiKey, app_id, activity_id, stale_date, dismissal_date and end_activity. The description only loosely hints at what content_state holds (scores, delivery status) and adds no format or syntax beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Update') and resource ('iOS Live Activity'), so the operation is unambiguous. It does not need to differentiate from siblings since none of the listed tools touch Live Activities, but it also does not explicitly claim that territory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Used for real-time updates like sports scores, delivery tracking' gives the usage context and implies when to reach for it. It stops short of stating prerequisites, when-not-to-use, or any alternative, leaving the selection logic incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
messages_schedule_createC
Schedule a message to be sent at a specific time.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| send_id | No | ||
| audience | No | ||
| messages | No | ||
| schedule | Yes | ||
| broadcast | No | ||
| segment_id | No | ||
| campaign_id | No | ||
| restEndpoint | No | Braze REST endpoint URL | |
| user_aliases | No | ||
| external_user_ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Schedule a message to be sent' implies a write/mutation operation with delayed delivery, but the description doesn't state permissions required, whether the schedule is cancellable/updatable, whether the message validates immediately, or what happens on failure. For a mutation tool with zero annotation coverage and 11 parameters, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler. It's appropriately sized as far as it goes, but the brevity reflects under-specification rather than efficient information density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 parameters, nested objects (audience, messages, schedule), 18% schema coverage, no annotations, and no output schema, the description is far too thin. It omits any mention of Braze, audience targeting, required vs optional params, or mutation semantics, leaving the agent without critical context to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 18%, well below the 50% threshold, so the description must compensate—and it doesn't. It mentions only 'a specific time' (mapping to the schedule.time param), leaving 10 other parameters (campaign_id, segment_id, audience, messages, broadcast, send_id, apiKey, etc.) completely undocumented in the description. The description adds no meaningful semantic guidance beyond what's already in the sparse schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Schedule') and resource ('a message') with a timing qualifier, which is understandable on its own. However, it doesn't distinguish this tool from siblings like messages_send (immediate send) or campaigns_schedule_create, canvas_schedule_create, and messages_schedule_update. A single sentence covering only the most basic intent leaves the agent guessing about which scheduling tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this over messages_send, campaign/canvas scheduling variants, or messages_schedule_update. The agent has no signal about the distinction between scheduling a direct message versus a campaign/canvas, or when immediate send is more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
messages_schedule_deleteC
Delete a previously scheduled message.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| schedule_id | Yes | Schedule ID to delete | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure for a destructive operation. It states only that a scheduled message is deleted, without explaining whether deletion is permanent, what permissions are required, or what happens if the schedule has already been sent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately concise for stating the tool's core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with no annotations and no output schema, the description is too thin. It should at least clarify the effects of deletion, authentication expectations, or error cases to help an agent invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents apiKey, schedule_id, and restEndpoint. The description adds no parameter-level meaning beyond what the schema provides, making the baseline score of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Delete') and resource ('a previously scheduled message'), making the core action clear. It does not explicitly differentiate itself from closely named siblings like campaigns_schedule_delete or canvas_schedule_delete, but the word 'message' narrows scope adequately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as messages_schedule_update or campaigns_schedule_delete. It also omits any prerequisites, like whether the schedule must still be pending.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
messages_schedule_updateC
Update a previously scheduled message.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| messages | No | ||
| schedule | Yes | ||
| schedule_id | Yes | Schedule ID to update | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says nothing about authentication requirements, whether the update is a full replacement or partial patch, what happens to existing schedule fields not supplied, or any side effects or rate limits. For a mutation tool, this is a severe gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is concise and front-loaded, but it is so minimal that it barely earns its place. It avoids verbosity yet fails to provide meaningful content, making it adequate but clearly under-specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotations, five parameters including nested objects, and only a one-line description, the definition is grossly incomplete. It does not provide enough context for an agent to safely invoke this mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 60%, and the description adds no parameter meaning at all. The nested 'messages' object and the required 'schedule' object remain unexplained, leaving the agent to infer structure from the schema alone where descriptions are absent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Update') and resource ('a previously scheduled message'), making the basic purpose intelligible. However, it does not distinguish this tool from sibling schedule-update tools such as campaigns_schedule_update or canvas_schedule_update, so an agent cannot tell them apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 messages_schedule_create or messages_schedule_delete, nor any prerequisites or context for invocation. The description merely restates the action without helping the agent choose 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.
messages_sendC
Send messages immediately to users via push, email, webhook, or content cards.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| send_id | No | Custom send identifier | |
| audience | No | ||
| messages | No | Message content by channel | |
| broadcast | No | Send to entire segment | |
| segment_id | No | Target segment ID | |
| campaign_id | No | Campaign ID for settings | |
| restEndpoint | No | Braze REST endpoint URL | |
| user_aliases | No | ||
| external_user_ids | No | User external IDs | |
| override_frequency_capping | No | ||
| recipient_subscription_state | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says 'immediately', which implies direct dispatch without scheduling, but does not disclose rate limits, whether sends are irreversible, whether audience and broadcast interact (broadcast=true vs audience/segment_id), subscription-state effects, or any error behavior for a 12-parameter high-impact send tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is appropriately sized for what little it says, though the brevity contributes to the other gaps rather than compensating for them.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, nested-object, no-annotation, no-output-schema send tool with many overlapping siblings, the description is inadequate. It omits recipient targeting semantics, channel selection guidance, prerequisites (apiKey, restEndpoint), and behavioral caveats that an agent needs before invoking a synchronous send.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% and the description does not explain any of the 12 parameters. Key semantics are left ambiguous: how 'broadcast', 'audience', 'segment_id', 'external_user_ids', and 'user_aliases' interact to define the recipient set, or how 'messages' channel keys map to 'recipient_subscription_state'. The description adds no parameter meaning beyond what partial schema descriptions already provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the verb (send) and resource (messages) plus the channels, which is clear enough. However, it doesn't distinguish this from close siblings like campaigns_trigger_send, canvas_trigger_send, transactional_email_send, or messages_schedule_create, which all send messages through different mechanisms. A 'one-sentence summary' that covers four channels without naming when this tool is the right one leaves the tool's identity ambiguous among many senders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. With siblings like campaigns_trigger_send, canvas_trigger_send, transactional_email_send, and messages_schedule_create, the agent gets nothing to help choose, and the description does not even hint at the immediate-vs-scheduled distinction that the word 'immediately' implies exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preference_center_createC
Create a new preference center.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Preference center name | |
| state | No | ||
| apiKey | No | Braze REST API key | |
| restEndpoint | No | Braze REST endpoint URL | |
| redirect_page_html | No | Redirect page HTML | |
| confirmation_page_html | No | Confirmation page HTML | |
| preference_center_title | No | Title shown to users | |
| preference_center_options | No | ||
| preference_center_page_html | No | Custom HTML content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure but provides none. It doesn't mention authentication requirements (apiKey/restEndpoint are params), whether creation is reversible, side effects, or what the response contains. A mutation tool with this sparse description is seriously under-specified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is concise and front-loaded, but it is too sparse to be informative. Conciseness is achieved at the cost of completeness, which undermines its utility.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters, nested objects, no output schema, and no annotations, the description is completely inadequate. It omits authentication context, parameter roles, and any behavioral details an agent needs to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 78% description coverage, covering most parameters, but the description adds no meaning beyond what's in the schema. The state enum and nested preference_center_options lack explanation in the description, and required parameters like 'name' are only documented in the schema. The description does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Create') and resource ('preference center'), matching the tool name. However, it offers no differentiation from the sibling preference_center_update tool or explanation of what scope/kind of preference center is created. It is minimally descriptive without distinguishing from alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like preference_center_update or preference_centers_list. It doesn't state prerequisites or context for creation, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preference_center_getC
Get details for a specific preference center.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| restEndpoint | No | Braze REST endpoint URL | |
| preference_center_external_id | Yes | Preference center external ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. 'Get' weakly implies a read-only, idempotent operation, but there is no statement about authentication needs, error behavior when the ID is unknown, or what 'details' actually comprise.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler or repetition. It is efficient, though its brevity borders on under-specification rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-resource read with full schema coverage, the essentials are present. However, with no output schema and no annotations, the description never says what 'details' are returned or how failures surface, leaving a real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents apiKey, restEndpoint, and preference_center_external_id. The description only gestures at the ID parameter via 'specific preference center' and adds no format or constraint detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (a specific preference center), and 'specific' implies a single-resource lookup rather than a list. It is clear what the tool does, but it does not explicitly distinguish itself from the sibling preference_centers_list or preference_center_url.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use context is given, and no alternatives are named. The agent must infer from the name that this is the single-item retrieval counterpart to preference_centers_list, with no stated exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preference_centers_listC
List all preference centers in the workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results | |
| apiKey | No | Braze REST API key | |
| offset | No | ||
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It discloses only that this is a list operation, but does not mention whether results are paginated, whether any authentication (apiKey) is required, or what the response format is. For a read/list tool without annotations, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It is front-loaded with the core action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with four parameters, no annotations, no output schema, and only 75% schema coverage, the description is incomplete. It should at least mention pagination behavior, authentication requirements, or the workspace-scoping constraint to be sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, with limit, apiKey, and restEndpoint documented in the schema; offset is undocumented. The description adds no parameter meaning beyond what the schema provides. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource: 'List all preference centers in the workspace.' It distinguishes from preference_center_get (singular 'all' vs presumably one), but does not explicitly name the sibling or clarify that it is scoped to the workspace's preference centers. This is clear but not maximally differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus preference_center_get or preference_center_url. It implies use for listing all centers, but offers no conditions, exclusions, or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preference_center_updateC
Update an existing preference center.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New name | |
| state | No | ||
| apiKey | No | Braze REST API key | |
| restEndpoint | No | Braze REST endpoint URL | |
| redirect_page_html | No | New redirect HTML | |
| confirmation_page_html | No | New confirmation HTML | |
| preference_center_title | No | New title | |
| preference_center_options | No | ||
| preference_center_page_html | No | New page HTML | |
| preference_center_external_id | Yes | Preference center external ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose any behavioral traits such as required permissions, whether the update is destructive, side effects, or authentication needs. For a mutation tool with 10 parameters, this is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero waste. It is concise and structured well, though under-specified content limits the score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and a complex 10-parameter mutation tool, the description is entirely insufficient. It omits critical information about permissions, behavior, and parameter usage, making it inadequate 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the schema documents most parameters. The description adds no additional meaning beyond the schema, not even mentioning the required external ID. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb (Update) and resource (preference center), distinguishing it from preference_center_create and preference_center_get. However, it is generic and does not specify what aspects of the preference center can be updated or the scope of the update, leaving it in the 'vague purpose' category.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternatives are mentioned. The description merely states the action without providing context on when this tool should be selected over others, such as create or get.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preference_center_urlC
Generate a preference center URL for a specific user.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| user_id | Yes | User external ID | |
| restEndpoint | No | Braze REST endpoint URL | |
| preference_center_external_id | Yes | Preference center external ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It does not explain whether the URL is persistent, whether it requires a preference center to already exist, what the response contains, or any rate limits. This is a significant gap for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single efficient sentence that front-loads the action and resource. It is appropriately sized, though minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and four parameters requiring two identifiers, the description is too sparse. It omits key details like required permissions, dependency on a preference center, and expected return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all four parameters thoroughly. The description adds no extra meaning beyond what the schema provides; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (Generate) and resource (preference center URL), clearly differentiated from siblings like preference_centers_list or preference_center_get. Minor ambiguity about whether it creates a URL or merely computes it, but the core purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this tool versus related preference center tools (create, update, get, list). The description does not mention prerequisites such as an existing preference center, nor does it exclude any scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
purchases_productsC
List all product IDs from purchase events.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| apiKey | No | Braze REST API key | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'List' implies a read-only operation, but nothing is said about authentication (the apiKey param), pagination behavior, or whether results are scoped to a time range or workspace.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with no filler. Every word contributes to identifying the tool's output.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and an undocumented page parameter, the definition is under-specified for a list endpoint. An agent lacks pagination, auth, and scoping details needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description says nothing about any of the three parameters. Schema coverage is only 67%: apiKey and restEndpoint are documented in the schema, but 'page' has no description anywhere, and the description does not compensate for that gap or explain pagination.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and a precise resource (product IDs from purchase events). This clearly separates it from sibling analytics tools like purchases_quantity and purchases_revenue, though it doesn't explicitly name those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus purchases_quantity, purchases_revenue, or events_list. No prerequisites, time-window constraints, or conditions for selection are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
purchases_quantityC
Get purchase quantity analytics over time.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | ||
| apiKey | No | Braze REST API key | |
| app_id | No | ||
| length | Yes | Number of days | |
| ending_at | No | ||
| product_id | Yes | Product ID | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says this is a read-style 'Get' operation, but does not disclose authentication requirements despite the apiKey parameter, rate limits, return format, granularity behavior, or how missing optional parameters are handled. The description adds very little beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. Structurally it is efficient, though its brevity contributes to under-specification rather than conciseness through precision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter analytics tool with two required fields, no annotations, no output schema, and only 57% schema description coverage, this description is too sparse. An agent lacks enough context about required inputs, time-range semantics, and expected return shape to call the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 57%, meaning several parameters are not documented by the schema itself. The description adds no parameter meaning at all: it does not explain product_id, length, ending_at, app_id, unit, apiKey, or restEndpoint. It also does not resolve the discrepancy between length being described as 'Number of days' and unit allowing hour/week/month.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get purchase quantity analytics over time.' It is clear enough that this retrieves quantity analytics and not product or revenue analytics. However, it does not explicitly name or distinguish the sibling tools purchases_products or purchases_revenue, so sibling differentiation is only implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as purchases_products or purchases_revenue. It also omits prerequisites, time-range expectations, or when the required product_id and length parameters should be supplied. Usage is only vaguely implied by 'over time.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
purchases_revenueC
Get revenue analytics over time.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | ||
| apiKey | No | Braze REST API key | |
| app_id | No | ||
| length | Yes | Number of days | |
| ending_at | No | ||
| product_id | Yes | Product ID | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits, but it only restates the purpose. It does not state that this is a read-only operation, does not mention authentication requirements (apiKey), does not describe rate limits, time-range constraints, or return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded but so sparse that it fails to convey the necessary invocation details. This is under-specification rather than efficient conciseness, similar to the calibration example where a one-word description scored low.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no annotations and no output schema, the description is completely inadequate. It omits required parameters, time-range semantics, authentication, and return behavior, leaving the agent unable to invoke the tool correctly without relying entirely on the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 57%, and the description adds no parameter meaning whatsoever. It does not explain the required product_id and length, nor the optional unit, ending_at, or app_id parameters, leaving gaps where the schema descriptions are absent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('revenue analytics'), but the scope 'over time' is vague and the tool is not differentiated from analytics siblings like purchases_quantity, purchases_products, or sends_analytics. An agent cannot tell exactly what revenue dimension or granularity this returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as purchases_quantity or purchases_products, nor any conditions, prerequisites, or exclusions. The agent must infer usage entirely from the tool name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scheduled_broadcasts_listC
List upcoming scheduled campaigns and Canvases.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| end_time | Yes | ISO 8601 end time for query range | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'List' implies a read, but nothing is said about authentication, pagination, the required end_time range semantics, or what is returned. For a list tool with zero annotation coverage this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the resource front-loaded and no filler. It is appropriately sized, though it is so terse that it borders on under-specification rather than elegant concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list with a fully documented schema and a required end_time, the description is minimally adequate, but it omits pagination behavior and any return-shape context, and no output schema exists to compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents apiKey, end_time, and restEndpoint. The description adds no parameter meaning beyond the schema, which is the baseline-3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (upcoming scheduled campaigns and Canvases), and the 'scheduled' qualifier separates it from the plain campaigns_list and canvas_list siblings. It does not, however, explain how it relates to those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no mention of alternatives like campaigns_list or canvas_list, and no prerequisites stated. The agent is left to infer that this is the scheduling-focused variant from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scim_users_createC
Create a new dashboard user account.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key (requires SCIM permissions) | |
| userName | Yes | Email address for the new user | |
| givenName | Yes | First name | |
| department | No | Department | |
| familyName | Yes | Last name | |
| permissions | No | User permissions | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for a mutation tool, yet it discloses nothing about required SCIM-scoped auth, duplicate-userName handling, reversibility, or side effects on existing permissions. 'Create a new' only minimally implies a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste. It is well-structured but so terse that the brevity borders on under-specification rather than efficient conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation with a nested permissions object, no annotations, and no output schema, one sentence is inadequate. It omits the dashboard-vs-end-user distinction, permission semantics, auth requirements, and error/duplicate behavior an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter (userName, givenName, familyName, department, permissions, apiKey, restEndpoint) is documented in the schema. The description adds no parameter meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Create') and resource ('dashboard user account'), which is clearer than a tautology. However, it does not distinguish this from sibling scim_users_search/get/update/delete or clarify that this is a SCIM-provisioned dashboard user rather than an end-user profile (users_identify/users_track).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this versus alternatives like scim_users_search or the users_identify/users_track family. No prerequisites, no mention of SCIM provisioning context, 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.
scim_users_deleteB
Delete a dashboard user account. This is permanent.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key (requires SCIM permissions) | |
| user_id | Yes | SCIM user ID to delete | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does state the most important trait: the deletion is permanent. However, it omits required authorization details (though the schema's apiKey field mentions SCIM permissions), side effects on associated data, and error or recovery behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loads the action and its most critical consequence. Both sentences earn their place without filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive three-parameter tool with no annotations and no output schema, the description is minimally adequate because it warns that deletion is permanent. It does not cover when to use it, prerequisites, or side effects, so it leaves meaningful gaps for a destructive SCIM operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the input schema. The description adds no additional parameter meaning or format guidance beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'Delete a dashboard user account.' An agent can understand the core action, but it does not distinguish this from the sibling users_delete tool or clarify that this operates via SCIM rather than a standard user deletion path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use scim_users_delete versus alternatives such as users_delete, nor any prerequisites or context for selecting this tool. The description only states the action and permanence, leaving usage entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scim_users_getA
Get a dashboard user account by SCIM ID.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key (requires SCIM permissions) | |
| user_id | Yes | SCIM user ID | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but 'Get' clearly implies a read-only, non-destructive operation. It does not disclose auth requirements, rate limits, or error behavior, leaving only the minimum behavioral signal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. The verb, resource, and lookup key are all present immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with fully described parameters, this is almost enough to call correctly. It could be more complete by routing from scim_users_search or noting SCIM permissions, but the core operation is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description mirrors the user_id semantics with 'SCIM ID'. It adds no syntax or format beyond what the schema already documents, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get'), resource ('dashboard user account'), and lookup key ('SCIM ID'). This distinguishes it from scim_users_search, which would not fetch by ID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by SCIM ID' implies usage when a SCIM ID is known, but there is no explicit when-not guidance or named alternative such as scim_users_search. Usage is inferable but not fully directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scim_users_searchC
Search for dashboard users by email address.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of results to return | |
| apiKey | No | Braze REST API key (requires SCIM permissions) | |
| filter | Yes | SCIM filter (e.g., 'userName eq "user@example.com"') | |
| startIndex | No | 1-based start index | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: no read-only confirmation, no auth/permission requirements (only the apiKey schema param hints at SCIM permissions), no pagination behavior despite startIndex/count, and no note on result caps. For an unannotated tool this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with no padding or redundancy. It is efficient, though its brevity reflects under-specification rather than disciplined economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters, no annotations, and no output schema, the description should explain at least the SCIM ListResponse shape or pagination expectations; it does neither. An agent can form a call but cannot predict what comes back or how paging behaves.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents filter, count, startIndex, apiKey, and restEndpoint — baseline 3 applies. The description adds no syntax or format detail, and its 'by email address' gloss slightly understates the general SCIM filter semantics documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb (Search) and a resource (dashboard users), which separates it loosely from scim_users_get/create/update/delete. However, the qualifier 'by email address' narrows the purpose beyond what the schema supports — the required 'filter' param takes any SCIM filter (e.g., userName eq "..."), not just email lookups. The intent is recognizable but partially misleading about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus scim_users_get or the other scim_users_* siblings, and no mention of prerequisites (SCIM-permissioned API key) or typical lookup scenarios. The agent must infer the search-vs-retrieve distinction from the names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scim_users_updateC
Update a dashboard user account.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key (requires SCIM permissions) | |
| user_id | Yes | SCIM user ID | |
| userName | No | New email address | |
| givenName | No | New first name | |
| department | No | New department | |
| familyName | No | New last name | |
| permissions | No | New permissions | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It states the operation is an update (mutation) but does not disclose permission requirements beyond what the schema's apiKey description implies, does not describe how partial updates or omissions are handled, and provides no information on reversibility or response behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, which is concise and front-loaded. However, its brevity is a result of under-specification rather than efficient coverage of necessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 8 parameters (including a nested permissions object), no annotations, and no output schema, the description is insufficient. It fails to explain what can be updated, how partial updates work, permission requirements, or error conditions, leaving significant gaps for an agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 8 parameters with clear descriptions. The description adds no parameter-level meaning beyond the schema, which is acceptable at baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update a dashboard user account' restates the tool name with only mild added detail ('dashboard user account'). It identifies the basic verb+resource but is not specific about what can be updated and does not distinguish scim_users_update from siblings like users_identify, scim_users_create, or scim_users_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as users_identify (which also updates a user profile) or scim_users_create. The implied usage is that it updates an existing SCIM user, but no prerequisites, exclusions, or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
segments_analyticsC
Get segment size analytics over time.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| length | Yes | Number of days | |
| ending_at | No | ||
| segment_id | Yes | Segment ID | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only implies a read operation through 'Get' but does not describe permissions, rate limits, return format, or how the 'length' and 'ending_at' parameters affect the time series. This is a significant gap for an analytics tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is efficient, though its extreme brevity may be under-informative rather than concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description should explain what the analytics return (e.g., time granularity, metrics included) and when to use it. It only states the core purpose, leaving key contextual details missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the schema already documents most parameters (segment_id, length, apiKey, restEndpoint), though 'ending_at' lacks a description. The description adds no additional parameter meaning beyond the schema, which is the baseline expectation when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('segment size analytics over time'), which distinguishes it from sibling tools like segments_list and segments_details that deal with segment definitions, not analytics. It does not explicitly differentiate from other analytics tools such as campaigns_analytics, but the resource is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, time-range constraints, or any conditions that would help an agent choose it over related analytics tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
segments_detailsC
Get details for a specific segment.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| segment_id | Yes | Segment ID | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It does not state whether the operation is read-only, what authentication is required (beyond the schema's apiKey parameter), rate limits, or what data is returned. For a read operation with zero annotation coverage, this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, efficient sentence with zero waste. Front-loaded with the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and multiple siblings, the description is too sparse. It should clarify what 'details' includes, whether it returns the full segment configuration, and how it differs from segments_list or segments_analytics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (apiKey, segment_id, restEndpoint) are documented in the schema. The description adds no additional parameter semantics beyond implying segment_id is required, which is already in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb (Get) and resource (details for a specific segment). It distinguishes from siblings like segments_list (list vs. specific), though it does not explicitly name the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus segments_list, segments_analytics, or users_export_segment. Usage context is entirely absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
segments_listC
List all segments in the workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| apiKey | No | Braze REST API key | |
| restEndpoint | No | Braze REST endpoint URL | |
| sort_direction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says only that segments are listed, without disclosing pagination behavior, sorting defaults, authentication requirements, rate limits, or return shape. The presence of a page parameter also slightly undercuts the unqualified claim to list 'all' segments.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words, but it is under-specified rather than appropriately concise for a tool with four parameters and unannotated behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with no annotations, no output schema, 50% schema coverage, and undocumented pagination/sorting parameters, the description is not complete enough. An agent lacks guidance on pagination, sorting, authentication context, and how to distinguish this from segments_details or segments_analytics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%: apiKey and restEndpoint are documented in the schema, but page and sort_direction are not. The description adds no parameter meaning at all, so it fails to compensate for the undocumented pagination and sorting parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb and resource: 'List all segments in the workspace.' It is specific enough to distinguish from non-list siblings, but it does not distinguish itself from closely related siblings like segments_details or segments_analytics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of alternatives such as segments_details for a single segment, and no indication that page/sort_direction affect how the list is retrieved. Usage is only implied by the verb 'List.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_id_createA
Create a send ID for tracking message sends. Use to correlate sends with analytics.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| send_id | Yes | Custom send identifier to create | |
| campaign_id | No | Campaign to create send ID for | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says 'Create' but does not disclose authentication requirements, idempotency, duplicate handling, rate limits, or what the tool returns, which is significant for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and then the purpose. There is no redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create tool with full schema coverage and no output schema, the description covers the basic purpose. However, with no annotations, it leaves behavioral gaps around permissions, side effects, and analytics correlation mechanics unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so apiKey, send_id, campaign_id, and restEndpoint are already documented in the schema. The description adds no additional parameter meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create a send ID for tracking message sends.' It also names the purpose, tracking/correlating sends with analytics, which distinguishes it from analytics-read siblings such as sends_analytics and campaigns_analytics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear usage context: 'Use to correlate sends with analytics.' That tells the agent when this tool is appropriate, but it does not name alternatives 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.
sends_analyticsC
Get analytics for a specific send ID.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| length | Yes | Number of days | |
| send_id | Yes | Send ID | |
| ending_at | No | ||
| campaign_id | Yes | Campaign ID | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and delivers almost nothing: no statement of auth requirements despite a required apiKey parameter, no rate-limit or read-only confirmation, no indication of what metrics or time window are returned. For a tool requiring Braze REST credentials this is a significant disclosure gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, so it is structurally clean. It is arguably too terse for a six-parameter tool, but the shortfall is under-specification rather than verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six parameters, three of them required, no annotations, and no output schema, the description should explain the required campaign_id/send_id/length combination and at least sketch the analytic payload. As written it omits all of this, leaving the agent to reconstruct semantics from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83% (>80%), so the schema already documents send_id, campaign_id, length, apiKey and restEndpoint; the baseline of 3 applies. The description adds nothing beyond the schema – notably it never explains the required 'length' (days) window or the optional ending_at parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Get analytics') scoped to 'a specific send ID', which is enough to distinguish it from campaigns_analytics or canvas_analytics at a glance. It stops short of naming those siblings explicitly, so an agent must infer that this is the send-scoped analytics endpoint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the many sibling analytics endpoints (campaigns_analytics, canvas_analytics, segments_analytics, events_analytics), nor prerequisites, nor what a 'send ID' is relative to campaign_id. The agent is left to infer everything from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sessions_analyticsC
Get app session analytics over time.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | ||
| apiKey | No | Braze REST API key | |
| app_id | No | ||
| length | Yes | Number of days | |
| ending_at | No | ||
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read operation ('Get') and a time-series response ('over time') but says nothing about authentication requirements, rate limits, default units, date-range constraints, or what the returned analytics include. For a data-retrieval tool with no safety annotations this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and free of filler, which is structurally sound. However, it is over-terse for a six-parameter analytics tool with no annotations and no output schema, so its brevity comes at the cost of necessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (six parameters, one enum, required length), the absence of annotations, and no output schema, the description is materially incomplete. It does not explain authentication, time-range limits, what metrics are returned, or how to interpret the response, leaving critical context for an agent to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, and the description adds no parameter-level meaning beyond the vague phrase 'over time.' Required 'length' is already described in the schema, 'unit' uses an enum, but 'app_id' and 'ending_at' are undocumented in both schema and description, so the description fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('app session analytics') with temporal scope ('over time'), which is clear and distinguishable from most siblings like campaigns_analytics or sends_analytics. However, it does not explicitly name or exclude any alternative analytics tool, so an agent must rely on the name alone for differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The description only asserts what it does, leaving the agent to infer appropriate context from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sms_invalid_phonesC
Query phone numbers that have been marked as invalid within a date range.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 100, max 500) | |
| phone | No | Filter by specific phone number | |
| apiKey | No | Braze REST API key | |
| offset | No | Offset for pagination | |
| end_date | No | End date (YYYY-MM-DD) | |
| start_date | No | Start date (YYYY-MM-DD) | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet it discloses nothing about read-only nature, authentication requirements (apiKey/restEndpoint), rate limits, pagination behavior, or return shape. For a 7-parameter tool with no output schema, this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-formed sentence with zero filler and the key scope constraint front-loaded. It is efficient, though its brevity contributes to the under-specification elsewhere rather than being a model of tightness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, zero annotations, and no output schema, the definition should say more: pagination/limit behavior, auth expectations, result format, and the relationship to the remove sibling. Almost all of that is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the schema. The description only echoes the date-range concept behind start_date/end_date and adds no syntax, defaults, or format details beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Query'), a precise resource ('phone numbers marked as invalid'), and a scope ('within a date range'). The purpose is clear on its own, but it never distinguishes itself from the closely related sibling sms_invalid_phones_remove, which a reader must disambiguate unaided.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no mention of the natural alternative sms_invalid_phones_remove for clearing invalid numbers. Usage is only implied by the verb 'Query'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sms_invalid_phones_removeC
Remove phone numbers from the invalid phone list.
| Name | Required | Description | Default |
|---|---|---|---|
| phone | No | Single phone number to remove | |
| apiKey | No | Braze REST API key | |
| phones | No | Multiple phone numbers to remove (max 50) | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and falls short: it doesn't say whether removal is reversible, whether operation is idempotent, what happens to numbers not on the list, or that an apiKey/restEndpoint pair is needed for auth. Only the bare mutation is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and resource, with zero filler. It is appropriately sized but arguably under-specified rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, no output schema, and no required-parameter declaration, the description should explain auth expectations, batch limits/partial-failure behavior, and whether a removed number can be re-added. None of this is present, so an agent must guess at operational behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so phone, phones (max 50), apiKey and restEndpoint are already documented in the schema; the baseline of 3 applies. The description adds no meaning beyond the schema and notably omits any hint about the phone-vs-phones relationship (single vs batch), which the schema lists as two independent properties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (remove) and resource (phone numbers from the invalid phone list), which is immediately distinguishable from the sibling sms_invalid_phones list tool. However, it never names or contrasts with that sibling explicitly, leaving differentiation to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus the sibling sms_invalid_phones (list) or email counterparts like email_bounce_remove/email_spam_remove. No prerequisites, no mention that a phone must already be on the invalid list, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subscription_status_getC
Get the subscription group status for users.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Emails to query | ||
| phone | No | Phone numbers to query (for SMS) | |
| apiKey | No | Braze REST API key | |
| external_id | No | External IDs to query | |
| restEndpoint | No | Braze REST endpoint URL | |
| subscription_group_id | Yes | Subscription group ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It signals a read operation via 'Get' but says nothing about authentication requirements (the apiKey/restEndpoint params suggest a Braze REST call), rate limits, or what happens when identifiers are missing. Little is added beyond the verb.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence is front-loaded and wastes no words, but it is arguably under-specified rather than truly concise. There is no signal about output or identifier requirements, leaving the brevity closer to thinness than efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with no annotations and no output schema, the description should at least sketch what a 'subscription group status' result contains (e.g., subscribed/unsubscribed states). It does not, and it omits that at least one user identifier is needed, so an agent lacks enough to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters, including the required subscription_group_id and the email/phone/external_id query arrays. The description adds no syntax, format, or constraint detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('subscription group status for users'), which is clear on its own. However, it does not differentiate from close siblings like 'subscription_user_status', 'email_subscription_status', or 'subscription_status_set', whose relationship to this read tool an agent must infer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this read tool versus the near-identical 'subscription_user_status' sibling, nor any mention of prerequisites such as supplying at least one of email/phone/external_id. The only usage hint is the implicit 'for users' phrasing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subscription_status_setB
Update subscription group status for users (email or SMS/WhatsApp).
| Name | Required | Description | Default |
|---|---|---|---|
| No | Emails to update | ||
| phone | No | Phone numbers to update | |
| apiKey | No | Braze REST API key | |
| external_id | No | External IDs to update | |
| restEndpoint | No | Braze REST endpoint URL | |
| subscription_state | Yes | New status | |
| subscription_group_id | Yes | Subscription group ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states what is updated but omits critical behavioral details such as required API key handling, rate limits, whether changes are reversible, and error/partial-success behavior for batch updates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or redundancy. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-channel subscription mutation tool with no annotations and no output schema, the description is minimally adequate but lacks essential context about authentication, batching, and return behavior. It covers the what but not the how or side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven parameters with field-level descriptions and an enum for subscription_state. The description adds no meaning beyond what the schema provides, making a baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Update) and resource (subscription group status for users) and clarifies the channel scope (email/SMS/WhatsApp). It is clear, but does not differentiate itself from the sibling subscription_status_set_v2 or subscription_status_get, which is a notable gap given the near-identical names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the v2 variant or subscription_user_status. The description mentions update but offers no context, prerequisites, or alternatives, leaving the agent to infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subscription_status_set_v2C
Update subscription group status for users (V2 API with more options).
| Name | Required | Description | Default |
|---|---|---|---|
| No | Email address | ||
| phone | No | Phone number | |
| apiKey | No | Braze REST API key | |
| external_id | No | External ID | |
| restEndpoint | No | Braze REST endpoint URL | |
| subscription_groups | Yes | Subscription groups to update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and no output schema, the description carries the full burden. It says 'Update', implying a mutation, but does not disclose permission requirements, whether the update is idempotent, partial failure behavior across multiple subscription groups, or confirmation that it requires a user identifier (email, phone, or external_id).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with no waste. It is appropriately sized for a short description, though the parenthetical could be expanded to add more value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 6 parameters, no annotations, no output schema, and several sibling alternatives, the description is too thin. It does not cover authentication needs (the apiKey parameter), the required user identification method, or the V2 vs V1 distinction, leaving significant gaps an agent must infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 6 parameters including the nested subscription_groups array with enum values. The description adds no parameter-level meaning beyond the schema; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Update) and resource (subscription group status for users), and the parenthetical '(V2 API with more options)' hints at a sibling v1 version. However, it doesn't describe what makes V2 different or when to choose it over 'subscription_status_set'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance. The '(V2 API with more options)' is a thin hint that a V1 exists, but it does not specify conditions for selecting this tool over the sibling 'subscription_status_set'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subscription_user_statusC
List all subscription groups for a specific user.
| Name | Required | Description | Default |
|---|---|---|---|
| No | User's email | ||
| limit | No | Max results | |
| phone | No | User's phone number | |
| apiKey | No | Braze REST API key | |
| offset | No | ||
| external_id | No | User's external ID | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral disclosure. 'List' implies a read-only operation, but it omits auth requirements, rate limits, pagination behavior, and whether the operation is safe/idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no filler. It is efficiently structured, though its brevity contributes to other gaps.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no required fields, no annotations, and no output schema, the description is incomplete. It does not specify that at least one user identifier (email, phone, or external_id) is likely required, nor does it explain pagination or return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (86%), so the schema documents most parameters. The description only implies a user identifier is needed and adds no syntax, constraints, or guidance on limit/offset or restEndpoint/apiKey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List), resource (subscription groups), and scope (specific user), so the action is understandable. It does not differentiate itself from subscription_status_get or other subscription siblings, keeping it at a 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives no when-to-use, prerequisites, or alternatives. The phrase 'for a specific user' hints at user scoping but does not say which identifier to use or when to prefer this over subscription_status_get.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transactional_email_sendB
Send a transactional email via an API-triggered campaign. Used for order confirmations, password resets, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| recipient | Yes | Single recipient for transactional email | |
| campaign_id | Yes | Transactional campaign ID | |
| restEndpoint | No | Braze REST endpoint URL | |
| external_send_id | No | Custom identifier for this send | |
| trigger_properties | No | Email personalization data |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it discloses almost nothing beyond the mechanism. It does not state that this is a mutating, non-idempotent send, whether it requires a valid API key (the apiKey/restEndpoint params hint at auth but the description never says so), what happens on duplicate sends, or any rate/error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the core action front-loaded and no padding. The second sentence is useful for orientation but ends in a vague 'etc.' that adds little precision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a 6-parameter mutation tool with a nested recipient object, no output schema, and no annotations. The description should at minimum cover auth requirements, the campaign prerequisite, and send semantics, but it covers none of these, leaving the agent under-equipped to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents campaign_id, recipient, apiKey, restEndpoint, external_send_id, and trigger_properties. The description adds no parameter-level meaning (e.g., that external_send_id enables idempotency or that trigger_properties feed personalization), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Send a transactional email') and adds the mechanism ('via an API-triggered campaign'), which tells the agent a pre-configured campaign is required. It does not distinguish itself from close siblings such as messages_send, campaigns_trigger_send, or canvas_trigger_send, which an agent could easily confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Used for order confirmations, password resets, etc.' gives example scenarios, which implies the usage context, but there is no explicit when-to-use/when-not, no prerequisites, and no named alternative among the many sibling send tools. The agent must infer selection criteria on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_alias_newC
Create new user aliases for existing users or create alias-only profiles.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key (optional if set via env/header) | |
| restEndpoint | No | Braze REST endpoint URL | |
| user_aliases | Yes | Array of user aliases to create |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a write operation but says nothing about required auth/permissions, whether creation is idempotent on repeated alias_name+alias_label, what happens on conflict, or the batch ceiling (the schema's maxItems=50 is never surfaced).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tightly-worded sentence with the action front-loaded and no filler. It could arguably be split to carry an alternative-tool pointer, but as written nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterized mutation tool with no annotations and no output schema, the definition is minimal but not misleading. It omits auth expectations, batch/rate behavior, and behavior on alias collision, leaving real gaps an agent would want before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The phrase 'existing users or create alias-only profiles' does add meaning by implicitly explaining why external_id is optional, but the description gives no syntax, format, or constraint detail beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create new user aliases') and even distinguishes two modes of operation (attaching to existing users vs. creating alias-only profiles). It does not, however, differentiate itself from the closely-named sibling users_alias_update, which is the highest-risk confusion point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance beyond the implicit 'create' semantics. It never names users_alias_update (the obvious alternative for modifying an existing alias) or users_identify as the path when the alias needs to be linked to a known external_id. The reader must infer the choice from sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_alias_updateC
Update existing user aliases. Changes the alias_name for a given alias_label.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key (optional if set via env/header) | |
| restEndpoint | No | Braze REST endpoint URL | |
| alias_updates | Yes | Array of alias updates |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet it only restates that a name is changed. It says nothing about required permissions, reversibility, error behavior for a non-existent label, or the batch limit (which lives only in the schema). For a mutation tool with zero annotation coverage this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and immediately followed by the specific field change. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A write operation with no annotations and no output schema needs more than a one-line restatement. Missing permission requirements, behavior on invalid labels, and response expectations leave the agent under-informed despite the schema covering parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces the old_alias_name/new_alias_name relationship at a conceptual level but adds no syntax, format, or constraint detail beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Update existing user aliases") and clarifies the operation changes alias_name for a given alias_label. The word "existing" implicitly separates it from users_alias_new, but no sibling is named explicitly, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no reference to alternatives like users_alias_new or users_external_id_rename. The only hint is "existing," which is inference rather than stated guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_deleteA
Delete user profiles from Braze. This is permanent and cannot be undone. Use for GDPR/CCPA compliance.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key (optional if set via env/header) | |
| braze_ids | No | Braze IDs of users to delete | |
| external_ids | No | External IDs of users to delete | |
| restEndpoint | No | Braze REST endpoint URL | |
| user_aliases | No | User aliases to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It correctly discloses the critical trait that deletion is permanent and cannot be undone, which is valuable. It still omits other important behavioral details such as required permissions, whether the operation is synchronous or asynchronous, and any rate or batch limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action. The destructive warning and compliance use case follow immediately, and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, unannotated tool with five parameters and no output schema, the description covers the what, the irreversibility, and one use case. It does not compensate for the schema's missing required identifiers or explain the API key and endpoint configuration, so an agent could still invoke it incorrectly by omitting user identifiers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters. The description adds no parameter-level guidance, such as which identifier type to use or whether at least one of braze_ids, external_ids, or user_aliases is required. With full schema coverage, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: delete user profiles from Braze. This clearly distinguishes it from read-oriented siblings like users_export or aggregation siblings like kpi_dau, but it does not explicitly differentiate from scim_users_delete, which is another deletion endpoint in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear intended context: 'Use for GDPR/CCPA compliance.' That gives an agent a strong signal for when this tool is appropriate. However, it does not state when not to use it or name any alternative, such as using users_alias_update or users_external_id_remove for narrower identifier cleanup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_exportC
Export user profiles by identifier (external_id, user_alias, or braze_id).
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| braze_ids | No | ||
| external_ids | No | External IDs to export | |
| restEndpoint | No | Braze REST endpoint URL | |
| user_aliases | No | ||
| fields_to_export | No | Specific fields to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It says nothing about whether this is a read-only operation, whether exports are asynchronous/job-based, pagination or rate limits, permission requirements, or how results are delivered. For a 6-parameter data-export tool this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the verb and resource, with zero filler. Appropriately sized for what it attempts to convey.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Six parameters, no annotations, no output schema, and 67% schema coverage. The description omits authentication context, export delivery semantics, and any constraint on combining identifier types, leaving an agent under-informed for anything beyond the simplest call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, so the schema documents most parameters. The description usefully maps its three named identifier types onto external_ids, user_aliases and braze_ids, but adds nothing about fields_to_export, apiKey, restEndpoint, or whether identifiers can be mixed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Export user profiles', with the identifier types named. It distinguishes this from sibling exporters like users_export_segment or users_export_control_group by scoping to identifier-based lookup, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites (e.g. that this is a Braze API call requiring apiKey/restEndpoint), and no routing against the closely-named export siblings. The agent must infer context from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_export_control_groupC
Export users in the Global Control Group.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| restEndpoint | No | Braze REST endpoint URL | |
| output_format | No | ||
| fields_to_export | No | ||
| callback_endpoint | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It does not disclose whether the operation is read-only, what permissions are required, how the export is delivered, or what side effects exist. It only states what is exported.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and free of fluff, but it is arguably too sparse for the tool's complexity. The structure is clean, though the content is under-specified rather than efficiently concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 parameters, no annotations, no output schema, and an async-export-like design with callback and output format options. The description fails to explain return values, delivery behavior, authentication, or any operational context needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 5 parameters and only 40% schema description coverage, the description must compensate for undocumented parameters. It adds no meaning beyond the schema and does not clarify output_format, fields_to_export, callback_endpoint, or the authentication parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Export) and resource (users in the Global Control Group), which distinguishes it from the broader users_export and users_export_segment siblings. It does not explicitly name alternatives, but the scope itself provides clear differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus users_export or users_export_segment, nor any prerequisites, exclusions, or context conditions. Usage is only implied by the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_export_segmentC
Export all user profiles in a segment (async job).
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key | |
| segment_id | Yes | Segment ID to export | |
| restEndpoint | No | Braze REST endpoint URL | |
| output_format | No | ||
| fields_to_export | No | ||
| callback_endpoint | No | Webhook URL for completion |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It notes the async nature, which is useful, but doesn't mention authentication requirements, rate limits, how completion is signaled (the callback_endpoint param implies this but isn't explained), or that this may take time. For a mutation/export tool with zero annotation coverage, this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence with the key fact (async job) in parentheses. It is front-loaded and wastes no words, though the parenthetical could be more informative about what async implies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, no output schema, no annotations, and a closely-named sibling, the description is minimally adequate. It states the core purpose and async nature but omits the callback-driven completion model, permissions, and disambiguation from users_export_control_group — leaving real gaps an agent would need to fill.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, so the schema documents most parameters. The description adds nothing about output_format options, fields_to_export, or callback_endpoint semantics — notably the async callback behavior is only hinted at in the parenthetical. Baseline 3 is appropriate when schema does most of the work, but the description misses an opportunity to clarify the async flow.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Export) and resource (user profiles in a segment), clearly distinguishing it from generic users_export. However, it doesn't differentiate from the close sibling users_export_control_group, which would be the main ambiguity for an agent selecting between them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus users_export, users_export_control_group, or other export tools. The twin sibling users_export_control_group is a strong signal that usage is non-obvious, yet no disambiguation is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_external_id_removeB
Remove deprecated external IDs that were previously renamed. Cleans up old ID references.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key (optional if set via env/header) | |
| external_ids | Yes | Array of deprecated external IDs to remove | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says 'Remove' and 'Cleans up,' implying mutation, but does not disclose whether removal is irreversible, what permissions are required, rate limits, or what happens if any IDs are not deprecated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the primary action and scoped by the deprecated-ID qualifier. There is no filler and the reader immediately knows the tool's focus.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The parameter schema is fully documented and no output schema exists, so the description need not explain return values. However, for a destructive mutation with no annotations, the description should provide more behavioral context such as irreversibility or prerequisite state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents apiKey, external_ids, and restEndpoint. The description adds only general context about deprecated IDs and does not supplement the parameter meanings beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: remove deprecated external IDs that were previously renamed. It clearly distinguishes the operation from a rename or user delete by emphasizing old, deprecated IDs, though it does not explicitly name the sibling tool users_external_id_rename.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied as post-rename cleanup, since the tool targets 'deprecated external IDs that were previously renamed.' However, it gives no explicit when-to-use guidance, no exclusions, and no named alternative for cases where IDs are still active.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_external_id_renameB
Rename external IDs for users. Use for migrating to a new ID scheme.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key (optional if set via env/header) | |
| restEndpoint | No | Braze REST endpoint URL | |
| external_id_renames | Yes | Array of external ID renames |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. For a mutation tool ('rename'), it omits whether the operation is reversible, what happens to the old ID, permission/auth requirements, and any rate or batch limits, leaving key behavioral traits undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the action front-loaded and no filler. It is efficient, though arguably too terse to be maximally useful for a mutation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is under-informative: it never covers side effects, reversibility, or error behavior, and doesn't route the agent away from the similar alias/merge siblings. The schema covers parameters, but behavioral completeness is thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description adds nothing about the parameters beyond what the schema already documents (including the current/new ID pair structure and the maxItems=50 cap). Baseline 3 is appropriate when the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Rename external IDs for users'), which is clearer than a tautology. However, it does not differentiate from closely related siblings like users_alias_new, users_alias_update, or users_external_id_remove, leaving the agent to infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use for migrating to a new ID scheme' gives an implied usage context, but it offers no when-not-to-use guidance and never names the adjacent alias/merge/remove tools an agent might otherwise pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_identifyA
Identify an alias-only user profile with an external_id. This merges the alias profile into the identified user.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key (optional if set via env/header) | |
| restEndpoint | No | Braze REST endpoint URL | |
| aliases_to_identify | Yes | Array of alias-to-external-id mappings |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the core side effect ('merges the alias profile into the identified user'), which is valuable, but it omits reversibility, permission requirements, rate limits, and what happens to the alias profile after merge.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words, and the key operation is front-loaded before the merge effect. It is appropriately sized for a tool with a fully documented schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the purpose and the merge behavior, and the schema is fully documented. However, for a mutation tool with no annotations and no output schema, it lacks important context such as irreversibility, authentication needs, and explicit sibling differentiation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description mentions 'external_id' but adds no syntax, format, or constraint details beyond what the schema provides, matching the baseline score for fully covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Identify) and resource (alias-only user profile) and explains the merge effect. It distinguishes this from sibling tools like users_alias_new or users_alias_update by targeting alias-only profiles, but it does not explicitly name an alternative for comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'alias-only user profile with an external_id' implies the condition for use, but there is no explicit when-to-use versus alternatives like users_merge or users_alias_new, and 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.
users_mergeC
Merge one user profile into another. Data from the merged user will be combined into the target user.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key (optional if set via env/header) | |
| restEndpoint | No | Braze REST endpoint URL | |
| merge_updates | Yes | Array of merge operations |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It hints at the outcome ('data ... will be combined into the target user') but never states that the merged profile is consumed/destroyed, whether the operation is reversible, what permissions are required, or the batch limit (maxItems 50). For an irreversible mutation, that is a significant disclosure gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler, front-loading the operation and following with the behavioral consequence. Nothing could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an irreversible multi-user mutation with no annotations and no output schema, the description should explain authentication needs, irreversibility, and batch limits. It covers only the basic data-flow direction, leaving an agent under-informed before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents apiKey, restEndpoint, and the merge_updates structure. The description's 'merged user' vs 'target user' phrasing loosely maps to identifier_to_merge/identifier_to_keep, but adds no format or constraint detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (merge) and resource (user profile) and clarifies the direction of the merge: source data flows into the target. It is clearly distinguishable from siblings like users_delete or users_alias_update, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to merge versus deleting, aliasing, or identifying a user, and no prerequisites or exclusions are stated. The usage is only implied by the tool's name and operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_trackB
Track user data including attributes, custom events, and purchases. Use this to update user profiles, log events, and record purchases in Braze.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | No | Braze REST API key (optional if set via env/header) | |
| events | No | Custom events to log | |
| purchases | No | Purchase events to record | |
| attributes | No | User attributes to update (max 75) | |
| restEndpoint | No | Braze REST endpoint URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it does not disclose that this is a write/mutation operation, whether it is idempotent, batch-size limits, required permissions, or how the three payload arrays interact. It merely restates the purpose, leaving behavioral traits largely undocumented.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler, and the resource scope is front-loaded ahead of the task list. Efficient, though the second sentence is somewhat redundant with the first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a multi-array mutation tool with zero annotations, no output schema, and no required parameters. The description omits prerequisites (API key/config), the fact that all three payload arrays are optional and combinable, and any notion of the response or failure behavior, leaving an agent under-informed for a write operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters (including the 'max 75' attributes note and required sub-fields). The description names the three payload categories but adds no syntax or format meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Track user data') and enumerates the three payload types (attributes, custom events, purchases), which an agent can map to the tool's arrays. However, it does not distinguish this from sibling identity/mutation tools such as users_identify, users_merge, or users_alias_update, so sibling differentiation is absent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives implied usage ('update user profiles, log events, and record purchases'), which is enough to know the general intent. But there is no when-to-use vs alternatives guidance, no mention of when to prefer users_identify or users_alias_new, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
92 tool updates
v1.0.0- First observed
campaigns_analytics - First observed
campaigns_details - First observed
campaigns_list - First observed
campaigns_schedule_create - First observed
campaigns_schedule_delete - First observed
campaigns_schedule_update - First observed
campaigns_trigger_send - First observed
canvas_analytics - First observed
canvas_details - First observed
canvas_list - First observed
canvas_schedule_create - First observed
canvas_schedule_delete - First observed
canvas_schedule_update - First observed
canvas_summary - First observed
canvas_trigger_send - First observed
catalog_item_create - First observed
catalog_item_delete - First observed
catalog_item_edit - First observed
catalog_item_get - First observed
catalog_item_update - First observed
catalog_items_create - First observed
catalog_items_delete - First observed
catalog_items_edit - First observed
catalog_items_list - First observed
catalog_items_update - First observed
catalogs_create - First observed
catalogs_delete - First observed
catalogs_list - First observed
content_blocks_create - First observed
content_blocks_info - First observed
content_blocks_list - First observed
content_blocks_update - First observed
email_blacklist - First observed
email_blocklist - First observed
email_bounce_remove - First observed
email_hard_bounces - First observed
email_spam_remove - First observed
email_subscription_status - First observed
email_templates_create - First observed
email_templates_info - First observed
email_templates_list - First observed
email_templates_update - First observed
email_unsubscribes - First observed
events_analytics - First observed
events_list - First observed
kpi_dau - First observed
kpi_mau - First observed
kpi_new_users - First observed
kpi_uninstalls - First observed
live_activity_update - First observed
messages_schedule_create - First observed
messages_schedule_delete - First observed
messages_schedule_update - First observed
messages_send - First observed
preference_center_create - First observed
preference_center_get - First observed
preference_center_update - First observed
preference_center_url - First observed
preference_centers_list - First observed
purchases_products - First observed
purchases_quantity - First observed
purchases_revenue - First observed
scheduled_broadcasts_list - First observed
scim_users_create - First observed
scim_users_delete - First observed
scim_users_get - First observed
scim_users_search - First observed
scim_users_update - First observed
segments_analytics - First observed
segments_details - First observed
segments_list - First observed
send_id_create - First observed
sends_analytics - First observed
sessions_analytics - First observed
sms_invalid_phones - First observed
sms_invalid_phones_remove - First observed
subscription_status_get - First observed
subscription_status_set - First observed
subscription_status_set_v2 - First observed
subscription_user_status - First observed
transactional_email_send - First observed
users_alias_new - First observed
users_alias_update - First observed
users_delete - First observed
users_export - First observed
users_export_control_group - First observed
users_export_segment - First observed
users_external_id_remove - First observed
users_external_id_rename - First observed
users_identify - First observed
users_merge - First observed
users_track
TDQS
Scored across 92 tools
Multiple tools have overlapping or confusing boundaries: catalog singular vs plural variants (catalog_item_create vs catalog_items_create), subscription_status_set vs subscription_status_set_v2, email_blocklist vs deprecated email_blacklist, and several message-sending tools (messages_send, campaigns_trigger_send, canvas_trigger_send, transactional_email_send). Descriptions help somewhat, but an agent could easily misselect.
Mostly snake_case with a resource_action pattern, but inconsistent resource plurality (preference_center_get vs preference_centers_list), action verbs (get vs details vs info), a version suffix (_v2), and deprecated blacklist vs blocklist spelling. Readable but not fully predictable.
92 tools is an extreme mismatch for a single MCP server, far beyond the ideal 3-15 range and exceeding the 50+ threshold. Many tools are redundant (e.g., singular/plural catalog item operations, v1/v2 subscription status), bloating the surface.
Coverage is broad across Braze domains (users, messages, campaigns, canvas, analytics, catalogs, SCIM), but notable gaps exist: no delete for email templates, content blocks, or preference centers; no subscription groups list; SMS send is ambiguous. Core workflows are covered, but dead ends remain.
Maintenance
Related MCP Connectors
Marketo MCP server for AI. 130 tools to operate Marketo from Claude, Cursor, or ChatGPT.
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Unified MCP Server is a remote MCP connector for AI agents and vertical AI products that provides access to 22,000+ authorized SaaS tools across 400+ integrations and 24 categories directly inside LLMs (Claude, GPT, Gemini, Cohere). Tools operate only on explicitly authorized customer connections, enabling agents to safely read and write against live third-party systems.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA comprehensive MCP server providing over 390 tools across 66 providers, including major SaaS platforms like GitHub, Slack, and Stripe. It enables AI assistants to interact directly with a wide array of public APIs and utility services through a single interface.-
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Braze customer engagement platform through a standardized MCP interface, providing access to Braze tools and services via a unified API.2MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for Watermelon.ai that exposes all 13 public API endpoints as tools, enabling AI assistants to manage contacts, conversations, messages, custom fields, and webhooks.MIT
- FlicenseCqualityDmaintenanceComprehensive MCP server for Mailchimp Marketing API v3.0 with over 104 tools and 15+ React UI apps, enabling management of campaigns, audiences, ecommerce, automations, reports, and more via natural language.1001-