EchoRelay
Server Details
A managed runtime for custom API integrations. Manage lines, endpoints, keys, logs and DLQ via MCP.
- Status
- Healthy
- Uptime
- 100.0% over 39 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 80 tools
Most tools map cleanly to a specific resource and action, and the descriptions do a good job separating line drafts, scheduled publishes, DLQ entries, and request logs. A few boundaries are fuzzy: change_plan explicitly includes cancel-subscription behavior that duplicates cancel_subscription, and get_request versus get_receipts both expose per-target delivery outcomes.
The naming pattern is overwhelmingly consistent snake_case verb_noun, such as create_endpoint, list_lines, set_key_policy, and retry_dlq_entry. It is only slightly weakened by noun-phrase names like config_diff and default_endpoint_template, plus the word-order variation between publish_line_draft and schedule_line_publish.
80 tools is an extreme surface for a single MCP server, even for a broad relay-management product. The set would be far more navigable split into focused servers for configuration, observability, and billing, and several micro-tools around drafts, add-ons, and keys could be merged.
The tool surface is remarkably complete: it covers project lifecycle, line and endpoint configuration, credentials and keys, request and DLQ observability, members, and billing add-ons/credits. Missing pieces are minor, such as no direct line rename/update tool and no project deletion beyond archival, but core workflows have no dead ends.
Available Tools
80 toolsactivate_lineAInspect
Activate and immediately publish an inactive line so it serves traffic again. Blocked at the active-line cap — deactivate another line first. Requires edit access.
| Name | Required | Description | Default |
|---|---|---|---|
| lineKey | Yes | The line key, e.g. "v1". | |
| commitMode | No | Defaults to publish. Draft writes require draftRevision. | |
| draftRevision | No | Current line draft revision, required for draft writes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavioral context beyond annotations: immediate publication, cap blocking, and edit access requirement. No contradiction with readOnlyHint or destructiveHint flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the primary action, then constraints and permission requirements. Every sentence provides essential information with no 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?
Description covers purpose, operational constraint, and permission. Schema documents all parameters. Missing return value or error behavior, but no output schema exists and the tool is simple enough that this isn't critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all three parameters at 100%, so the description adds no additional parameter semantics. Baseline 3 is appropriate per guidelines.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'activate' and resource 'line' with immediate publishing outcome. It distinguishes from siblings like deactivate_line by explaining the tool serves traffic again.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 contextual guidance: blocked at the active-line cap, requiring deactivation first, and requiring edit access. However, it doesn't explicitly name alternative tools for similar operations like schedule_line_publish.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_projectADestructiveInspect
Archive a project you own. Reversible: the project + slug persist and credits are kept, but the data plane drops the tenant (callers get 404). Idempotent. Fails with an error if the project has archive protection enabled. That is a support-only unlock, not something this call can override. Requires an ACCOUNT-scoped management token and the config scope.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The slug of a project you own. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral detail beyond the annotations: it states the operation is reversible (project+slug persist, data plane drops tenant with 404), idempotent, fails on archive protection, and requires an ACCOUNT-scoped token and config scope. These details are not in the annotations and give the agent a precise mental model of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, then adds essential caveats (reversible, idempotent, protection error, token/scope) in a compact sequence. Every sentence carries information, and there is no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description covers prerequisites, error conditions, idempotency, and the effect on the data plane. It omits only the success response format, which is not critical for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the single slug parameter with 'The slug of a project you own,' and the description adds no additional semantic meaning beyond restating the ownership requirement. With 100% schema coverage, 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 opens with the specific verb 'Archive' and the precise resource 'a project you own,' clearly distinguishing it from siblings like unarchive_project. It further clarifies the scope by stating the project must be owned, and the reversible nature confirms it is the archiving action rather than a deletion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: you must own the project and have the required token and scope, and it fails if archive protection is enabled. However, it does not explicitly name alternatives or say 'use unarchive_project to reverse,' leaving some inference to the agent despite the sibling list being available.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_line_publishBDestructiveInspect
Cancel one line schedule before its two-minute lock.
| Name | Required | Description | Default |
|---|---|---|---|
| lineKey | Yes | ||
| draftRevision | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is destructive. The description adds the two-minute lock detail, which is a meaningful behavioral constraint. However, it does not explain the consequences of the lock or what 'cancel' entails beyond the annotation, so transparency is moderate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, succinct sentence that immediately conveys the core action and timing. There is no redundant language, and it is front-loaded with the verb.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks essential details about the required parameters and the meaning of the two-minute lock. While annotations cover the destructive nature, the description does not explain prerequisites, effects, or error conditions, making it insufficient for reliable tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention the parameters at all, and the schema has no descriptions for lineKey or draftRevision. With 0% schema coverage, the description fails to clarify what these parameters represent or how to populate them, leaving the agent without guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (cancel) and resource (one line schedule), and the 'two-minute lock' condition distinguishes it from publish/draft tools. It could be clearer about what 'line schedule' refers to, but it is sufficiently specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for canceling a scheduled publish before a two-minute lock, but it does not explicitly compare to sibling tools like schedule_line_publish or discard_line_draft. No exclusions or after-lock guidance are provided, leaving usage context partially implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_subscriptionADestructiveInspect
Schedule the project owner's subscription for cancellation at the end of the current billing period. Returns {kind: 'scheduled', newPlan: 'free', effectiveAt}. Add-ons keep renewing while the plan is active; after it ends they stop renewing and each already-paid add-on cycle stays active until its own end date (use unsubscribe_addon to stop one sooner). Owner-only; requires a token minted with the billing scope.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses the scheduled nature of cancellation, the exact return structure, the behavior of add-ons during and after the plan ends, and authentication requirements. This adds significant behavioral context that annotations alone do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet complete, with three sentences that each serve a distinct purpose: core action and return, add-on behavior with alternative, and auth requirements. It is well-structured and front-loaded with the primary function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 of scheduled cancellation with add-on interactions and permission constraints, the description covers all essential aspects: what happens to add-ons, when cancellation takes effect, return format, and required token scope. It is fully self-contained and complements the sparse annotations and absent output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the schema is trivially complete. The description adds no parameter-specific semantics, but none are needed. The baseline for zero-parameter tools is 4, and the description sufficiently explains the operation's behavior and return value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action: scheduling the project owner's subscription for cancellation at the end of the current billing period. It distinguishes itself from siblings by explicitly mentioning the timing and the alternative 'unsubscribe_addon' for add-ons, making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context for when to use this tool, including owner-only access and billing scope requirements. It also names an alternative (unsubscribe_addon) for stopping add-ons sooner, giving clear when-to-use vs. when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
change_planADestructiveInspect
Switch the project owner between Pro and Scale, or cancel the subscription (effectively dropping to Free at period end). Returns {kind, newPlan, effectiveAt, applied} — applied=true means Paddle was charged immediately, otherwise the change is queued for the current period end. Use preview_plan_change first to see the dollar impact. Owner-only; requires a token minted with the billing scope.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the return format with {kind, newPlan, effectiveAt, applied} and details the behavior of `applied` (immediate charge vs queued). It also discloses that canceling drops to Free at period end. This goes well beyond the annotations (destructiveHint=true) to give a full picture of the action's effects and timing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences that are tightly packed with information: action, return value, and usage guidance. No wasted words; every clause serves a 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?
Despite having only one parameter and no output schema, the description covers the action, effect, timing, return semantics, prerequisites, and suggested prior step. It is fully self-contained for an agent to select and 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 description adds meaningful context to the single 'plan' parameter by mapping values to actions (Pro/Scale switch, free = cancel). Although it doesn't explicitly enumerate the enum values, it explains their practical effect. Since schema coverage is 0%, this compensation is valuable but not exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with specific verbs ('Switch', 'cancel') and resources ('project owner between Pro and Scale', 'subscription'). It also distinguishes from sibling tools like preview_plan_change by explicitly positioning this as the actual change action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 provides explicit guidance to use preview_plan_change first to see the dollar impact, and states prerequisites (owner-only, billing scope token). This clearly indicates when to use the tool and what is needed, differentiating it from related alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
config_diffARead-onlyInspect
Preview what Save & Publish (or the pending scheduled publish, if one exists) would change: added/removed/changed lines, and within each changed line the added/removed/changed endpoints and targets, plus any project-level setting change. Outbound auth secrets are redacted the same as get_config.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/non-destructive behavior. The description adds useful behavior beyond that: it checks the pending scheduled publish if one exists, and it redacts outbound auth secrets identically to get_config, warning the agent about sensitive output.
Agents need to know what a tool does to the 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, both purposeful: the first front-loads the operation and its diff scope, and the second adds the security-relevant redaction behavior. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, annotated read-only tool, the description is complete: it states what will be diffed, the scheduled-publish exception, the scope of changes, and the redaction behavior. Nothing else is 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 tool takes zero parameters and the schema coverage is complete, so there are no parameter semantics the description needs to explain. Per the rubric, a no-parameter tool gets a baseline 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific action 'Preview' and the resource (the config diff against Save & Publish or the pending scheduled publish), then enumerates exactly what is included: changed lines, endpoints, targets, and project-level settings. This makes its function distinct from get_config/rollback_config even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the intended use—inspect changes before Save & Publish or when a scheduled publish is pending—but it never explicitly tells an agent when to choose this over alternatives such as rollback_config, get_config, or list_config_revisions, nor does it name any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_api_keyAInspect
Mint an inbound relay (data-plane) API key for callers to send traffic to this project. Its er_live_ or er_test_ secret authenticates relay requests; it cannot call management MCP or REST. Returns the plaintext exactly once — store it now, it cannot be retrieved later. Editor + owner; subject to the project key policy (see get_key_policy).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | live → paid pool, test → testing pool (rate-limited to the plan's live rate). | |
| name | Yes | Human-readable label, up to 120 characters. | |
| ttlDays | No | Lifetime in days. Omit to use the project's defaultKeyTtlDays from get_key_policy. Null = never expires (owner-only unless editorsMayCreateNonExpiringKeys is set). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only mark readOnlyHint false and destructiveHint false, so the description carries the full disclosure burden. It provides rich behavioral detail: secret format (er_live_/er_test_), one-time plaintext return, non-retrievability, permission requirements (Editor+owner), and policy dependency. This aligns with the annotations while adding significant value beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences deliver the core purpose, key behaviors, permissions, and policy reference without redundancy. Each sentence contributes distinct information and the structure is front-loaded with the main 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?
The description covers purpose, usage boundaries, return behavior (plaintext exactly once), permissions, and policy linkage. Since there is no output schema, the one-time return note adequately explains what to expect. It also references the related policy tool for additional context, making this comprehensive for 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?
The schema covers 100% of parameters with descriptions, including the mode enum and null semantics for ttlDays. The description adds contextual background about the secret prefix and permissions, but does not need to repeat parameter details. This matches the baseline of 3 for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb 'Mint' and resource 'inbound relay (data-plane) API key', clearly identifying the tool's function. It explicitly distinguishes this from management keys by noting the secret cannot call management MCP or REST, separating it from sibling tools like create_project_token.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the use case — 'for callers to send traffic to this project' — and sets boundaries by noting the key cannot call management APIs. It also references get_key_policy for policy constraints, but does not explicitly name an alternative tool for creating management keys. This is clear context with implicit exclusions, though not a fully explicit when-to-use comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_credentialAInspect
Save a new reusable credential, sealed with the project's encryption key at write time. Neither this call nor any later read ever returns the secret back — reference it from a target by id (see create_endpoint/update_endpoint's target.credentialVaultEntryId) instead of copying the secret around. auth.type selects which fields apply: bearer→token, basic→username+password, apiKeyHeader→headerName+key, apiKeyQuery→paramName+key, publicPrivateKey→secret+key. destinationHost is required and permanent: the credential is only ever sent to that host, over https, and no later call can re-aim it.
| Name | Required | Description | Default |
|---|---|---|---|
| auth | Yes | The credential's auth shape. | |
| name | Yes | Human-readable label, up to 120 characters. | |
| destinationHost | Yes | The only host this credential may be sent to, e.g. "api.stripe.com", or a single-label wildcard, e.g. "*.stripe.com" (matches api.stripe.com, not stripe.com and not a.b.stripe.com). Host only — no scheme, port or path. Internationalised hosts must be given in punycode ("xn--…"). Permanent: attaching this credential to a target on any other host is refused, and it cannot be changed later — a different destination means a new credential, which means entering the secret again. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the basic readOnly/destructive hints by disclosing critical behaviors: the secret is sealed at write time and never returned, destinationHost is permanent, and the credential is only sent to that host over https. These are essential constraints not apparent from annotations or schema alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place. It front-loads the main purpose, then methodically covers security, usage pattern, auth type mappings, and destinationHost constraints without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description covers the most important outcome (the secret is not returned, and the credential is referenced by id), but it does not explicitly state what the response contains (e.g., the credential id or a success indicator). This is a minor gap given the strong behavioral context 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?
Although the schema covers every parameter, the description adds crucial cross-field semantics by mapping each auth.type value to the applicable fields (bearer→token, basic→username+password, etc.). It also explains destinationHost's permanence and wildcard matching, which is not obvious from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Save a new reusable credential', which is a specific verb-resource pair and clearly distinguishes this from related tools like create_api_key. It further specifies the credential is sealed with the project's encryption key and references how it is used (by target id), making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear usage context by explaining that the secret is never returned and should be referenced from a target via credentialVaultEntryId, pointing to create_endpoint/update_endpoint. It lacks explicit 'when not to use' or alternatives like create_api_key, but the guidance is sufficient for most agents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_endpointAInspect
Create an endpoint under a line. Defaults to immediate publish; draft mode requires draftRevision. scheduledAt stages the line draft then schedules it. Requires edit access.
| Name | Required | Description | Default |
|---|---|---|---|
| lineKey | Yes | The line key to create the endpoint under. | |
| endpoint | Yes | An EchoRelay endpoint. Round-trips with the JSON returned by get_endpoint. | |
| commitMode | No | Defaults to publish. Draft writes require draftRevision. | |
| scheduledAt | No | Compatibility alias: stage this endpoint in its line draft then schedule that line. | |
| draftRevision | No | Current line draft revision, required for draft writes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=false. The description adds the important extras: edit access is required, publish is the default side effect, and scheduledAt reaches beyond the endpoint to stage and schedule the parent line draft — a non-obvious cross-resource effect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short clauses, zero filler, and the most decision-relevant fact (default publish) is front-loaded right after 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 deeply nested create tool the description covers the mode/auth semantics an agent needs before invoking, and the endpoint payload itself is exhaustively documented in the schema. It omits nothing critical, though the interplay with scheduling siblings could be spelled out further.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five params including commitMode and draftRevision. The description largely restates those schema descriptions and adds no new syntax or format detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus its scope: 'Create an endpoint under a line.' That is unambiguous and distinguishable from update_endpoint/delete_endpoint by plain meaning, but the description never names a sibling tool, so it stops short of 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 real context on which mode applies: publish is the default, draft requires draftRevision, and scheduledAt stages the line draft before scheduling. It does not point to alternatives (update_endpoint for existing endpoints, default_endpoint_template, discard_draft_endpoint), so no explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_lineAInspect
Create a new versioned line. A new line has no endpoints, so creating one publishes nothing and serves no traffic yet — add an endpoint, which publishes the line with it. Draft mode requires draftRevision 0. Requires edit access.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable line name. | |
| lineKey | Yes | URL key, lowercase letters/digits/hyphens, e.g. "v1". | |
| commitMode | No | Defaults to publish. Draft writes require draftRevision. | |
| draftRevision | No | Current line draft revision, required for draft writes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey this is a non-read-only and non-destructive operation. The description adds meaningful behavioral detail: a newly created line has zero endpoints, publishes nothing, serves no traffic, and draft mode requires draftRevision 0. This goes beyond what the annotations and schema alone state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core purpose, then behavioral significance, then mode/access constraints. No filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and moderate complexity, the description covers the key operational implications: no traffic until an endpoint is added, draft mode needs draftRevision 0, and edit access is required. It could mention success/error behavior, but nothing essential for calling the tool 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 the schema already documents name, lineKey, commitMode, and draftRevision. The description adds value by explaining draft-mode behavior and the specific requirement that draftRevision be 0 for creation, which the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Create a new versioned line.' It further clarifies what creating a line does (no endpoints yet), which distinguishes it clearly from sibling tools like create_endpoint and duplicate_line.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explains the core usage context: creating a line alone has no traffic, and adding an endpoint publishes it. It also notes prerequisites like edit access and draft mode requirements. It does not explicitly name sibling alternatives, but the guidance is implied clearly enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_projectAInspect
Create a new project on your account so an agent can bootstrap from a fresh account. The slug is derived from the name and validated server-side (format, reserved words, uniqueness). Each plan includes a fixed number of active projects (free tiers one; paid plans more: see list_subscription_plans); at the limit this errors. If an existing project can host this integration, skip create_project and call create_project_token against it instead of adding another. Requires an ACCOUNT-scoped management token and the config scope. Returns the created project ({id, slug, name, apiBaseUrl, archived}); call create_project_token next to mint a management token for it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable project name (1–100 chars). The slug is derived from it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), this description discloses server-side slug validation, plan-based active-project limits with error behavior, ACCOUNT-scoped token and config scope requirements, and the exact return shape. This is rich behavioral context that annotations alone do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than a simple one-liner, but every sentence carries decision-relevant information: purpose, validation behavior, plan limits, alternative routing, auth requirements, return value, and next step. It is front-loaded with the core purpose and remains appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 single required parameter, no output schema, and annotations that only indicate mutability, the description covers everything needed to call the tool correctly: what it does, when to avoid it, required permissions, failure modes, return shape, and the follow-up action. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the only parameter, name, is already described in the schema with length constraints and slug derivation. The description's mention of slug derivation and validation adds marginal behavioral context but does not significantly enhance parameter semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (create) and resource (project), explains the purpose of bootstrapping from a fresh account, and clearly differentiates create_project from create_project_token and the project-listing siblings. An agent can immediately understand what this tool does and what it is not for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to skip this tool ('If an existing project can host this integration') and directs the agent to the appropriate alternative (create_project_token). It also discloses plan limits, required token scope, and the recommended next step, giving clear decision-making context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_project_tokenAInspect
Mint a PROJECT-scoped management token (er_mcp_) for MCP and REST; it cannot authenticate relay traffic. Use it after create_project to configure a fresh project, or for any project you already own. Attenuated by design: the scopes must be a subset of THIS management token's own grant (read is always included), expiry is mandatory (1–90 days, default 30, never "never"), and the minted management token (being project-scoped) can never mint management tokens itself. spend is human-granted only: no management token, of any scope, can mint one carrying it. Mint a spend-scoped token from the project's panel instead. Requires an ACCOUNT-scoped management token and the config scope. Returns the plaintext exactly once; only its hash is stored.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The slug of a project you own. | |
| label | Yes | Human-readable management token label (1–100 chars). | |
| scopes | No | Scopes for the minted management token: must be a subset of this management token's own scopes. `read` is always granted. `spend` and the legacy `billing` scope are never mintable here (panel-only). Default: read + config. | |
| expiresInDays | No | Days until the minted management token expires. Default 30. API-minted management tokens always expire. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate non-read, non-destructive behavior. The description adds critical behavioral detail beyond that: minted tokens are attenuated, scopes must be a subset, expiry is mandatory, minted project-scoped tokens can never mint management tokens, and the plaintext is returned exactly once with only a hash stored. This goes well beyond what the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured: purpose first, then usage guidance, then constraints, then credential-handling behavior. Every sentence carries operational weight, and the security-relevant details justify the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly discloses the critical return behavior ('Returns the plaintext exactly once; only its hash is stored'). It also covers prerequisites, scoping constraints, alternatives, and when-not-to-use, making it complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all four parameters with 100% coverage, so the baseline is 3. The description adds meaningful semantic context: scopes are always subsetted, read is always included, spend is human-granted only, and 'never never' expiry is disallowed. This adds value beyond the schema's field-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Mint') and resource ('PROJECT-scoped management token') with a clear scope boundary: it works for MCP and REST but cannot authenticate relay traffic. This distinguishes it from siblings like create_api_key, list_project_tokens, and revoke_project_token without needing to open their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use the tool ('after create_project to configure a fresh project, or for any project you already own') and gives a when-not instruction with an alternative ('Mint a spend-scoped token from the project's panel instead'). It also states the required calling context: an ACCOUNT-scoped management token with the config scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deactivate_lineADestructiveInspect
Take a line off the data plane immediately (callers get 404) without deleting it — endpoints/targets/config are preserved and it can be reactivated later. A deliberate action; live traffic is never auto-disabled. Requires edit access.
| Name | Required | Description | Default |
|---|---|---|---|
| lineKey | Yes | The line key, e.g. "v1". | |
| commitMode | No | Defaults to publish. Draft writes require draftRevision. | |
| draftRevision | No | Current line draft revision, required for draft writes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true and readOnlyHint=false. The description adds valuable behavioral context: immediate 404s, preservation of endpoints/targets/config, reversibility, and the guarantee that live traffic is never auto-disabled. It also discloses a permission requirement. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, with the primary action and immediate consequence in the first clause. Every phrase adds value, including reversibility, preservation, and permission. 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 mutation tool with 3 parameters and no output schema, the description covers essential operational context: what happens to traffic, what is preserved, reversibility, permission required, and that it is deliberate. This is sufficient for an agent to decide when to use 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 lineKey, commitMode, and draftRevision are fully documented in the schema. The description adds no parameter-specific meaning, which is acceptable given the schema's completeness. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('take off') and resource ('line'), states the immediate effect (callers get 404), and explicitly distinguishes from deletion by noting configuration is preserved and the line can be reactivated. This clearly separates it from siblings like delete_line and activate_line.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 contrasts with deletion ('without deleting it — endpoints/targets/config are preserved and it can be reactivated later'), implying it is for temporary removal while preserving state. It also states a prerequisite ('Requires edit access') and notes it is a deliberate action. However, it does not explicitly name alternative tools or provide exclusions beyond deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
default_endpoint_templateARead-onlyInspect
Return a canonical minimal-valid endpoint JSON for a fresh line. POST it verbatim to create_endpoint to land an immediately-working endpoint, then customise. It comes back with mock: true: it answers callers with its own canned body and never dials the target it carries, so a 200 from it proves the endpoint is reachable and nothing about delivery. Set mock: false and give the target a real URL before treating a call as delivered. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| lineKey | Yes | The line key, e.g. "v1". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, it discloses the key behavioral quirk: the response has mock: true, uses a canned body, and never dials the target. It also explains that a 200 only proves reachability, not delivery, which is essential for correct interpretation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three focused sentences and each one earns its place: what it returns, how to use it, and what its mock behavior implies. The most important caveat is spelled out rather than implied.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only template generator with no output schema, the description fully covers the essential context: what the output is, how it should be consumed, and what not to assume about its 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?
The only parameter, lineKey, is already fully described in the schema with an example, so schema coverage is 100 percent. The description does not add extra meaning about the parameter, which is acceptable but also not a differentiator.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'Return a canonical minimal-valid endpoint JSON for a fresh line.' This clearly identifies the tool as a template generator and distinguishes it from endpoint CRUD tools like create_endpoint or get_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?
It gives an explicit workflow: POST the result verbatim to create_endpoint, then customise. It also tells the agent when the result should not be trusted as delivered: set mock to false and provide a real target URL first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_credentialADestructiveInspect
Delete a saved credential. Blocked (not a permission or not-found error — a validation error) while any target still references it; repoint or remove those targets first.
| Name | Required | Description | Default |
|---|---|---|---|
| credentialId | Yes | UUID of the credential to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While the destructiveHint annotation already flags this as a destructive operation, the description adds valuable context about the error type (validation error vs. permission/not-found) and the dependency on target references. This exceeds the annotation's simple flag.
Agents need to know what a tool does to the 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, each serving a distinct purpose: state the action and state a key constraint. No fluff, front-loaded with the main verb.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter delete operation with no output schema, the description adequately covers the main function and an important edge case. It could mention irreversibility explicitly, but destructiveHint already implies it, so the description is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents the only parameter. The description adds no extra parameter-level detail beyond referencing 'a saved credential,' so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description leads with 'Delete a saved credential,' a specific verb+resource statement that clearly differentiates from sibling tools like create_credential and update_credential. The additional detail about being blocked when referenced adds further purpose clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit precondition: deletion is blocked while targets still reference the credential, with advice to repoint or remove those targets first. This acts as clear when-not guidance, though it does not name alternative tools for repointing/removal, preventing a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_endpointADestructiveInspect
Delete an endpoint and its targets, immediately or by staging the removal in the line's draft with commitMode "draft" and draftRevision (returns {draft} instead of deleting right away). An immediate delete publishes a new revision without the endpoint and returns {deleted: true, endpointId}, but the line's prior revision still has it, so list_config_revisions can find that revision and rollback_config can republish over the deletion. Errors when lineKey/endpointId is missing, the line or endpoint doesn't exist, the draft revision is stale, or removing the endpoint would leave an active line with no endpoints. Requires edit access.
| Name | Required | Description | Default |
|---|---|---|---|
| lineKey | Yes | The line key, e.g. "v1". | |
| commitMode | No | Defaults to publish. Draft writes require draftRevision. | |
| endpointId | Yes | The endpoint UUID. | |
| draftRevision | No | Current line draft revision, required for draft writes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true, but the description goes far beyond that: it discloses the staged deletion path, the return payloads for both modes, the rollback possibility via list_config_revisions and rollback_config, error conditions, and the edit-access requirement. This rich behavioral context fully complements the annotations and contradicts none of them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph but each sentence adds value: modes, returns, rollback, errors, access. It is front-loaded with the primary action and then details. Slightly long but no filler; it earns its length given the complexity of the two-mode 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 mutation tool with no output schema, the description explains return values for both modes, error scenarios, and prerequisites (edit access). It covers the necessary information for an agent to call it correctly. Minor omissions: it doesn't specify what 'targets' includes or what happens if the endpoint is already deleted, but error handling covers the latter. Overall, fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter. The description reinforces that commitMode defaults to publish and draft writes require draftRevision, but this is already stated in the schema. It does add the semantic that deletion affects 'targets', but that is not parameter-specific. No additional parameter meaning beyond the schema is provided, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('delete') and resource ('endpoint and its targets'), and distinguishes between immediate and staged deletion via commitMode. It clearly separates this from siblings like update_endpoint and discard_draft_endpoint by explaining the two modes and the draft behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit guidance on when to use immediate vs staged deletion (draft mode with commitMode and draftRevision). It does not explicitly name alternative tools or state when not to use this tool, but the mode distinction is a clear usage guideline. Missing exclusionary guidance for siblings like discard_draft_endpoint is a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_lineADestructiveInspect
Delete a line and every endpoint under it, immediately or by staging the removal in the line's draft with commitMode "draft" and draftRevision (returns {draft}, discardable via discard_line_draft, instead of deleting right away). An immediate delete removes the line's own revision history along with it, so list_config_revisions has nothing left to list and rollback_config cannot bring the line back. Errors when lineKey is missing, doesn't match a line in the project, or the draft revision is stale. Requires edit access.
| Name | Required | Description | Default |
|---|---|---|---|
| lineKey | Yes | The line key, e.g. "v1". | |
| commitMode | No | Defaults to publish. Draft writes require draftRevision. | |
| draftRevision | No | Current line draft revision, required for draft writes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint: true, readOnlyHint: false), the description discloses that the operation cascades to endpoints, permanently removes revision history (making rollback impossible), returns a draft object when staged, and lists specific error triggers. It also notes that edit access is required. This goes well beyond the annotation hint and gives the agent a full picture of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence serves a purpose: the first sentence defines the action and modes, the second explains consequences, the third lists errors, and the fourth states the access requirement. It is front-loaded with the core action and does not waste words. Structure is clear and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 of the tool (cascading deletes, two modes, revision history impact, error conditions), the description covers all essential aspects. It explains the draft return value, mentions the inability to roll back, lists errors, and states prerequisites. No critical information is missing for an agent to invoke it correctly, and the lack of an output schema is compensated by describing the draft return.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all three parameters with descriptions, so the baseline is 3. The description adds meaningful context by explaining how commitMode and draftRevision interact (draft mode requires draftRevision and returns a draft object), and clarifies that lineKey errors occur when missing or unmatched. This adds value beyond the schema, earning a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('delete'), a specific resource ('a line'), and the scope ('every endpoint under it'). It clearly differentiates from siblings like delete_endpoint by scoping to the line level, and it also distinguishes the draft staging mode. The purpose is unambiguous and distinct from similar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use draft mode vs. immediate publish mode, and references discard_line_draft as an alternative for undoing a staged delete. It also states the error conditions and access requirement. However, it does not explicitly name delete_endpoint as the alternative for deleting a single endpoint, though the scope makes that clear. Overall, usage guidance is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discard_dlq_entryADestructiveInspect
Permanently delete a DLQ entry without retrying it: the delivery is never re-sent and the entry cannot be restored. Use retry_dlq_entry instead when the delivery should still reach its target. The inbound request stays answerable through get_request for the project's requestLogRetentionDays window. Errors if the entry is already gone (retried, discarded, purged or evicted). Requires edit access.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Dead-letter entry id from list_dlq. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true, but the description goes beyond that by adding nuances: the entry cannot be restored, errors if already gone, the inbound request remains answerable through get_request for a retention window, and requires edit access. These behaviors are not inferable from annotations alone and provide critical operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact but information-dense. It front-loads the core action, explains the side effect, provides the alternative, and notes error and permission conditions—all in two sentences without redundancy. Every clause adds 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 destructive single-parameter operation, the description covers all necessary aspects: what it does, what it does not do, consequences on related data, error scenarios, permissions, and the alternative tool. No output schema exists, but the description adequately sets expectations for the side effects, making it complete 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 coverage is 100% with the single 'id' parameter described as 'Dead-letter entry id from list_dlq.' The description adds no additional parameter-specific information, but since the schema already fully documents the parameter, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Permanently delete'), a specific resource ('DLQ entry'), and defines the behavior clearly: 'the delivery is never re-sent and the entry cannot be restored.' It explicitly distinguishes itself from its sibling retry_dlq_entry, making it unambiguous which operation is meant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explicit usage guidance: 'Use retry_dlq_entry instead when the delivery should still reach its target.' It also states error conditions (entry already gone) and permission requirement (edit access), which clarifies when to use and when not to.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discard_draft_endpointADestructiveInspect
Discard one endpoint change from a line draft.
| Name | Required | Description | Default |
|---|---|---|---|
| lineKey | Yes | ||
| endpointId | Yes | ||
| draftRevision | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this is a destructive operation. The description adds minimal behavioral context beyond 'discard,' such as whether the change is permanently lost or how the draft is affected, but it does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that directly states the tool's purpose with no wasted words. It 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 destructive tool with three required parameters and no output schema, this description is too minimal. It does not explain what 'draftRevision' is, whether the action is irreversible, or what the outcome/return value looks like. It lacks the depth needed for an agent to invoke the tool with confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate by explaining the parameters. It only hints that 'endpointId' relates to an endpoint change and 'lineKey' to a line draft, but it does not clarify the role of 'draftRevision' or provide any explicit parameter semantics. This falls short of compensating for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('discard') with a specific resource ('one endpoint change from a line draft'), clearly distinguishing it from siblings like discard_line_draft (whole draft) and delete_endpoint (endpoint deletion). It conveys exactly what action is performed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'from a line draft' implies the tool is used while editing a line draft to revert a single endpoint change, providing some contextual guidance. However, it does not explicitly state when to use this tool over alternatives like discard_line_draft, nor does it mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discard_line_draftCDestructiveInspect
Discard every unpublished change and schedule for one line.
| Name | Required | Description | Default |
|---|---|---|---|
| lineKey | Yes | ||
| draftRevision | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description is not required to state that it produces a destructive side effect. It adds some context by mentioning that both 'unpublished change' and 'schedule' are discarded, but it does not disclose whether the action is reversible, what happens to the draft revision, or whether any confirmation is needed. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise and front-loaded with the action. However, the phrasing 'every unpublished change and schedule' is grammatically awkward and could be clearer. It earns a 4 because there is no wasted prose, though minor structural improvements would help.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 output schema, the description leaves gaps: it does not explain the role of draftRevision, what 'schedule' refers to, or the distinction from similar tools like discard_draft_endpoint. The overall context is thin, especially given the tool's destructive nature and the need to understand the revision parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameter meanings. It implicitly covers lineKey via 'one line,' but draftRevision is completely unexplained—what it represents, how it controls the discard, and why it is required. The description does not compensate for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the verb 'discard' and specifies the resource as 'every unpublished change and schedule for one line.' It distinguishes from siblings like publish_line_draft and get_line_draft. However, the phrasing is slightly awkward ('change and schedule' could be misread as two separate objects) and does not explicitly mention the line's draft revision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It does not state that this should be used to revert unpublished changes, nor does it mention when not to use it (e.g., if you want to keep the schedule). The description implies a use case but offers no explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
downgrade_addonADestructiveInspect
Schedule a tier downgrade for a non-stackable add-on (RPM tier). The current tier stays active until nextRenewalAt; at that point the lower tier is charged and activated. No mid-cycle charge. Use list_addons to find available keys. Returns {addonKey, targetAddonKey, project, effectiveAt}. Owner-only; requires a token minted with the billing scope.
| Name | Required | Description | Default |
|---|---|---|---|
| addonKey | Yes | Current active add-on key to downgrade from. | |
| targetAddonKey | Yes | Target (lower) add-on key to downgrade to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses important behaviors beyond annotations: the current tier stays active until nextRenewalAt, the lower tier activates after that, no mid-cycle charge, and requires owner role with billing scope. This enriches the destructiveHint=true annotation with timing and auth details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four concise sentences cover purpose, timing, key discovery, return value, and auth. Every sentence is informative and no content is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description adequately explains the return value ({addonKey, targetAddonKey, project, effectiveAt}). It also covers scheduling behavior, prerequisites, and authorization, making it complete for an AI agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides complete descriptions for both parameters (100% coverage). The description adds no significant parameter-level detail beyond what the schema states, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Schedule a tier downgrade for a non-stackable add-on (RPM tier).' This clearly distinguishes it from sibling tools like subscribe_addon or change_plan by specifying the action and scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context: scheduling happens at next renewal, with no mid-cycle charge, and points to list_addons for finding keys. It does not explicitly mention when not to use it or alternatives, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dry_run_endpointARead-onlyInspect
Validate an endpoint document without writing it. Returns either {ok: true, resolved: } or {ok: false, errors: {...}}. Pass endpointId to dry-run a PATCH against an existing endpoint; omit it to dry-run a create. Supply sample and/or answerSample to also run each target's mapping against a real payload and see what it produces, which field came from which node, and every rule that failed with the value that broke it. No DB write, no queue entry, no billing, and the payload is never sent anywhere.
| Name | Required | Description | Default |
|---|---|---|---|
| sample | No | Optional: a request payload, shaped as one a caller would actually send, passed as JSON rather than as a string containing JSON. Every target carrying an outgoingMapping is evaluated against it and the verdict is attached to that target as outgoingMappingEvaluation. | |
| lineKey | Yes | The line key. | |
| endpoint | Yes | Endpoint document (for create dry-run) or PATCH body (when endpointId is supplied). | |
| endpointId | No | Optional: dry-run a PATCH against this endpoint UUID. | |
| answerSample | No | Optional: an answer payload, shaped as one a target would actually return. Drives answerMapping the same way, as answerMappingEvaluation. It cannot be inferred from sample — the two travel in opposite directions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false, so safety is partly covered. The description adds concrete value beyond that: no DB write, no queue entry, no billing, payload never sent, plus the exact success/failure return shape ({ok:true, resolved} / {ok:false, errors}). Side-effect disclosure is the key addition here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and return shape, then the mode switch, then the optional sampling behavior, and finally the no-side-effects guarantee. Every sentence carries distinct information with no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with no output schema, the description compensates by stating both return envelopes and what the evaluation output contains (field provenance, failing rules, offending values). Combined with the fully documented schema, an agent has everything needed to call it correctly in either mode.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantic value: endpointId selects PATCH-vs-create mode, and sample/answerSample are explained as driving outgoingMapping/answerMapping evaluation and as traveling in opposite directions so answerSample cannot be inferred from sample.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb (validate/dry-run) on a specific resource (an endpoint document) and immediately signals the non-writing nature, which is exactly what separates it from create_endpoint and update_endpoint. An agent can distinguish it from all siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly branches on the endpointId parameter: pass it to dry-run a PATCH against an existing endpoint, omit it to dry-run a create, and pass sample/answerSample to exercise target mappings. It does not explicitly name the create_endpoint/update_endpoint alternatives it pairs with, but the when-to-use conditions for each mode are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate_lineAInspect
Copy a line and all its endpoints/targets/rules into a new line key — build v2 from v1. The copy is saved inactive and remains off the data plane; edit it, then activate_line when ready. Requires edit access.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional name for the copy (defaults to "<source name> (copy)"). | |
| lineKey | Yes | The source line key to copy. | |
| commitMode | No | Defaults to publish. Draft writes require draftRevision. | |
| newLineKey | Yes | New line key for the copy, e.g. "v2". | |
| draftRevision | No | Current line draft revision, required for draft writes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behavioral traits beyond the annotations: the copy is 'saved inactive' and 'remains off the data plane', requiring explicit activation, and 'Requires edit access' which is an authorization requirement. This adds significant context to the readOnlyHint=false and destructiveHint=false annotations, giving a clear picture of post-conditions and permissions.
Agents need to know what a tool does to the 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 long, front-loaded with the primary action, and every clause earns its place. It conveys purpose, key side effects, and a workflow hint without any waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 params, no output schema), the description covers the essential context: what is duplicated, the inactive state, the required edit access, and the next step via activate_line. It does not cover edge cases like existing newLineKey conflicts or commit modes, but the schema addresses those, so this is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add much parameter-specific information beyond what the schema already provides; it mentions 'build v2 from v1' which nods to newLineKey, but does not elaborate on commitMode or draftRevision. 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 uses the specific verb 'Copy' and clearly identifies the resource ('a line and all its endpoints/targets/rules') and the outcome ('into a new line key — build v2 from v1'). This distinguishes it from sibling tools like create_line by emphasizing duplication of an existing line with full dependencies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context by framing it as 'build v2 from v1' and instructing to 'edit it, then activate_line when ready', which tells the agent the typical workflow. It does not explicitly state when not to use this tool or name alternatives, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_line_draftAInspect
Generate a draft endpoint under a line from a sample inbound request and a description of the target: infers the inbound body schema from the sample, reads the target's method/URL/fields from an OpenAPI document (targetDocument) or a bare sample plus targetUrl, and proposes an outgoingMapping pairing every target field to a same-named inbound field. Nothing is guessed — a target field with no same-named match is reported in the "unmapped" list instead of being mapped, and every field it did map carries "inferred": true in the stored mapping tree. Always writes a draft (never publishes); the draft flows through preview_line_draft, dry_run_endpoint, config_diff and publish_line_draft like any other. Requires edit access.
| Name | Required | Description | Default |
|---|---|---|---|
| sample | Yes | A sample inbound request body, shaped as one a real caller would send — one JSON field per key. | |
| lineKey | Yes | The line key to draft the generated endpoint under. | |
| targetUrl | No | The target URL. Required when targetSample is used; ignored when targetDocument is used (its servers[] entry wins). | |
| deliveryMode | Yes | The caller contract this endpoint offers: async acceptance with later outcomes, one sync reply, or a stream. | |
| targetSample | No | A raw sample of the target's own request body, used instead of targetDocument when there is no spec to read. Requires targetUrl. | |
| draftRevision | Yes | The line's current draft revision (0 for a line with no draft yet) — see get_line_draft. | |
| targetDocument | No | The target's OpenAPI 3.x document (YAML or JSON). Mutually exclusive with targetSample; must describe exactly one operation. | |
| targetFilename | No | Filename hint for targetDocument, to decide YAML vs JSON. Defaults to "target.json". | |
| targetHttpMethod | No | HTTP method for the target when using targetSample. Defaults to POST. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and destructiveHint=false; the description carries substantial behavioral weight beyond that. It discloses the non-guessing policy ('Nothing is guessed'), the unmapped list for unmatched target fields, the 'inferred': true flag on each mapped field in the stored mapping tree, the draft-never-publish guarantee, and the 'Requires edit access' permission. There is no contradiction with the annotations — a draft write is consistent with readOnlyHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core verb and resource are front-loaded in the first sentence, with supporting behavioral detail (non-guessing, unmapped list, draft-not-publish) following. It is a single dense paragraph of roughly 150 words, which is justified given 9 parameters, mutually exclusive modes and nested objects, but it could be tightened or structured slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 — 9 parameters, nested objects (sample, targetSample), mutually exclusive input modes, an enum, and no output schema — the description covers the operational essentials well: both input paths, mapping semantics, the unmapped list, the inferred flag, the draft pipeline, and the access requirement. It does not spell out the exact return shape, but it describes the stored mapping tree and unmapped output, which fills most of what an output schema would convey.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with every parameter described, so the baseline is 3. The description adds workflow-level meaning on top: it consolidates the two mutually exclusive input modes (targetDocument vs targetSample+targetUrl), references the servers[]-wins precedence over targetUrl, and ties targetFilename's YAML/JSON role to targetDocument. This relational gloss exceeds what the individual schema descriptions 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?
States a specific verb+resource ('Generate a draft endpoint under a line') and describes a concrete mechanism: infer the inbound body schema from a sample, read the target's method/URL/fields from an OpenAPI document or bare sample + targetUrl, and propose a same-named outgoingMapping. It explicitly contrasts itself with filtering/publishing siblings by declaring it 'always writes a draft (never publishes)', with downstream flow through preview_line_draft, dry_run_endpoint, config_diff and publish_line_draft, so an agent can separate it from the similar-named draft/publish tool family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context on what inputs drive the tool (targetDocument XOR targetSample+targetUrl, deliveryMode, draftRevision) and states the exclusion 'never publishes', which routes agents to publish_line_draft for the publish step. It names the downstream pipeline tools. It does not explicitly spell out when this should be used instead of create_endpoint, but the draft-vs-live distinction is strongly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_billingARead-onlyInspect
Get the project's credit balances (paid + testing) and which ledger it settles on. billingModel is prepaid (metered against the credit balance) or invoiceable (an Enterprise account, settled on the contract — its credit fields read empty/zero by design, not because it is out of credits). A zero balance is not on its own a reason to stop: live traffic is never refused for an empty balance, and a free-tier project is exempt from live credit billing entirely. Only the testing pool refuses when exhausted (402 testing_credits_exhausted). Read this before concluding from any other field that a project cannot send. On a Pro or Scale plan billed for overage, overage reports the billing cycle running now: usedCredits, overageCredits (beyond the allowance and prepaid credits), amount so far in minor units of currency (null when it cannot be worked out), windowEndsAt, throttled (true while this cycle's request limit is halved because spend passed five times the plan's credits) and throttledUntil (when the halved limit ends, or null); it is absent otherwise. On Pro or Scale, overageBilling is the account's own overage setting, changed with set_overage_billing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description goes far beyond that by disclosing subtle behaviors: zero balance does not block live traffic, free-tier projects are exempt, only the testing pool refuses with a specific 402 error, and overage fields appear only on Pro/Scale plans. It also clarifies that invoiceable accounts show empty credits by design. This is exemplary transparency for a read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but every sentence adds value: it covers the core function, billing model semantics, edge cases, overage fields, and throttling. It is front-loaded with the main purpose and then logically expands into details. The structure is organized by concepts (billing model, zero balance, overage) rather than rambling. Given the complexity of the returned data, this level of detail is justified and concise in its own right.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description is the only source of return semantics. It thoroughly documents the fields (billingModel, credit balances, overage object with usedCredits, overageCredits, amount, currency, windowEndsAt, throttled, throttledUntil) and their conditional presence. It also explains interpretation pitfalls (invoiceable empty credits, zero balance not blocking). An agent can fully understand the response without further documentation. This is complete for a 0-parameter, no-output-schema tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so schema description coverage is trivially 100%. Per the rubric, a 0-parameter tool gets a baseline of 4. The description appropriately does not discuss parameters since there are none, and it focuses on the output instead. No additional parameter semantics are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource: 'Get the project's credit balances (paid + testing) and which ledger it settles on.' It clearly distinguishes this tool from siblings like get_receipts or get_subscription by focusing on credit balance and billing model. The detailed explanation of billingModel further sharpens the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit guidance on when to consult this tool ('Read this before concluding from any other field that a project cannot send'), which is a strong usage directive. It also contrasts with the sibling set_overage_billing for modifying overage settings, and explains edge cases (free-tier exemption, invoiceable accounts) that inform correct usage. This is more than most tools offer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_configARead-onlyInspect
Get the project's published relay configuration — the exact JSON the EchoRelay Framework consumes. Includes pendingPublish with its frozen, redacted config when one is scheduled.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/destructiveHint annotations, the description adds that the result includes 'pendingPublish with its frozen, redacted config when one is scheduled,' which is a behavioral nuance about coverage and redaction. It also clarifies the config is 'published,' indicating it is the live runtime config.
Agents need to know what a tool does to the 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, no filler. The first sentence states the core purpose, the second adds important inclusion detail. Well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description conveys the return value's nature (exact JSON, includes pendingPublish when scheduled) and safety profile via annotations. It lacks explicit mention of behavior when no configuration exists or when pendingPublish is not scheduled, but for a parameterless getter this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the description has nothing to add; the baseline of 4 applies. The description does not mention parameters, which is consistent.
Input schemas describe structure but not intent. Descriptions should explain 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' with a specific resource 'the project's published relay configuration' and adds distinguishing detail: 'the exact JSON the EchoRelay Framework consumes' and 'Includes pendingPublish...' which differentiates it from sibling config tools like config_diff and list_config_revisions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage via 'exact JSON consumed' but does not explicitly state when to use this instead of config_diff or list_config_revisions. No explicit when/when-not guidance is given, leaving the agent to infer from the specific wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dlq_entryARead-onlyInspect
Get DLQ entries by entry id ({ms}-{seq}, as returned by list_dlq's id) or by requestId. requestId is the durable handle — stable across a retry, unlike id, which changes every time an entry is replayed and later dead-letters again — and returns every fanned-out target's entry for that inbound request (one request can fan out to N targets, and several may dead-letter); id returns at most one. Each entry includes configVersion (the published config that authorised the delivery; 0 means unstamped). Errors if nothing matches this project — purged, retried, or discarded entries age out the same as any other.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Dead-letter entry id, e.g. "1717930000000-0" (as returned by list_dlq). Changes on every retry — prefer requestId to track an entry across replays. | |
| requestId | No | The UUID the relay returned in its 202, or from list_requests / list_dlq rows. Stable across retries. Returns every fanned-out target's DLQ entry for this request. Provide exactly one of id / requestId. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The text adds meaningful behavioral nuance beyond the provided readOnlyHint: id is ephemeral, requestId is durable across retries, fan-out may produce multiple entries, and each entry includes configVersion with 0 meaning unstamped. It also discloses error and aging semantics. Some gaps remain on authentication or explicit response shape, but the annotations already cover the read-only safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized: it leads with the action, then explained an important ambiguity (id vs requestId), and ends with error semantics. There is no filler; every clause earns its place, though a minor simplification could improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does what is needed: it introduces the return entry contents (configVersion), clarifies fan-cut multiplicity, and states not-found behavior. It does not enumerate all entry fields, but for a read-one tool with rich annotations and schema coverage, the provided context is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, already explaining id and requestId formats, mutuality, retry stability, and fan-out behavior. The description adds value via the `{ms}-{seq}` pattern and the configVersion mention, but it mostly restates what the schema and oneOf constraint already clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens by clearly defining a specific action ('Get DLQ entries') and names its two distinct access modes (entry id or requestId). It grounds id in list_dlq's output, which distinguishes this tool from the list and other DLQ siblings 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?
The description gives explicit, actionable guidance: use requestId for stable tracking across replays, and use id when you have the exact entry id from list_dlq. It notes that id changes on every replay and that requestId captures every fanned-out target, which directly informs tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_endpointARead-onlyInspect
Get one endpoint's full document by lineKey and endpointId: id, lineKey, name, url, httpMethod, strict, rateLimit, allowedIPs, idempotencyEnabled, mock, mockResponse, attributes, targets (auth redacted), and transformers. Target secrets come back redacted, so a targets array sent back through update_endpoint must carry each target's secret again. Errors when either argument is missing or when the line or endpoint doesn't exist in this project.
| Name | Required | Description | Default |
|---|---|---|---|
| lineKey | Yes | The line key, e.g. "v1". | |
| endpointId | Yes | The endpoint UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses critical behavior: target secrets are redacted, and a targets array sent back through update_endpoint must carry each target's secret again. It also states error conditions for missing arguments or nonexistent lines/endpoints. This is valuable, non-obvious context that annotations alone would not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is focused and front-loaded: core purpose in the first sentence, a crucial redaction warning in the second, and error behavior in the third. The field list is long but necessary since there is no output schema; no words are 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?
Because there is no output schema, the description compensates by naming the returned fields and explicitly noting redaction behavior. It also covers error cases. It does not describe the full JSON nesting or provide examples, but for a simple getter with two well-documented parameters, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with descriptions for lineKey and endpointId, including an example and type. The description repeats the parameter names but adds no new parameter-level semantics beyond the overall document scope; 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 begins with a specific verb and resource: 'Get one endpoint's full document by `lineKey` and `endpointId`.' It clearly distinguishes this from sibling list tools by emphasizing a single endpoint, and it enumerates the exact returned fields, leaving no ambiguity 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?
The description implies usage through required arguments and singular scope: use this when you need one endpoint's full document. It also mentions the round-trip caveat with update_endpointunci. However, it does not explicitly state when to prefer this over list_endpoints or other sibling tools, nor does it give explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_key_policyARead-onlyInspect
Return the project's key policy: defaultKeyTtlDays (what create_api_key uses when ttlDays is omitted), plus maxKeyTtlDays and editorsMayCreateNonExpiringKeys, the limits create_api_key enforces when minting a key. Read-only; use set_key_policy to change these values.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile needs no repetition. The description adds genuine context beyond that: the meaning of each returned field and how create_api_key enforces them when minting a key (default when ttlDays is omitted, enforced limits). This tells the agent what the values signify and how they behave downstream. It omits error behavior, but the read-only, zero-param nature makes that a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler. The primary purpose is front-loaded ('Return the project's key policy'), followed by precise field semantics and a routing note. Each clause earns its place — the create_api_key references explain why the returned fields matter without bloating the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only tool with no output schema, the description is complete: it enumerates the return fields, explains their semantics, and names the mutation sibling. The annotations carry the safety profile, so nothing an agent needs to invoke this tool 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?
The tool has zero parameters and the schema confirms this with an empty properties object, so there is nothing to document. The description correctly focuses on the return values instead, which is the relevant semantic content. Per the baseline for zero-param tools, a 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource pair — 'Return the project's key policy' — then enumerates the exact fields returned (defaultKeyTtlDays, maxKeyTtlDays, editorsMayCreateNonExpiringKeys). It differentiates from its sibling set_key_policy by framing get as the read counterpart and clarifying that these values are what create_api_key consumes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes the agent: 'use set_key_policy to change these values' names the alternative tool and the condition that selects it (mutation vs. read). It also clarifies the relationship to create_api_key, telling the agent that this policy governs key minting defaults and limits, which helps decide when fetching it is relevant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_line_draftARead-onlyInspect
Read one line draft, its optimistic revision, preview, and schedule.
| Name | Required | Description | Default |
|---|---|---|---|
| lineKey | Yes | The line key, e.g. "v1". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds the specific scope of what is read (optimistic revision, preview, schedule) which is useful, but it does not disclose response format or any additional behavioral traits like auth requirements or potential errors. Given annotations handle the risk profile, this is adequate but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loaded with the action 'Read' and resource, with no wasted words. It efficiently conveys the tool's purpose and scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with one parameter and annotations providing safety info, the description is fairly complete. It names the key data returned (draft, revision, preview, schedule) even without an output schema. However, it does not explain what 'optimistic revision' or 'preview' entail, leaving minor ambiguity for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the only parameter 'lineKey' is already described with an example ('v1'). The description adds no additional parameter semantics, so it meets the baseline for schema-covered parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Read' followed by the resource 'one line draft' and its components, distinguishing it from creation, deletion, and publishing tools. It clearly identifies the tool's scope as read-only retrieval of draft data, making it unambiguous among siblings like preview_line_draft and publish_line_draft.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when needing to inspect a line draft and related revision/preview/schedule data, but it does not explicitly state when to use this tool versus alternatives, nor does it list exclusions. There is no mention of alternatives, but the read-only framing gives some context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_metricsARead-onlyInspect
Aggregate request metrics for this project over a time window — volume, error rate and p50/p95/p99 latency, bucketed for charting. By default the series cover inbound requests; pass targetId to slice over one outbound target's per-attempt rows instead (answers "which target is degraded?"); pass endpointId to slice over inbound rows for a single endpoint (answers "is this endpoint receiving traffic / erroring?"). Pass at most one of targetId / endpointId. Free plans see "hour" and "day"; "week" and "month" require an active paid subscription on the project owner and are silently downgraded to "day" otherwise (the response includes planGated: true when that happens). Returns {window, requestedWindow, planGated, scope, targetId?, endpointId?, bucketSeconds, buckets[], volume[], errors[], totalVolume, totalErrors, errorRate} plus latency series whose keys depend on scope: an inbound read (project-wide, or endpointId) carries relayP50[]/relayP95[]/relayP99[] for our own time and targetP50[]/targetP95[]/targetP99[] for the destination's, never blended; a targetId read carries p50[]/p95[]/p99[] for that target's attempts — series arrays are dense (one point per bucket, zero-filled when no traffic).
| Name | Required | Description | Default |
|---|---|---|---|
| window | No | Time horizon. Defaults to "day". "week"/"month" require a paid plan; otherwise the server returns "day" with planGated=true. | |
| targetId | No | Optional outbound target UUID (from get_endpoint targets). When set, the series aggregate the per-attempt rows for that target instead of the project-wide inbound rows. | |
| endpointId | No | Optional endpoint UUID (from list_endpoints / get_endpoint). When set, the series aggregate inbound request rows for that endpoint only. Mutually exclusive with targetId. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, but the description adds substantial behavioral context: silent downgrade of week/month to day on free plans with planGated=true, dense zero-filled buckets, and scope-dependent latency series keys (relayP50 vs targetP50 vs p50) without blending. This goes well beyond the safety hints and fully discloses edge-case 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?
Though lengthy, the description is front-loaded with the core purpose and each subsequent sentence earns its place: scoping rules, plan restrictions, response shape, and dense-series detail are all meaningful. The structure uses semicolons and clear delimiter ('By default...', 'pass...', 'Returns...') to keep it organized without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes full responsibility for explaining return values and does so thoroughly: lists the response keys, explains latency series variants by scope, notes planGated semantics, and clarifies that arrays are dense. Combined with the parameter and safety details, the description is complete for a 3-parameter, no-output-schema tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description enriches this by clarifying the mutual exclusivity of targetId/endpointId, default scope, and the plan-gating behavior of window. It also ties each parameter to a diagnostic question ('which target is degraded?'), adding practical semantics beyond the schema's field-level explanations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Aggregate request metrics for this project over a time window' and lists the exact metrics (volume, error rate, p50/p95/p99 latency) and purpose (bucketed for charting). It clearly distinguishes itself from sibling tools like list_requests by focusing on aggregation and time-window bucketing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use each parameter: default behavior covers inbound requests, targetId slices outbound target degradation, endpointId slices inbound endpoint health, and 'Pass at most one of targetId / endpointId' is an explicit constraint. However, it does not name alternative tools for comparison (e.g., when to use list_requests instead), so it falls short of the explicit when-not/alternatives bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectARead-onlyInspect
Get the EchoRelay project this token is scoped to: id, slug, name, caller-facing API base URL, whether the token has edit access, and the request-log hot-tier retention window.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds value by specifying the response fields (id, slug, name, API base URL, edit access, retention window), which provides useful context about what the tool exposes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the purpose ('Get the EchoRelay project this token is scoped to') and then enumerates the key fields. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only, zero-parameter tool with no output schema, the description fully specifies what the tool returns. It is complete and leaves no ambiguity about the tool's behavior or output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the schema imposes no burden. The description confirms no inputs are required and instead lists outputs, which is appropriate for a zero-input tool. Baseline 4 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?
The description clearly states the verb 'Get' and the resource 'EchoRelay project' with a specific scope ('this token is scoped to'). It also lists the exact fields returned, distinguishing it from sibling get_* tools like get_endpoint or get_billing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 context is clear: use this tool when you need the project associated with the current token. It does not explicitly mention alternatives or exclusions, but the unique token-scoping phrase makes the intended usage unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_receiptsARead-onlyInspect
Get every target this request fanned out to, each with its delivery receipt or the reason it has none. A still-moving delivery (queued/retrying) answers from the live tracking copy, a terminal one (delivered/failed) from durable storage — the response shape is identical either way, so poll this on an interval with the same requestId a 202 response returned and watch status move to a terminal value. Each entry has targetId, targetURL, available, and when available: status (queued/retrying/delivered/failed), attempt, enqueuedAt/updatedAt/completedAt (unix ms), terminalError, callbackState (none/pending/delivered/failed — whether the target's completion-callback URL, if any, has been notified). When available is false, reason is "sync_or_stream_delivery" (the target answers inside the original HTTP response and is never tracked here — see the response body from that call instead) or "not_found" (no record for this target, e.g. aged past the retention window).
| Name | Required | Description | Default |
|---|---|---|---|
| requestId | Yes | UUID returned by the relay in 202 responses or visible in list_requests rows. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description explains nuanced internal behavior: queued/retrying deliveries read from a live copy while terminal ones read from durable storage, yet response shape remains identical. It also details what each field means (status, attempt, timestamps, terminalError, callbackState) and the meaning of unavailable reasons, giving agents deep insight into what to expect when invoking the 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 front-loaded with the main purpose in the first sentence, then expands into behavioral detail. It is dense but each clause adds meaningful information about response fields, statuses, or alternatives. A slightly more structured format (e.g., bullets for field lists) could enhance skimmability, but the prose is efficient and well-ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 there is no output schema, the description carries the full burden of explaining return values, and it does so exhaustively: it covers both terminal and non-terminal delivery states, the exact field names and their types, the conditions for unavailable reasons, and even mentions the callbackState field. This is complete enough for an agent to correctly parse and act on the response without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes requestId with source (202 responses, list_requests rows) and required status. The description's reference to 'the same requestId a 202 response returned' adds no new parameter-level semantics beyond reinforcing the polling pattern. Schema coverage is 100%, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific verb+resource statement: 'Get every target this request fanned out to, each with its delivery receipt or the reason it has none.' This distinguishes it from siblings like get_request and list_requests, clarifying its unique scope as a receipt/log inspection tool rather than a general request fetcher.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'poll this on an interval with the same requestId a 202 response returned,' providing concrete guidance on when to use it (polling after a 202). It also names an alternative for sync_or_stream_delivery targets: 'see the response body from that call instead.' This gives both when and when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_requestARead-onlyInspect
Get one inbound request envelope + every per-target delivery attempt made on the way out (success / permanent_failure / retry_scheduled / dlq). The request and each attempt carry configVersion, the published config that authorised them; 0 means unstamped. Scoped to this project; returns null once the request has aged out of the project's log-retention window (requestLogRetentionDays — see get_project).
| Name | Required | Description | Default |
|---|---|---|---|
| requestId | Yes | UUID returned by the relay in 202 responses or visible in list_requests rows. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds meaningful behavioral context: the return of null after log retention, the meaning of configVersion (0 = unstamped), and the inclusion of per-target attempts with specific statuses. This enriches the agent's understanding beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero redundant text. The core function (getting the envelope and attempts) is front-loaded, and the edge case about retention is placed second. Every sentence adds 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?
Given a single parameter and no output schema, the description covers the return payload structure (envelope + attempts with statuses), the configVersion semantics, project scoping, and the aging-out null case. It also points to get_project for the retention setting, making it complete for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes the sole parameter (requestId) with its source and format at 100% coverage. The description adds no additional parameter-specific meaning, but it does not need to because the schema is already complete. 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') and resource ('one inbound request envelope + every per-target delivery attempt'), and lists the four statuses covered (success / permanent_failure / retry_scheduled / dlq). It clearly differentiates from list_requests (which lists rows) by focusing on a single request with full delivery attempt detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 context of returning null after the retention window and being scoped to the project provides clear usage context, and it references get_project for retention config. However, it does not explicitly name alternative tools or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscriptionARead-onlyInspect
Get the project owner's current subscription: plan, active flag, period start/end, cancel-at-period-end flag, external Paddle subscription id, and whether a payment method is on file at the provider. Owner-only; requires a token minted with the billing scope.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description adds meaningful context: it enumerates the returned fields, specifies the ownership restriction, and notes the required billing scope. This gives the agent a richer operational picture than the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact two-sentence structure with no unnecessary words. It front-loads the core purpose and then adds essential access constraints, making it highly efficient and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 has no parameters, no output schema, and minimal annotations, the description fully covers the agent's needs: exactly what data is returned and the prerequisites for invocation. There is no ambiguity about the action or its outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema provides no parameter semantics. Per the baseline rule for zero-parameter tools, the description need not add parameter details. The description appropriately explains the fixed output, so a baseline of 4 is fitting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the operation ('Get the project owner's current subscription') and lists the exact data returned (plan, active flag, period start/end, cancel-at-period flag, Paddle subscription ID, payment method status). This distinguishes it from sibling tools like get_billing by focusing specifically on subscription 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?
The description provides clear access constraints: 'Owner-only' and 'requires a token minted with the billing scope.' This tells the agent who can use it and what credentials are needed. However, it does not explicitly name alternatives or provide when-not-to-use guidance beyond the ownership restriction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
invite_memberAInspect
Invite a person by email to collaborate on this project. Returns the new invitation record; the invitee receives an email with an accept link. Enforces the seat cap for the plan tier. Owner only.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | Role to assign on acceptance. | |
| Yes | Email address to invite. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate non-read-only and non-destructive. The description adds meaningful behavior: the returned invitation record, the email with accept link, seat cap enforcement, and owner-only restriction. This is substantial context beyond the annotations, though it doesn't cover error cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: first states purpose, second describes return and side effect, third lists constraints. Every sentence adds value with no repetition or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly explains the return value ('Returns the new invitation record') and covers side effects and constraints. It could mention duplicate emails or seat cap errors, but these are not critical for a typical use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both role and email. The description does not add any extra meaning to the parameters beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Invite a person by email'), the resource ('this project'), and the outcome ('collaborate'). This distinguishes it from sibling tools like remove_member, resend_invite, and set_member_role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides key context by noting 'Owner only' and 'Enforces the seat cap', which implies when it should or shouldn't be used. However, it doesn't explicitly name alternative tools for related actions (e.g., resend_invite), so it's not a perfect 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_active_addonsARead-onlyInspect
List the project owners currently-active add-ons. Returns [{addonKey, project, monthlyEurCents, activatedAt, nextRenewalAt, consecutiveFailures}, ...]. RPM upgrades are per-project; project` is the slug they apply to (null for account-wide add-ons). Owner-only; requires a token minted with the billing scope.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses the exact return format, explains that 'project' is null for account-wide add-ons, and notes the permission requirement (billing scope). This provides substantial behavioral context not available from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, front-loads the core purpose, and includes minimal yet essential details about the return structure and constraints. Every phrase contributes value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description fully covers the return values, project semantics, and authentication requirements. It is complete for the tool's simplicity and leaves no obvious gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the rubric sets a baseline of 4. Since no parameters exist, the description does not need to add parameter-level meaning; it appropriately focuses on output and usage details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly says 'List the project owner`s currently-active add-ons', giving a specific verb and resource. It also clarifies the 'project' field meaning, distinguishing it from list_addons by focusing on active add-ons and ownership scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when the tool is usable: 'Owner-only' and 'requires a token minted with the billing scope'. However, it does not explicitly mention alternatives (e.g., list_addons) or when not to use it, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_addonsARead-onlyInspect
List the optional add-on subscriptions (RPM upgrades, extra team seats, extended log retention, extra file-delivery storage in +5 GB blocks, …). Each entry is monthly, renews every 30 days until cancelled, and carries scope (per_account or per_project). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable context: each entry is monthly, renews every 30 days until cancelled, and carries a scope field (per_account or per_project). It also explicitly says 'Read-only,' consistent with the annotations. This goes beyond the basic safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences. The first sentence front-loads the purpose with a clear verb ('List') and resource ('optional add-on subscriptions') plus illustrative examples. The second sentence adds billing and scope details. No filler or unnecessary repetition; even 'Read-only' serves as a quick safety cue that mirrors annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with no output schema, the description covers the key aspects: what is listed, examples, billing cycle, renewal, and scope. However, it does not clarify the difference from the sibling 'list_active_addons' (e.g., whether inactive or cancelled add-ons are included), which is a minor gap in contextual completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so schema coverage is effectively 100%. With zero parameters, the description has no parameter details to provide, and the baseline of 4 applies. The description does not need to compensate for missing parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists optional add-on subscriptions, with concrete examples (RPM upgrades, extra team seats, extended log retention, extra file-delivery storage), and specifies the billing model (monthly, 30-day renewal). This distinguishes it from sibling tools like list_subscription_plans or list_active_addons by focusing on 'add-on subscriptions' and their recurring nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for viewing add-on subscriptions and provides context about their monthly renewal and scope field, but it does not mention alternatives or explicitly state when to use this tool versus list_active_addons or other add-on/subscription tools. No exclusionary guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_api_keysARead-onlyInspect
List the project's inbound API keys as metadata only — the secret plaintext is never returned, only id, name, mode, prefix, createdAt, createdBy, lastUsedAt, expiresAt, revokedAt, successorId, predecessorId, and successorRevealedAt. Returns {keys: []} with no paging — every key on the project comes back in one call.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral detail beyond the readOnlyHint annotation: the secret plaintext is never returned, only a specific set of metadata fields is included, and the response shape is `{keys: []}` with no paging. This gives the agent a clear picture of what will happen and what to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences are used efficiently: the first states the operation and the key non-behavior (no secret plaintext), and the second gives the response shape and paging behavior. The field enumeration is necessary because no output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter read-only list tool, the description fully covers the operation, the response format, and the lack of paging. An agent can invoke it without further clarification, and annotations already confirm it is non-destructive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and the schema coverage is 100%, so there is no parameter gap to compensate for. The description adds value by enumerating the exact response fields, which is more than the empty schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('List the project's inbound API keys') and immediately clarifies it returns metadata only, never the plaintext secret. This clearly distinguishes it from siblings like create_api_key, revoke_api_key, and rotate_api_key.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to retrieve all API key metadata in one call, and explicitly notes there is no paging. However, it gives no explicit when-not-to-use guidance or mention of alternatives such as create_api_key for obtaining plaintext secret values.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_audit_eventsARead-onlyInspect
List project audit-log entries, newest first. Captures who changed what — lines, endpoints, targets, API keys. Outbound-target auth.token / auth.password are redacted in the diff per the same policy used for endpoint reads. Retention is the auditRetentionDays advertised on get_project (default 365 days); rows older than that are purged by the cleanup job. Returns {total, limit, offset, retentionDays, rows[]} where each row has id, createdAt, actor (email or null), action, entityType, entityId, entityLabel, diff.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. Default 50. | |
| since | No | Lower bound on createdAt (unix ms). Inclusive. | |
| until | No | Upper bound on createdAt (unix ms). Inclusive. | |
| action | No | Exact action match, e.g. "endpoint.updated", "target.created", "key.revoked". | |
| offset | No | Page offset. Default 0. | |
| entityId | No | Exact entity id (UUID or stream id depending on entityType). | |
| entityType | No | Exact entity type, e.g. "endpoint", "target", "line", "key". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses key behaviors: newest-first ordering, redaction of outbound-target auth fields, retention policy (auditRetentionDays from get_project, default 365 days, purged by cleanup), and the exact return shape. This is substantial behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: four sentences each add distinct information (purpose, scope, redaction, retention, response shape). It's front-loaded with the primary action and contains no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully describes the return object ({total, limit, offset, retentionDays, rows[]}) and row fields. It also covers ordering, redaction, and retention, making it complete for a read-only list tool with 7 optional 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?
All 7 parameters have descriptions in the input schema (100% coverage). The tool description adds minimal additional parameter meaning—it echoes limit/offset in the return shape but doesn't explain parameter syntax or format 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 clearly states the tool's function: 'List project audit-log entries, newest first.' It names a specific resource (audit-log entries) and provides scope ('Captures who changed what — lines, endpoints, targets, API keys'), distinguishing it from sibling list tools like list_api_keys or list_endpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool's use case (inspecting project audit history) and gives context about ordering and content. It doesn't explicitly exclude alternatives or mention when not to use, but no sibling tool covers audit logs, so the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_config_revisionsARead-onlyInspect
List every retained revision of one line, newest first, so a target revision can be picked for rollback_config. Returns {revisions: []} with no paging; each entry has revision, publishedAt, current, and active. Errors when lineKey is missing or doesn't match a line in the project.
| Name | Required | Description | Default |
|---|---|---|---|
| lineKey | Yes | The line key, e.g. "v1". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description rightly focuses on adding context beyond them: returns `{revisions: []}` with no paging, the four fields per entry, and error conditions for missing or unmatched lineKey. This meaningfully enriches the contract without repeating annotation data. It doesn't contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero filler: purpose with ordering, return shape with fields and paging behavior, and error conditions. The most decision-relevant fact (what it lists and why) is front-loaded, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with no output schema, the description covers everything needed to call it correctly: purpose, ordering, return shape, fields, paging, and error conditions. The description compensates fully for the missing output schema, and nothing an agent needs is left ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single required lineKey parameter, so the baseline of 3 applies. The description adds marginal value by explaining in the error clause that lineKey must match a line in the project, reinforcing validity semantics, but it doesn't add syntax or format details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('List every retained revision of one line') with ordering ('newest first') and ties the purpose to a concrete downstream action ('so a target revision can be picked for rollback_config'). This clearly distinguishes it from siblings like get_config, config_diff, and rollback_config without needing to open schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context by positioning the tool as the precursor to rollback_config, telling an agent when this tool is the right call. It stops short of a 5 because it does not explicitly name alternatives or state when NOT to use it (e.g., get_config for the current config), but the implied workflow is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_credentialsARead-onlyInspect
List the project's saved credentials — reusable target-auth secrets that can be referenced from any number of targets instead of entering auth inline per target. auth is redacted (secret fields never returned, even encrypted — see create_credential for why).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that 'auth is redacted (secret fields never returned, even encrypted)' and points to create_credential for the rationale. This is a valuable behavioral detail about output and security that annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with the main action front-loaded. The first sentence names the operation and adds context about what credentials are; the second discloses the redaction behavior. Every sentence serves a purpose, and the structure is easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no parameters and no output schema, the description is complete: it states what is listed (saved credentials), explains their purpose in the broader system, and warns about redacted fields. It also references create_credential for deeper context, which is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing for the description to explain about parameter semantics. Per the baseline for zero-parameter tools, a score of 4 is appropriate; the description adds value by explaining the concept of credentials rather than parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'List the project's saved credentials', a specific verb+resource that clearly states the tool's function. It distinguishes from siblings like create_credential, update_credential, and delete_credential by framing credentials as reusable target-auth secrets, and even differentiates from inline auth usage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for viewing saved credentials that can be reused across targets, contrasting with inline auth per target. It does not explicitly say 'use this when you need to list credentials' or name alternatives, but the context is clear enough for an agent to infer the appropriate use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_credit_packsARead-onlyInspect
List the prepaid credit packs available to purchase, returned as a bare array of {credits, eurCents, usdCents, plnGrosze, welcomeEligible} objects — not wrapped in an envelope, and not paginated (the whole catalog every time). Read-only; identify a pack to start_topup by its eurCents.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description adds valuable behavioral detail: the response is a bare array, not paginated, returns the entire catalog every time, and is not wrapped in an envelope. This is exactly the kind of non-obvious behavior an agent needs to know before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core purpose, then efficiently packs the essential behavioral caveats (bare array, no pagination, whole catalog, read-only) and a routing hint to start_topup. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only listing tool with no output schema, the description covers everything needed: what it returns, the exact item shape, the non-envelope/non-pagination behavior, and how to use the result with a sibling tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, and the schema is fully covered with no properties. The description still adds meaning by documenting the exact object fields returned, which is helpful since there is no output schema. Baseline 4 for a parameterless tool is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List the prepaid credit packs available to purchase.' It also distinguishes the tool's scope by describing the exact return shape and referencing start_topup as the follow-up action, making its purpose unambiguous among many sibling list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: this is a read-only catalog listing used to identify a pack before calling start_topup. It names the relevant sibling action but does not explicitly enumerate when not to use this tool or compare it to other list alternatives, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dlqARead-onlyInspect
List entries currently in this project's dead-letter queue, newest first. One inbound request fans out per-target, so a single request may produce several DLQ entries, one per target that didn't accept it (different targetIds). Returns {total, limit, offset, rows[], evictedCount} where each row has id (the dead-letter entry id, {ms}-{seq}), requestId, targetId, configVersion (the published config that authorised the delivery; 0 means unstamped), failureReason, failureCode (stable machine-readable cause; unclassified for entries written before codes existed), failedAttempts, failedAt, payload (the JSON of the queued delivery as it was attempted); evictedCount is the lifetime count of entries the queue's capacity cap discarded before they could be triaged. DLQ entries — including the original request body and headers — are kept for up to 30 days from the failure time or until cleared, then purged automatically (or discarded early past capacity — see evictedCount); they are never written to a database. get_request still answers what happened to a purged/evicted/discarded entry's inbound request for the project's requestLogRetentionDays window, independent of whether the DLQ row itself still exists. requestId is the durable handle across a retry: an entry's own id changes every time it is replayed and later dead-letters again, so get_dlq_entry accepts a requestId lookup as well as id.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size. Default 50. | |
| offset | No | Page offset. Default 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true and destructiveHint=false, but the description goes far beyond this by explaining fan-out per-target, 30-day retention, automatic purging, capacity-cap eviction, non-persistence to a database, and the id-versus-requestId semantics on replay. This is rich behavioral disclosure that annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then provides dense, non-redundant detail about return fields, retention, eviction, and id behavior. It is a long single paragraph rather than a structured layout, but every sentence earns its place given there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with no output schema, the description is remarkably complete: it specifies the response shape, field-by-field semantics, retention and eviction behavior, and how this tool relates to get_request and get_dlq_entry. An agent has enough to call it correctly and 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?
Both parameters, limit and offset, are fully documented in the input schema with ranges and defaults (100% schema coverage). The description adds no additional parameter-specific meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List entries currently in this project's dead-letter queue, newest first.' It clearly distinguishes this listing operation from related siblings like get_dlq_entry, discard_dlq_entry, and retry_dlq_entry, so an agent can tell what it is for 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?
The description gives contextual pointers, such as get_request still answering for purged/evicted entries and get_dlq_entry accepting requestId as well as id, which implies when a more targeted lookup is useful. However, it never explicitly states when to use list_dlq versus get_dlq_entry, nor does it give exclusions or alternative-selection rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_endpointsARead-onlyInspect
List the endpoints under one line, identified by lineKey; returns {lineKey, endpoints: []} with no paging. Each entry reports id, name, path, httpMethod, strict, mock, and targetCount — not the endpoint's full body, which get_endpoint returns. Errors when lineKey is missing or doesn't match a line in the project.
| Name | Required | Description | Default |
|---|---|---|---|
| lineKey | Yes | The line key, e.g. "v1". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark this as read-only and non-destructive, and the description goes well beyond them by disclosing the exact return shape, the absence of paging, the specific fields returned, and the error cases. This provides rich behavioral context without repeating the annotation data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler: purpose and return shape in the first sentence, field detail and the get_endpoint contrast in the second, and error conditions in the third. Every sentence earns its place and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the responsibility for explaining the result. It fully covers the return envelope, the endpoint entry fields, the lack of pagination, and error behavior, which is sufficient for an agent to call and interpret 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 input schema already fully describes lineKey with type and example, so the baseline is 3. The description adds value by clarifying that lineKey identifies the line and by specifying error behavior for missing or unmatched lineKey values, going beyond just the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List the endpoints under one line, identified by `lineKey`.' It also distinguishes itself from the sibling get_endpoint by stating that it returns summary fields, not the full endpoint body, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names get_endpoint as the alternative for full endpoint bodies, telling the agent when not to use this tool. It also provides concrete failure conditions ('Errors when lineKey is missing or doesn't match a line'), which gives practical guidance on prerequisites and expected usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_linesARead-onlyInspect
List every line in the project: returns {lines: []} in one call, with no paging. Each entry reports lineKey, name, active, docsShared, publishedAt, endpointCount, and its draft state (draftRevision, hasDraft, scheduledPublish). A project with no lines yet returns an empty lines array rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses useful behavior: it returns a `{lines: []}` envelope in one call, includes specific fields per entry, and has special handling for empty projects. No contradiction exists, and no destructive or side-effect behavior needs disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the action and scope first, then the return format, then the per-entry fields, and finally the edge case. Every sentence adds useful information and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and no output schema, the description fully covers what an agent needs: the response envelope, the fields included, no-paging behavior, and the empty-array edge case. There are no meaningful gaps 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?
The tool has zero parameters, so the baseline of 4 applies and the description does not need to explain parameter meaning. It appropriately focuses on the output shape and behavior rather than adding unnecessary parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List every line'), specifies the scope ('in the project'), and gives the exact return envelope. This distinguishes it from the many line-related siblings like activate_line, create_line, and delete_line without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly conveys when to use the tool: to retrieve the complete line list in one call with no paging, and it reassures that an empty project returns an empty array rather than an error. It doesn't name an alternative or exclude use cases, but no sibling tool appears to duplicate this exact listing operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_membersARead-onlyInspect
List accepted and pending members of this project, plus the owner (role "owner"), each with id, email, name, role, and whether the invite has been accepted. Returns {members: [], count, seatCap, seatsUsed} with no paging — count is the roster size, seatCap/seatsUsed are the plan's seat limit and how many seats are used. Errors when the caller isn't the project owner or the token lacks the config scope. Owner only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare read-only and non-destructive, and the description adds valuable behavioral details: no paging, exact return fields (members, count, seatCap, seatsUsed), and auth/error conditions. This goes well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, each earning its place: the first defines scope and fields, the second explains return structure and paging, the third covers errors and ownership. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema or parameters, the description fully specifies the return shape, field semantics, paging behavior, and error conditions. An agent has everything needed 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 tool has no parametersage, and schema description coverage is 100%, so there is nothing for the description to add. Baseline 4 is appropriate because parameter semantics are trivially covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as listing project members, including the owner, with specific fields. This distinguishes it from sibling member-related tools like invite_member, remove_member, and set_member_role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states 'Owner only' and specifies error conditions for non-owners or missing config scope, providing clear when-not guidance. It doesn't name an alternative tool, but no sibling provides the same roster-listing functionality.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsARead-onlyInspect
List the projects on your account (archived included), each with id, slug, name, apiBaseUrl and archived, plus accountEmail — the account this token authenticates as. Requires an ACCOUNT-scoped management token (one minted with no project) and the read scope. A PROJECT-scoped management token cannot call this: use it on its own project's tools instead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as read-only and non-destructive, and the description adds meaningful context: the required token scope, the included `accountEmail` detail, and the archived-inclusion behavior. It doesn't discuss pagination or rate limits, but those are minor for a parameterless list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two focused sentences. The first sentence delivers the core purpose and return fields; the second provides authentication requirements and redirects mis-scoped tokens. No filler or redundant restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple parameterless listing tool, the description covers what it returns, what authentication is required, and what cannot be done. Given no output schema exists, the return-field specification is sufficient for an agent to invoke and interpret 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 tool has zero parameters, so the description has no parameter meaning to add. It instead clarifies the return payload fields)Skip the `accountEmail` field, which is useful given the absence of an output schema. This meets the baseline for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('projects on your account'), explicitly notes archived projects are included, and enumerates the exact fields returned. This clearly differentiates it from related tools like get_project or list_project_tokens.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit prerequisites: ACCOUNT-scoped management token with `read` scopemen. It also states a clear exclusion—PROJECT-scoped tokens cannot call this—and directs to use the project's own tools instead. This is precise when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_project_tokensARead-onlyInspect
List the management tokens scoped to a project you own (any holder): id, label, scopes, createdAt, lastUsedAt, expiresAt, revokedAt: never the secret (only its hash is stored). Requires an ACCOUNT-scoped management token and the read scope.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The slug of a project you own. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds important behavioral details: the secret is never returned (only its hash is stored) and the fields that will be present. This is valuable context for an agent deciding whether to call this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the purpose and then adds key details. It is efficient, though slightly dense with the field list and auth requirement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only tool with an output schema absent, the description covers what is returned, what is not returned, and the authentication requirement. Missing pagination/limit info is a minor gap given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes 'slug' as 'The slug of a project you own' with 100% coverage. The description reinforces ownership but does not add new parameter-level semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('management tokens scoped to a project you own'), and enumerates the returned fields. This clearly differentiates from siblings like create_project_token and revoke_project_token, and from list_api_keys.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: the tool is for listing management tokens for a project, and it specifies the required token type and scope. It does not explicitly name alternatives or when not to use it, but the description makes the use case unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_requestsARead-onlyInspect
List inbound API requests the relay has processed for this project, newest first. Hot-tier window is the project's requestLogRetentionDays (see get_project). Optional filters narrow the result. Returns {total, limit, offset, rows[]} where each row has ts (unix ms), requestId, method, path, status, durationMs, targets, creditsDeducted, authType, errorMessage, bytesSent, configVersion (the published config that authorised the request; 0 means unstamped), and closeReason (for a streaming request: complete / abortedOrError / byteCap / noValue; empty for non-stream requests).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Substring of the request path (e.g. "/webhook"). LIKE-matched. | |
| limit | No | Page size. Default 50. | |
| since | No | Lower bound on ts (unix ms). Inclusive. | |
| until | No | Upper bound on ts (unix ms). Inclusive. | |
| method | No | HTTP method (POST, GET, …). Case-insensitive. | |
| offset | No | Page offset. Default 0. | |
| status | No | Exact HTTP status code (e.g. 404). | |
| targetOutcome | No | Narrow to requests that produced at least one per-target attempt with this outcome. Use "dlq" to find requests with at least one target that ended up dead-lettered. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint=true annotation, the description discloses ordering ('newest first'), a retention constraint (hot-tier window), and the full return shape including field-level semantics for configVersion, closeReason, and targets. This is substantial behavioral detail not derivable from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: first sentence states the core action and ordering, then retention, then filters, then the return shape. Every sentence earns its place, and the detailed field list is necessary because there is no output 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 tool has 8 parameters and no output schema, yet the description covers all essential context: what it lists, ordering, retention window, filter behavior, and a complete enumeration of return fields including edge cases like '0 means unstamped' and closeReason values. This is fully adequate for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter already having a description. The description adds only a general statement that filters narrow the result, and ties the hot-tier window to the project setting. It does not add meaningful new parameter semantics beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List inbound API requests the relay has processed for this project'. It also differentiates from siblings by indicating 'newest first' and the plural 'requests', making it clear this is a batch listing tool distinct from get_request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: 'Hot-tier window is the project's requestLogRetentionDays' and 'Optional filters narrow the result', implying when the tool is appropriate. However, it does not explicitly name alternatives or state when not to use it, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_subscription_plansARead-onlyInspect
List the available subscription plans (Free, Pro, Scale) with monthly EUR price, credit allowance, per-project RPM cap, and how many active projects the plan includes. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description repeats 'Read-only' for reinforcement. The description adds details about the returned attributes but does not disclose additional behavioral traits like pagination, ordering, or auth needs. With annotations covering the main safety profile, this is adequate but not exceptional.
Agents need to know what a tool does to the 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 efficiently front-loads the action and lists all relevant details (plan names, price in EUR, credit allowance, RPM cap, active projects) without any redundant or vague wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters and no output schema, the description fully carries the burden of explaining the tool's return content. It enumerates the included fields and plan names, providing sufficient context for an agent to understand what the tool returns and that it is a read-only 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?
The tool has zero parameters, so the input schema is empty. The description appropriately does not attempt to explain parameters, and the baseline for no-parameter tools is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('List') and the resource ('subscription plans'), naming the specific plans (Free, Pro, Scale) and the attributes returned. It is distinct from sibling tools like get_subscription (current plan) and list_addons (add-ons), which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (when you need plan details such as pricing and limits) but does not explicitly mention alternatives or exclusion criteria. For a simple listing tool, this is adequate though not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_line_draftARead-onlyInspect
Preview one line draft without publishing it.
| Name | Required | Description | Default |
|---|---|---|---|
| lineKey | Yes | The line key, e.g. "v1". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds 'without publishing it,' which reinforces non-mutating behavior but adds no further behavioral context such as return format, error handling, or visibility of the preview. It is consistent with annotations, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly worded sentence that front-loads the verb and resource. Every word contributes meaning, with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the tool is simple with one parameter and no output schema, the description does not clarify what a 'preview' returns nor how it differs from get_line_draft. Since there is no output schema to fill this gap, the description carries the burden and falls short of fully contextualizing the 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?
The input schema provides 100% coverage for the single parameter lineKey, including an example ('"v1"'), so the schema already fully documents the meaning. The description adds no extra parameter detail, landing at the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Preview' with the resource 'one line draft' and adds the clarifying phrase 'without publishing it,' which clearly distinguishes this tool from siblings like publish_line_draft. It unambiguously states the action and scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to inspect a draft without publishing, but it does not explicitly state when to use it versus alternative tools like get_line_draft or publish_line_draft. No exclusions or alternative recommendations are provided, leaving the usage context somewhat implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_plan_changeARead-onlyInspect
Preview what would happen if change_plan were called with this plan: the immediate-charge amount (cents), the next-invoice amount, the effective date, and the kind (applied for in-cycle upgrade, scheduled for at-period-end downgrade / cancel). Owner-only; requires a token minted with the billing scope.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | Target plan to preview a switch to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true and destructiveHint=false, so the read-only nature is known. The description adds value by disclosing the exact output fields, the meaning of the 'kind' values (applied vs. scheduled), and the auth/scope requirement. No hidden behaviors are left uncovered.
Agents need to know what a tool does to the 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, densely informative with zero filler. The first sentence front-loads the action and output, the second covers auth. Every clause adds value, and the parentheticals clarify the 'kind' enum without bloating the 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?
Given the simple single-param schema and no output schema, the description fully compensates by listing all return fields and their semantics. It also includes prerequisite auth details, making it complete for an agent to invoke and interpret results 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%: the only parameter 'plan' has an enum and a description ('Target plan to preview a switch to.'). The tool description merely refers to 'this plan' without adding extra format or semantics 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 begins with a specific verb-resource pair ('Preview what would happen if change_plan were called'), clearly distinguishing this from the actual sibling tool change_plan. It also enumerates the exact output fields (immediate-charge amount, next-invoice amount, effective date, kind), fully specifying its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'if change_plan were called' establishes the tool as a preview companion to change_plan, implying usage before making a change. It also states prerequisites (Owner-only, billing scope token). It does not explicitly name alternatives or exclusion cases, but the context and sibling list make the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
protect_projectAInspect
Turn on archive protection for a project you own: archive_project (on every surface: panel, REST, and this tool) then refuses until it is lifted. Idempotent. Permanent from here: there is no tool or API call to turn it back off; only contacting support can. Requires an ACCOUNT-scoped management token and the config scope.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The slug of a project you own. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, destructiveHint=false), the description discloses idempotency, irreversibility (permanent, only support can reverse), and the behavioral side effect on archive_project. It also specifies authentication requirements. This is substantial additional context that helps the agent predict consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each earning its place: purpose and effect, idempotency, permanence, and auth requirements. The core purpose is front-loaded. No filler or redundant explanation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description fully covers what the tool does, its behavioral impact, reversibility, idempotency, and prerequisites. An agent has everything needed to decide whether and how to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and already states 'The slug of a project you own.' The main description repeats the ownership condition but adds no new parameter-level details (format, constraints, or edge cases). 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 action ('Turn on archive protection') on a specific resource ('a project you own') and distinguishes it from related tools by explaining the effect on archive_project. The annotation title reinforces the purpose. It clearly separates this from archival/unarchival actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it is used for projects you own, affects archive_project's behavior, and requires a specific token and scope. It also warns of permanence, which informs the decision to use it. It does not explicitly name alternative tools or state when not to use it, but the conditions are well implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_line_draftADestructiveInspect
Publish one line draft now and clear only its schedule.
| Name | Required | Description | Default |
|---|---|---|---|
| lineKey | Yes | ||
| draftRevision | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the annotations by specifying that only the schedule is cleared, not other settings. This aligns with the destructiveHint annotation and clarifies that the operation does not have broader side effects on the line itself. However, it does not disclose permissions required or the effect on the live line after publishing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the action and object, and it includes a precise qualifier ('clear only its schedule') that adds valuable nuance without unnecessary words. It is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple with two parameters and no output schema, but the description lacks parameter details and does not mention success/failure behavior or the outcome of publishing (e.g., whether the draft becomes live immediately). It provides a good overview but leaves some gaps that could affect correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has two parameters (lineKey and draftRevision) with no descriptions, and the tool description does not mention either parameter. With 0% schema description coverage, the description should compensate by explaining what these parameters represent, but it entirely omits them, leaving their meaning unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Publish'), the target ('line draft'), and the specific scope ('clear only its schedule'). This distinguishes it from related tools like schedule_line_publish and cancel_line_publish, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies an immediate publish action and mentions clearing the schedule, which differentiates it from scheduling tools. However, it does not explicitly state when to use this tool over alternatives like cancel_line_publish, nor does it mention prerequisites or conditions for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_memberADestructiveInspect
Remove a member (accepted or pending) from this project by memberId or email, matching the first record found; returns {message, email}. This deletes the membership record outright with no undo, so getting the person back onto the project takes a fresh invite_member call, not a restore. Errors when neither memberId nor email is given, no member matches, the caller isn't the project owner, or the token lacks the config scope. Owner only.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Email address (alternative to memberId — removes the first matching member). | ||
| memberId | No | Member record UUID (from list_members). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description goes further by specifying the exact nature of destruction: 'deletes the membership record outright with no undo,' and clarifies the matching behavior ('matching the first record found'). It also discloses the return format ({message, email}) and the full set of failure conditions, including permission and scope requirements. This adds substantial context beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences carry a high density of information with no filler. The purpose is front-loaded in the first clause, followed by the destructive nature and return format, then error conditions and owner restriction. Every sentence earns its place, and the structure is logical and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 two parameters, no output schema, and annotations already marking destructiveness, the description covers everything an agent needs: the exact operation, the two accepted identifiers, the matching rule, the return shape, the irreversibility, the error triggers, and the permission requirement. It even provides the recovery path via invite_member. There is no missing information that would impair correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already has a clear description, so the baseline is 3. The description adds value by explicitly stating that the two parameters are alternatives ('by memberId or email') and that the removal targets the first matching record, which clarifies the semantics of both parameters beyond their individual schema entries. This extra nuance justifies a score above 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 ('Remove') and resource ('member') with precise scope ('from this project'), and distinguishes itself from siblings like invite_member and list_members by focusing on removal. It clearly identifies the two alternative identifiers (memberId or email) and notes it matches the first record, so an agent can differentiate it without opening other tool definitions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit error conditions that double as preconditions: it fails if neither identifier is provided, no match, caller isn't owner, or token lacks config scope, and it explicitly states 'Owner only.' It also hints at the alternative by noting that getting the person back requires a fresh invite_member call, which tells the agent when to choose that tool instead. However, it does not explicitly contrast with set_member_role or other membership tools, so it stops short of full when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_projectADestructiveInspect
Rename a project you own (the display name only: the slug, which identifies the project in URLs and API paths, never changes). Requires an ACCOUNT-scoped management token and the config scope. 404-equivalent error when you do not own the slug.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The new display name (1–100 chars). | |
| slug | Yes | The slug of a project you own. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive and not read-only. The description adds valuable context: it clarifies that only the display name is affected, the slug remains unchanged, and an ownership check yields a 404-equivalent error. This adds behavioral nuance beyond the annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three focused sentences, each earning its place: the core action and scope, the auth requirement, and an error condition. No filler or redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema, the description covers all essential aspects: what it does, what doesn't change, required credentials, and an error scenario. Nothing critical is missing for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for both parameters. The description enriches this by explaining that the slug is the identifier that never changes and that the name is the display name, reinforcing the tool's purpose beyond the raw parameter definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb (rename), resource (project), and the precise scope: only the display name changes while the slug stays the same. This distinguishes it from sibling operations like create_project or archive_project without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context on when to use the tool (to change a project's display name) and explicitly states the prerequisites: an ACCOUNT-scoped management token with the config scope. It doesn't explicitly exclude alternative tools, but no sibling performs this exact action, so the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resend_inviteAInspect
Re-send the invitation email for a still-pending invite, by member ID or email (from list_members). The original accept link is reused. Already-accepted members are rejected. Owner only.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Email address (alternative to memberId — targets the first matching pending invite). | ||
| memberId | No | Member record UUID (from list_members). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint false, destructiveHint false), the description discloses important behaviors: the original accept link is reused, already-accepted members are rejected, and only the owner can perform the action. It also implies the side effect of sending an email. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main action, and each clause adds meaningful information without repetition or fluff. It is a model of concise yet complete writing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 tool with two optional parameters and no output schema, the description covers the purpose, constraints, side effects, error condition, and permission. It does not specify the response format, but given the absence of an output schema, this is not a critical gap. Overall, it is sufficiently complete for an agent to use 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?
The input schema already provides detailed descriptions for both parameters (email as alternative to memberId, targeting first matching pending invite; memberId as UUID from list_members). The tool description adds little beyond what the schema states, so with 100% coverage the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Re-send the invitation email'), the target ('still-pending invite'), and the means ('by member ID or email (from list_members)'). It also adds distinctive details like reusing the original accept link and rejecting already-accepted members, which differentiates it from sibling tools like invite_member.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use: 'for a still-pending invite' and specifies the exclusion 'Already-accepted members are rejected'. It also notes the permission requirement 'Owner only'. However, it does not explicitly name alternative tools for different scenarios, so it stops short of full comparative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_addonAInspect
Resume (un-cancel) a pending-cancel add-on whose paid-through cycle has not yet ended. Clears the cancellation so the add-on renews normally at the next cycle boundary. No new charge — the cycle was already paid. Stackable add-ons cannot be resumed; buy a new unit instead. Returns {addonKey, project, nextRenewalAt, resumed}. Owner-only; requires a token minted with the billing scope.
| Name | Required | Description | Default |
|---|---|---|---|
| addonKey | Yes | Add-on key to resume (e.g. "log_retention", "rpm_5000"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behavioral details beyond annotations: it 'clears the cancellation', 'renews normally at the next cycle boundary', and notes 'No new charge — the cycle was already paid'. It also reveals the return shape and auth requirement ('Owner-only; requires a token minted with the billing scope'), giving the agent a full picture of side effects and prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: purpose, condition, effect, no-charge clarification, exception, return payload, and auth requirement. It is front-loaded with the core action and remains readable despite covering multiple facets.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one parameter, no output schema, and minimal annotations, this description fully compensates by covering behavior, exceptions, return value, and access constraints. The agent has enough context to invoke it correctly and anticipate outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description and example for addonKey, so the schema already carries the parameter meaning. The description adds no further parameter-specific semantics, which is acceptable given the baseline of 3 for well-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 opens with a specific verb+resource: 'Resume (un-cancel) a pending-cancel add-on', clearly distinguishing it from sibling tools like subscribe_addon or cancel_line_publish. It also adds the precise condition 'whose paid-through cycle has not yet ended', making the tool's scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states exactly when to use the tool: for pending-cancel add-ons whose paid-through cycle has not ended. It also gives a clear exclusion: 'Stackable add-ons cannot be resumed; buy a new unit instead', providing an actionable alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retry_dlq_entryAInspect
Re-enqueue a DLQ entry to the main relay stream and delete it from the DLQ. A replay is billed like any relay — it charges the entry's original credit cost to the project before re-sending; if the balance is too low the entry stays in the DLQ and this returns an insufficient-credits error (top up and retry). Succeeds if the entry exists, errors if it's already gone (retried or discarded). Requires edit access.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Dead-letter entry id from list_dlq. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=false and destructiveHint=false, leaving the description to carry behavioral detail. It discloses billing behavior (charges original credit cost), failure mode for insufficient balance (entry stays in DLQ, returns error), and error condition when entry is missing (already retried or discarded). It also states the access requirement. This goes well beyond the annotations and gives an agent full expectation of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each dense with information: the core action, the billing/error semantics, and the success/error conditions. It is front-loaded with the main purpose and every sentence adds value. 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 single-parameter tool with no output schema, the description covers the action, the billing side effect, both failure modes (insufficient credits and missing entry), and the required permission. An agent has everything needed to decide and call correctly, including how to recover from failure (top up and retry).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the id parameter as 'Dead-letter entry id from list_dlq' with 100% coverage. The description does not add new semantic detail about the parameter itself, only about tool behavior under certain id states. Per the rubric, with high schema coverage the baseline is 3, and the description does not elevate it further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb+resource statement: 'Re-enqueue a DLQ entry to the main relay stream and delete it from the DLQ.' This clearly distinguishes it from the sibling discard_dlq_entry (which discards without re-enqueueing) and get_dlq_entry (which only reads). The action is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (retrying a DLQ entry) and states a prerequisite ('Requires edit access'). It also notes failure conditions (insufficient credits, entry already gone). However, it does not explicitly name the alternative discard_dlq_entry or say 'use this when you want to retry, discard when you want permanent removal.' The guidance is clear but not explicit about alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reveal_rotation_successorARead-onlyInspect
One-shot retrieval of the plaintext for a successor minted by the auto-rotation scheduler (not by rotate_api_key — that returns its own plaintext directly). Decrypts the at-rest ciphertext, returns it once, then destroys it; a second call errors. Only available while the predecessor still has an unrevealed successor.
| Name | Required | Description | Default |
|---|---|---|---|
| keyId | Yes | UUID of the predecessor key whose successor to reveal. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotation Contradiction: The description states that the tool 'returns it once, then destroys it; a second call errors,' which indicates a destructive, state-changing operation. However, annotations declare readOnlyHint=true and destructiveHint=false, directly contradicting the described behavior. Per rubric, a contradiction merits a score of 1 regardless of descriptive richness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences communicate purpose, exclusions, one-shot behavior, destruction, error on second call, and availability precondition. No filler or repetition; every clause adds 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?
Description covers all critical context: one-shot retrieval, return value (plaintext), destruction semantics, second-call error, availability condition, and differentiation from rotate_api_key. Even with no output schema, the return type is clear from the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with the parameter description 'UUID of the predecessor key whose successor to reveal' already providing clear semantics. The description adds minimal extra meaning beyond clarifying that the successor comes from auto-rotation. Baseline 3 is appropriate when schema fully covers 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?
Description specifies a specific verb and resource: 'One-shot retrieval of the plaintext for a successor minted by the auto-rotation scheduler.' It explicitly distinguishes itself from rotate_api_key, which returns plaintext directly. This makes the tool's purpose unambiguous and differentiates it from 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?
Explicitly states when not to use this tool ('not by rotate_api_key') and gives an availability condition ('Only available while the predecessor still has an unrevealed successor'). This provides clear guidance on when to invoke the tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revoke_api_keyADestructiveInspect
Revoke a key immediately: it stops authenticating as soon as the change reaches the relay, with no overlap window, so callers still using it start failing. To replace a key without downtime, use rotate_api_key instead; if the key already has a successor, fetch it with reveal_rotation_successor, because rotate_api_key refuses a key that has one. Revoking a successor leaves its predecessor unable to rotate again. Owner anywhere, editor on own keys.
| Name | Required | Description | Default |
|---|---|---|---|
| keyId | Yes | UUID of the key to revoke. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description reveals key behavioral traits: immediate effect with no overlap window, callers start failing, successor revocations block predecessor rotation, and permission scoping. This adds substantial context that annotations alone do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences each earn their place: immediate behavior, downtime replacement guidance, successor edge case, and permission note. The most critical information is front-loaded, with 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 single-parameter tool with no output schema, the description covers the operation's effects, edge cases, alternatives, and authorization requirements. Nothing essential for correct invocation or expectation-setting is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents keyId as 'UUID of the key to revoke,' so schema coverage is 100%. The description adds no additional parameter-specific meaning, matching the baseline for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Revoke a key immediately,' and clearly distinguishes this from rotate_api_key and reveal_rotation_successor. An agent can tell exactly what the tool does and how it differs from related sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides decision guidance: use rotate_api_key for downtime-free replacement, use reveal_rotation_successor if a successor already exists, and warns when revocation is inappropriate. It also names the permission requirement, making when-to-use very clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revoke_project_tokenADestructiveInspect
Revoke a PROJECT-scoped management token on a project you own, any holder's, not just your own (the account-owner kill switch for a leaked or retired integration's management token). Soft-revoke: the row stays for traceability and the management token is rejected immediately. Idempotent. Requires an ACCOUNT-scoped management token and the config scope.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The slug of a project you own. | |
| tokenId | Yes | The management token UUID (from create_project_token or list_project_tokens). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say destructiveHint=true, but the description adds valuable behavioral detail: soft-revoke (row retained for traceability), immediate token rejection, idempotency, and auth/scope requirements. This goes well beyond what structured data provides and gives an agent accurate expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core action, then covers soft-revoke behavior, idempotency, and auth in a few dense sentences. Every sentence earns its place; 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?
The description covers the action, behavioral side effects, auth requirements, and idempotency, which is strong for a destructive tool. There is no output schema and the description does not mention the return value, but for a revocation tool this is a minor omission. Overall it is nearly complete for deciding when and how to call 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 description reinforces that slug refers to a project you own and that tokenId is a management token, but it does not add substantial parameter-level semantics beyond the schema. The additional context about scope and ownership is useful but does not specifically enrich either 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 and resource: revoke a PROJECT-scoped management token. It clearly differentiates from siblings like revoke_api_key by emphasizing project scope and the account-owner kill-switch purpose. It also clarifies the unusual capability of revoking any holder's token on a project you own, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use it: as an account-owner kill switch for a leaked or retired integration's management token. It also states the required auth context (ACCOUNT-scoped token and config scope). It does not explicitly name alternatives or state when not to use it, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rollback_configADestructiveInspect
Preview or apply publishing a retained line revision over what is currently published, clearing any pending schedule. Without confirmRevision this only returns the diff (the redacted change-gate preview, same shape as config_diff) between what is currently published and the target revision — it changes nothing. To apply, call again with confirmRevision set to the diff's currentRevision; if a publish landed since the preview, confirmRevision is now stale and the call is refused with error "rollback_confirmation_conflict" instead of silently overwriting the newer publish — read the fresh diff and confirm again. Applying also requires confirmUnsigned, the preview's unsignedFingerprint, so a signing secret expiring between the preview and the confirm cannot roll a target back unsigned without you having seen it named.
| Name | Required | Description | Default |
|---|---|---|---|
| lineKey | Yes | ||
| revision | Yes | ||
| confirmRevision | No | The currently-published revision number from the preview diff. Omit to preview only; include to apply. | |
| confirmUnsigned | No | The preview diff's unsignedFingerprint. Required whenever confirmRevision is given: a target's retained signing secret expires on a clock, so this proves the confirm saw the same set of targets the preview named as coming back unsigned. A stale one is refused with "rollback_confirmation_conflict". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=true, while the description adds substantial context: it clears any pending schedule, the preview changes nothing, a stale confirm is refused with rollback_confirmation_conflict rather than silently overwriting a newer publish, and confirmUnsigned guards against a signing secret expiring between preview and confirm.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded, leading with what the tool does and when it changes nothing. Several clauses (redacted change-gate preview, the signing-secret rationale) are lengthy, so it is informative but not maximally tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so by explaining that the preview returns a diff shaped like config_diff, plus the exact error code on conflict. For a destructive, confirmation-gated mutation this is complete enough to call safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, and the description adds real meaning for the two confirm parameters, including their source fields (currentRevision, unsignedFingerprint) and the failure mode of each. However, lineKey and revision are left entirely unexplained in both the schema and 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?
States a specific verb and resource: previewing or applying a retained line revision over the currently published config. It explicitly differentiates itself from siblings by naming config_diff as the shape the preview matches and by describing the publish-overwrite semantics that distinguish it from publish_line_draft.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit two-step protocol: call without confirmRevision to preview only, call again with confirmRevision equal to the diff's currentRevision to apply. It also states the when-not condition (stale confirmation is refused) and the additional confirmUnsigned prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rotate_api_keyADestructiveInspect
Mint a linked successor for an existing key. Returns the successor plaintext exactly once — store it now. The predecessor stays valid through its overlap window so callers can swap without downtime. Owner anywhere, editor on own keys.
| Name | Required | Description | Default |
|---|---|---|---|
| keyId | Yes | UUID of the key to rotate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavior beyond the destructiveHint annotation: 'Returns the successor plaintext exactly once — store it now' and 'predecessor stays valid through its overlap window.' It also mentions permissions ('Owner anywhere, editor on own keys'). This enriches the safety profile without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise: three sentences, each earning its place. The primary action is front-loaded, followed by a critical warning and permission context. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description is fairly complete. It covers the core behavior (returns plaintext once, overlap window, permissions). Minor gaps include lack of explicit error conditions or what happens after the overlap window, but these are not critical for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (keyId is described as 'UUID of the key to rotate'), so the schema already provides adequate parameter semantics. The description does not add additional detail about the parameter beyond what the schema states, so it meets the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Mint a linked successor for an existing key.' This uses a specific verb (mint) and resource (linked successor), and distinguishes itself from siblings like create_api_key (new key) and revoke_api_key (revoke) by focusing on rotation with a successor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: 'The predecessor stays valid through its overlap window so callers can swap without downtime.' This implies when to use it (for seamless key rotation) but does not explicitly name alternatives or state when not to use it. It lacks the explicit when/when-not guidance of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_line_publishADestructiveInspect
Schedule one non-empty line draft. Active subscribers required.
| Name | Required | Description | Default |
|---|---|---|---|
| lineKey | Yes | ||
| scheduledAt | Yes | ||
| draftRevision | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive (mutating). The description adds preconditions (non-empty draft, active subscribers) but does not disclose side effects like overwriting existing schedules or how the schedule can be cancelled. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler, front-loaded with the primary action and followed by a key prerequisite. Efficient and focused.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 three required parameters and no output schema, the description is too sparse: no scheduledAt format, no conflict/overwrite behavior, and no reference to cancel_line_publish for undoing. It covers basic intent but not enough for safe, 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 0%, and the description fails to explain the meaning or format of lineKey, draftRevision, or scheduledAt. The only hint is 'draft' corresponding to draftRevision, but no parameter-level detail is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool schedules a non-empty line draft for publishing, with an explicit verb and resource. It distinguishes from siblings like publish_line_draft (immediate) and cancel_line_publish (cancellation), confirming its scheduling purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context: scheduling a single non-empty draft and requiring active subscribers. It implies the use case of future publishing, but does not explicitly name alternatives or exclusions such as immediate publishing with publish_line_draft.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_burst_opt_inADestructiveInspect
Enable or disable the auto-decaying burst window for live traffic and publish the change immediately. When enabled, brief spikes a little above your steady RPM cap are absorbed at the normal credit rate (no surcharge, no burst SKU) instead of being rejected. Sustained overage decays back to your steady cap; headroom returns once traffic cools below the cap or you add RPM. Burst usage is tracked so you can see when to upgrade. Default is off (steady cap is a hard 429). Requires edit access.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | true to enable the burst window; false to disable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavioral detail beyond annotations: describes the auto-decaying mechanism, no surcharge, tracking, and publish timing. The destructiveHint is consistent with disabling leading to hard 429, which is implied by 'Default is off (steady cap is a hard 429).'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each adding information: action, behavior, default, and permission. No redundancy; structured logically with the core action 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?
For a single-parameter toggle with no output schema and minimal annotations, the description covers what, when, behavior, default, and access requirements. It is sufficient for an agent to decide when to call and what value to pass.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already describes the boolean, but the description adds meaning about the behavioral consequences of true/false, such as absorbing spikes at normal credit rate and decay over time. This goes beyond the schema's basic 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?
Description clearly states the action ('Enable or disable the auto-decaying burst window') and the resource, distinguishing it from siblings like set_rpm_ceiling by focusing on the burst window. The verb 'Enable or disable' is precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: explains when burst is useful ('brief spikes... absorbed'), default off, and requirement of edit access. Does not explicitly name alternatives, but the context makes it clear this is for toggling burst vs other settings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_key_policyADestructiveInspect
Owner-only. Edit the project's key policy. Only fields present in the patch are touched. Editors calling this get an error — use get_key_policy to read.
| Name | Required | Description | Default |
|---|---|---|---|
| maxKeyTtlDays | No | ||
| defaultKeyTtlDays | No | ||
| editorsMayCreateNonExpiringKeys | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the annotations: it discloses the owner-only restriction, the error for editors, and the partial-update behavior ('Only fields present in the patch are touched'). These are crucial details not captured by readOnlyHint/destructiveHint. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and well-structured: two sentences cover purpose, scope, error behavior, patch semantics, and alternative tool. No unnecessary words, with critical information front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with three parameters and no output schema, the description provides comprehensive guidance: who can use it, what it does, how partial updates work, and what happens for unauthorized callers. It also names the read-only alternative. No significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. It explains that only fields present in the patch are touched, which conveys that all parameters are optional and that absent fields remain unchanged. While it doesn't describe each parameter individually, the parameter names (maxKeyTtlDays, defaultKeyTtlDays, editorsMayCreateNonExpiringKeys) are self-explanatory, and the patch semantics are the key missing piece.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Edit the project's key policy' with the verb 'Edit' and specific resource. It distinguishes from the sibling get_key_policy by explicitly directing readers to that tool for reading, and adds scope ('Owner-only').
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explicit usage context: 'Owner-only' and 'Editors calling this get an error — use get_key_policy to read' clearly state when to use this tool versus the alternative, and who should use it. It also specifies the patch semantics, making the intended use unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_member_roleADestructiveInspect
Change a member's role between editor, viewer, and billing. Identify the member by their member ID or email (from list_members); the project owner's own role cannot be changed. Returns the updated member record. Owner only.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | The new role. | |
| No | Email address (alternative to memberId — targets the first matching member). | ||
| memberId | No | Member record UUID (from list_members). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true), the description adds crucial context: only the owner can perform this action, the owner's own role is protected, and the tool returns the updated member record. This gives the agent a solid understanding of side effects and constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences that are front-loaded with the core purpose and then provide necessary usage details. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description is complete: it specifies the operation, required permissions, constraints, and return value. No output schema exists, but the return behavior is explicitly stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all three parameters with descriptions and an enum. The description adds the relationship to list_members for obtaining memberId/email and clarifies the alternative identification methods. This is helpful context that goes slightly beyond the schema, though the schema itself is already informative.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Change a member's role') with specific role values ('editor, viewer, and billing'), and the resource ('member'). It also differentiates from sibling tools like invite_member and remove_member by focusing solely on role changes, and adds the restriction for the project owner.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explains how to identify the member ('member ID or email (from list_members)') and notes the exclusion (project owner's role cannot be changed) and the access requirement ('Owner only'). While it doesn't explicitly name alternative tools, the reference to list_members and the context make the usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_outbound_allowlistADestructiveInspect
Narrow the project's outbound host allowlist — the hosts a target may point at. The current list is on get_project as outboundHostAllowlist (empty means any public host). This tool may only narrow it: patterns must be a strict subset of, or equal to, the current list, compared as exact strings — submitting a wildcard that would cover an existing exact host, or clearing to empty, is refused as a widen. Widening the list is web-only, in the panel. Refused when the project already has a target (inactive lines included) outside the submitted list. Requires edit access.
| Name | Required | Description | Default |
|---|---|---|---|
| patterns | Yes | The full replacement list of allowed hosts, e.g. ["api.stripe.com", "*.internal.example.com"]. Must be a subset of the current outboundHostAllowlist. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnlyHint=false, destructiveHint=true) by detailing exact-string comparison, refusing wildcard widening, refusing clearing to empty, and requiring edit access. These are behavioral traits the agent needs to know and are not in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and then packs in necessary edge cases. It is dense but not padded. The complexity justifies the length; every sentence contributes essential context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description covers the full operational context: current list source, narrowing-only constraint, refusal scenarios, access requirements, and the web-only alternative for widening. This is complete for a tool with this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the param definition and subset requirement, but the description adds critical semantics: strict subset/equal comparison, exact-string matching, and refusal of wildcard expansion. This meaningfully supplements the schema, though the 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 opens with a specific verb and resource: 'Narrow the project's outbound host allowlist.' It clearly distinguishes itself by emphasizing this tool only narrows, never widens, which differentiates it from any potential sibling or web-based action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: widening is 'web-only, in the panel,' so this tool is for narrowing. It tells users to check the current list via get_project, and states clear refusal conditions (existing targets outside the submitted list). This is strong when-to-use/not-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_overage_billingADestructiveInspect
Turn the project owner's overage billing on or off, for the whole account. Returns {overageBilling}, the setting get_billing reads back. Owner-only; requires a token minted with the billing scope.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | True (the default) bills credits past your allowance and prepaid balance as overage; false slows the account to the free rate once its credits are gone instead, and nothing is refused. Turning it off still bills overage already used this billing cycle; turning it on bills only usage after the change. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so mutation is known. The description adds the permission requirement (owner-only, billing scope) and the return value ({overageBilling}), which is valuable context beyond annotations. It doesn't contradict annotations and provides useful operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero fluff. The action and scope are front-loaded, followed by return value and permission. Every word earns its place; no redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple boolean setter with one fully described parameter and no output schema, the description covers purpose, scope, permissions, and return value. Nothing an agent needs to call 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 coverage is 100% and the parameter description is rich, covering behavioral nuances (billing past allowance vs. free rate, retroactive billing). The description itself adds no new meaning about the parameter beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('turn on or off') and names the exact resource ('project owner's overage billing') and scope ('whole account'), clearly distinguishing it from the read-only sibling get_billing by explicitly mentioning that get_billing reads back the returned setting. This gives an agent an unambiguous understanding of what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (to change overage billing) and contrasts with get_billing for reading. It also states prerequisites (owner-only, billing scope token). It does not explicitly list alternatives, but the sibling set is large and the purpose is clear enough to avoid confusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_rpm_ceilingADestructiveInspect
Set or clear a self-set ceiling on this project's own effective live-traffic RPM (Traffic shaping) — for when your origin can't take the throughput your plan grants. Never plan-gated: the ceiling can only LOWER your effective RPM below your plan/add-on rate, never raise it, and never touches billing. Steady traffic is capped at the ceiling; if Burst Protect is on, its headroom is measured above the ceiling, not above the plan rate. The current value is on get_project as rpmCeiling (null = no ceiling). Requires edit access.
| Name | Required | Description | Default |
|---|---|---|---|
| rpmCeiling | Yes | A positive integer to set the ceiling, or null to clear it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits beyond the annotations: it can only lower the effective RPM, never raises it, and never affects billing. It also explains interaction with Burst Protect and points to get_project for reading the current value. This adds significant context to the readOnlyHint=false and destructiveHint=true annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed but each sentence earns its place: the first states the core action, the second clarifies limitations, the third explains Burst Protect interaction, the fourth points to get_project, and the fifth mentions access requirements. The structure is logical and front-loaded with the primary 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?
Given the tool's complexity and the absence of an output schema, the description thoroughly covers the operation's purpose, constraints, interactions with other features, where to read the current value, and access requirements. It leaves no critical gaps for an agent to misuse the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes the `rpmCeiling` parameter (integer or null, minimum 1, meaning set or clear), covering 100% of parameter semantics. The description adds contextual value by explaining the ceiling's purpose and effects, but it does not add new details about the parameter itself beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Set or clear a self-set ceiling') and specifies the resource and scope ('this project's own effective live-traffic RPM (Traffic shaping)'). It also distinguishes the tool from siblings by explicitly mentioning the RPM ceiling, which is unique among other set_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear when-to-use scenario ('for when your origin can't take the throughput your plan grants') and explains the constraint that it can only lower RPM. It does not explicitly name alternative tools, but the context is sufficient for an agent to understand when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_subscriptionAInspect
Begin a new Pro or Scale subscription for the project owner. Returns {checkoutUrl, plan} — surface the URL to the human for approval. Errors if the owner is already on an active paid plan (use change_plan instead). Owner-only; requires a token minted with the billing scope.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses key behaviors: it returns a checkoutUrl for human approval, errors on existing subscriptions, and requires billing-scoped tokens. This adds meaningful context about the flow and prerequisites without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the main action. Every sentence adds value: purpose, output, error condition, alternative, and access requirements. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple schema (1 enum param, no output schema), the description is complete. It explains what the tool does, what it returns, when it fails, the alternative, and authorization requirements. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single 'plan' parameter. The description compensates by naming the valid values ('Pro or Scale') and mapping them to the subscription tier. It doesn't explicitly state that the parameter is 'plan' or that it is the only parameter, but the schema already provides the enum and required field, so the added semantics are sufficient.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Begin') and resource ('Pro or Scale subscription'), clearly stating the tool's function. It distinguishes from sibling tools by explicitly mentioning change_plan as an alternative when the owner is already on a paid plan.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 explicit when-to-use guidance ('Begin a new Pro or Scale subscription'), when-not-to-use ('Errors if the owner is already on an active paid plan'), and the alternative tool ('use change_plan instead'). It also states prerequisites (Owner-only, requires a token with billing scope), giving clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_topupAInspect
Begin a credit-pack top-up for the project owner. Pass the packs eurCents(from list_credit_packs). Returns{checkoutUrl, credits, eurCents, directCharge}or{transactionId, credits, eurCents, directCharge:true}` on subsequent MCP purchases. Owner-only; requires a token minted with the billing scope.
| Name | Required | Description | Default |
|---|---|---|---|
| eurCents | Yes | Pack price in EUR cents, matching a pack returned by list_credit_packs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint false), the description discloses the return format variants ({checkoutUrl...} vs {transactionId...}), the directCharge flag behavior, and the authorization requirement (owner-only, billing scope). This is substantial behavioral context that annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, each serving a distinct role: stating the action, specifying the parameter source, and describing return values and authorization. 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 single parameter and absence of an output schema, the description fully covers the purpose, parameter origin, return variants, and authorization context. It provides everything needed to invoke the tool successfully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage of eurCents, including 'matching a pack returned by list_credit_packs.' The description restates the same information without adding new semantic detail, 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 explicitly states 'Begin a credit-pack top-up for the project owner' with a specific verb and resource. It clearly distinguishes from sibling tools by referencing list_credit_packs as the source of eurCents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tells the agent to pass eurCents from list_credit_packs and notes the owner-only billing scope requirement. This gives clear context for when to use, though it does not explicitly state when not to use or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subscribe_addonAInspect
Subscribe the project owner to a monthly add-on (RPM upgrade, team seat, extended log retention, extra file storage in +5 GB blocks, …). Charges the saved payment method immediately, then auto-renews every 30 days until unsubscribe_addon — or until the subscription ends, after which the already-paid cycle stays active to its own end date and stops without further charges. Requires an active Pro/Scale subscription and a saved PM. RPM upgrades (rpm_*) are per-project and apply to THIS project automatically. Returns {addonKey, project, monthlyEurCents, transactionId, chargeStatus, activatedAt, nextRenewalAt}. transactionId: The Paddle transaction id, or null while Paddle has not yet listed the charge. The purchase is recorded either way; do not retry it. chargeStatus: pending or completed. Owner-only; requires a token minted with the billing scope.
| Name | Required | Description | Default |
|---|---|---|---|
| addonKey | Yes | Stable key from list_addons (e.g. "team_member", "rpm_2000", "log_retention", "file_storage"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only convey readOnlyHint=false and destructiveHint=false, so the description carries the full burden of behavioral disclosure. It thoroughly covers the immediate charge, 30-day auto-renewal, cancellation semantics, per-project RPM behavior, and the meaning of chargeStatus. This goes well beyond what the annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries necessary information: billing, renewal, prerequisites, return shape, field semantics, and authorization. It is slightly long but not wasteful, and the core purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a single parameter and no output schema, the description fully compensates by documenting the returned object, explaining transactionId and chargeStatus edge cases, and specifying access requirements. Nothing needed to call the tool 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% and the addonKey parameter is already described as a 'Stable key from list_addons' with examples. The description reinforces the source of the key and mentions rpm_* per-project behavior, but does not fundamentally add new parameter-level meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Subscribe the project owner to a monthly add-on', followed by concrete examples of add-ons. This clearly identifies the tool's function and distinguishes it from sibling operations like unsubscribe_addon, downgrade_addon, or list_addons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when the tool is appropriate: requires an active Pro/Scale subscription, a saved payment method, owner-only access, and a billing-scoped token. It also explains billing behavior and warns not to retry when the charge is pending. It does not explicitly reference alternatives, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unarchive_projectAInspect
Restore an archived project you own to the data plane. Restoring consumes one of your plan's active-project slots, so at the limit this returns an error telling you to archive another project or upgrade. Idempotent for an already-active project. Requires an ACCOUNT-scoped management token and the config scope.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The slug of a project you own. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description reveals important side effects: consuming an active-project slot, error behavior at the limit, idempotency for active projects, and authentication requirements (ACCOUNT-scoped token and config scope). This is strong behavioral disclosure for a mutating operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences each add distinct value: purpose, side effects/error behavior, and auth. The description is front-loaded and contains 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 single-parameter tool with no output schema, this description covers purpose, usage, side effects, error condition, idempotency, ownership prerequisite, and auth requirements. Nothing necessary to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the sole parameter slug is already described as 'The slug of a project you own.' The description echoes the ownership requirement but does not add new parameter-level detail beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Restore') and resource ('an archived project you own') and adds the target context ('to the data plane'). This clearly distinguishes it from siblings like archive_project, create_project, and protect_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the use case clear: restoring an archived project you own. It also notes the slot-limit error condition and idempotency for already-active projects, giving the agent practical context. It does not explicitly name an alternative tool or state a when-not-to-use, but the guidance is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unsubscribe_addonADestructiveInspect
Cancel an active add-on subscription. Stops future charges; the current cycle stays active until expiry. RPM upgrades are cancelled for THIS project. Returns {addonKey, project, cancelledAt}. Owner-only; requires a token minted with the billing scope.
| Name | Required | Description | Default |
|---|---|---|---|
| addonKey | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint and readOnlyHint annotations, the description explains exactly what happens (charges stop, current cycle persists, RPM upgrades canceled), the return value shape, and required permissions. This is rich behavioral context with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action, and every sentence adds meaningful detail. No wasted words or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool with no output schema, the description covers the cancellation effect, project-specific impact, return shape, permission requirements, and destructive nature. It is complete enough 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 0%, and the description does not explain the addonKey parameter beyond implying it identifies the add-on. With one required parameter, the description should have mentioned how to obtain or format addonKey, but it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool cancels an active add-on subscription and specifies the effect (stops future charges, current cycle remains active). It distinguishes from related tools like cancel_subscription by focusing on add-on subscriptions and RPM upgrade cancellation specific to the project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 provides clear usage context: only for active add-ons, owner-only, requires a billing-scoped token. It does not explicitly name alternative tools, but the scope is sufficiently clear to guide selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_credentialADestructiveInspect
Rename a credential and/or rotate its secret, publishing the change immediately so every target that uses this credential picks it up right away. Omit a secret field (or the whole auth object) to keep the existing value — the vault can never show a secret back to confirm it, so leaving it out means "unchanged," not "cleared." The destination host cannot be changed here: create a new credential for a new destination.
| Name | Required | Description | Default |
|---|---|---|---|
| auth | No | Same shape as create_credential. Omit to keep the existing auth entirely. | |
| name | No | New name. Omit to keep the existing one. | |
| credentialId | Yes | UUID of the credential (from list_credentials). | |
| destinationHost | No | Permanent — may only restate the credential's current host (omit it, or send back what list_credentials reported). Any other value is refused; a credential is never re-aimed, it is replaced. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true, but the description adds crucial behavioral detail: changes publish immediately to all targets, the vault cannot reveal secrets back, and omitting auth means 'unchanged' not 'cleared'. This explains real-world consequences beyond the boolean annotations and prevents a dangerous misinterpretation.
Agents need to know what a tool does to the 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 focused sentences, front-loaded with the tool's core purpose and immediate effect. The second sentence explains the critical secret-omission behavior, and the third closes with the destination limitation and alternative. No wasted words; every sentence adds necessary operational 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 mutation tool with no output schema and a nested auth object, the description is remarkably complete. It covers what changes, how propagation works, the secret-omission gotcha, and the immutability of destinationHost. It also provides an alternative path when the tool cannot be used, making it fully actionable for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema coverage is 100%, the description enriches the meaning of parameters, especially auth: 'Omit a secret field (or the whole `auth` object) to keep the existing value' and explains why ('the vault can never show a secret back'). It also reinforces that destinationHost is permanent. This goes well beyond the schema's one-line parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Rename a credential and/or rotate its secret'. It clearly distinguishes from sibling tools like create_credential and delete_credential by stating what it does (rename/rotate) and what it cannot do (change destination). This makes the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when-not to use: 'The destination host cannot be changed here' and provides the alternative: 'create a new credential for a new destination.' The description also clarifies that omitting a secret means 'unchanged' not 'cleared', giving clear operational guidance. This exceeds basic usage context by naming an alternative action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_endpointADestructiveInspect
Update an endpoint immediately or by staging the change in its line draft with commitMode "draft" and draftRevision; the patch is merged field-by-field onto the endpoint's current values, so omitted keys keep their values; a targets array, when sent, must carry each target's secret again, because get_endpoint returns them redacted. Draft mode returns {draft}; an immediate update returns {endpoint, scheduledAt} with the endpoint's full updated document. Errors on a missing lineKey/endpointId, an unknown line or endpoint, a patch that fails validation (including a rejected target mapping or an outbound-allowlist violation), or a stale draftRevision. Requires edit access.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | Yes | Partial endpoint document — same shape as create_endpoint, every field optional. | |
| lineKey | Yes | The line key. | |
| commitMode | No | Defaults to publish. Draft writes require draftRevision. | |
| endpointId | Yes | The endpoint UUID. | |
| scheduledAt | No | Compatibility alias: stage this update then schedule its line. | |
| draftRevision | No | Current line draft revision, required for draft writes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by explaining the field-by-field merge semantics (omitted keys keep values), the requirement to resend target secrets due to redaction, the exact return shapes for both modes, and a full list of error conditions including stale draftRevision and outbound-allowlist violations. It also states the authorization requirement ('Requires edit access'). This is rich behavioral context beyond the readOnlyHint/destructiveHint flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences deliver the core behavior first — update modes, merge semantics, secrets handling — followed by return values and errors. Every sentence earns its place, and the description is appropriately sized for a complex tool with a large nested 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?
Given the absence of an output schema, the description correctly explains return payloads for both commit modes ({draft} and {endpoint, scheduledAt}) and enumerates all failure conditions. The permission requirement and draftRevision staleness caveat complete the picture a caller needs to invoke the tool correctly. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage of parameters with detailed descriptions, so the baseline is 3. The description adds meaningful semantic context beyond the schema: the patch is merged field-by-field, omitted keys retain values, and a targets array must resend secrets because get_endpoint returns them redacted. This compensates for the schema's purely structural explanations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource — 'Update an endpoint' — and distinguishes the two modes (immediate vs staged draft) with their associated commitMode values. It clearly differentiates this tool from siblings like create_endpoint, delete_endpoint, and get_endpoint by describing update-specific behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use immediate updates vs draft staging via commitMode 'draft' and draftRevision, and notes that draft mode returns the draft while immediate mode returns the updated endpoint. It doesn't explicitly name sibling alternatives (e.g., 'for creating endpoints use create_endpoint'), but the update-focused language and error conditions make the usage context obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Added
set_overage_billing
2 tool updates
- Changed
create_project_token3 fields changed- changed
Input schema / properties / expiresInDays / descriptionPrevious value: -"Days until the minted token expires. Default 30. API-minted tokens always expire."New value: +"Days until the minted management token expires. Default 30. API-minted management tokens always expire." - changed
Input schema / properties / label / descriptionPrevious value: -"Human-readable token label (1–100 chars)."New value: +"Human-readable management token label (1–100 chars)." - changed
Input schema / properties / scopes / descriptionPrevious value: -"Scopes for the minted token — must be a subset of this token's own scopes. `read` is always granted. `spend` and the legacy `billing` scope are never mintable here — panel-only. Default: read + config."New value: +"Scopes for the minted management token: must be a subset of this management token's own scopes. `read` is always granted. `spend` and the legacy `billing` scope are never mintable here (panel-only). Default: read + config."
- Changed
revoke_project_token1 field changed- changed
Input schema / properties / tokenId / descriptionPrevious value: -"The token UUID (from create_project_token or list_project_tokens)."New value: +"The management token UUID (from create_project_token or list_project_tokens)."
4 tool updates
- Changed
create_endpoint1 field changed- added
Input schema / properties / endpoint / properties / targets / items / properties / signingSecretAdded value: +{ + "description": "Signs the body delivered to this target — separate from auth above, which authenticates OUTBOUND to the target. Shape: \"whsec_\" followed by base64 of 32 random bytes. Omit to leave unchanged; set to null to disable signing; set to your own whsec_-shaped value to use it verbatim (rejected otherwise, including an empty string — you hold this secret, so only you can supply it). On reads, a configured secret is redacted to \"***\" — round-trip that sentinel to keep the stored secret.", + "type": [ + "string", + "null" + ] +}
- Changed
dry_run_endpoint1 field changed- added
Input schema / properties / endpoint / properties / targets / items / properties / signingSecretAdded value: +{ + "description": "Signs the body delivered to this target — separate from auth above, which authenticates OUTBOUND to the target. Shape: \"whsec_\" followed by base64 of 32 random bytes. Omit to leave unchanged; set to null to disable signing; set to your own whsec_-shaped value to use it verbatim (rejected otherwise, including an empty string — you hold this secret, so only you can supply it). On reads, a configured secret is redacted to \"***\" — round-trip that sentinel to keep the stored secret.", + "type": [ + "string", + "null" + ] +}
- Changed
rollback_config1 field changed- added
Input schema / properties / confirmUnsignedAdded value: +{ + "description": "The preview diff's unsignedFingerprint. Required whenever confirmRevision is given: a target's retained signing secret expires on a clock, so this proves the confirm saw the same set of targets the preview named as coming back unsigned. A stale one is refused with \"rollback_confirmation_conflict\".", + "type": "string" +}
- Changed
update_endpoint1 field changed- added
Input schema / properties / patch / properties / targets / items / properties / signingSecretAdded value: +{ + "description": "Signs the body delivered to this target — separate from auth above, which authenticates OUTBOUND to the target. Shape: \"whsec_\" followed by base64 of 32 random bytes. Omit to leave unchanged; set to null to disable signing; set to your own whsec_-shaped value to use it verbatim (rejected otherwise, including an empty string — you hold this secret, so only you can supply it). On reads, a configured secret is redacted to \"***\" — round-trip that sentinel to keep the stored secret.", + "type": [ + "string", + "null" + ] +}
1 tool update
- Changed
rollback_config1 field changed- added
Input schema / properties / confirmRevisionAdded value: +{ + "description": "The currently-published revision number from the preview diff. Omit to preview only; include to apply.", + "minimum": 1, + "type": "integer" +}
3 tool updates
- Changed
discard_dlq_entry1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Redis stream id from list_dlq."New value: +"Dead-letter entry id from list_dlq."
- Changed
get_dlq_entry1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Redis stream id, e.g. \"1717930000000-0\" (as returned by list_dlq). Changes on every retry — prefer requestId to track an entry across replays."New value: +"Dead-letter entry id, e.g. \"1717930000000-0\" (as returned by list_dlq). Changes on every retry — prefer requestId to track an entry across replays."
- Changed
retry_dlq_entry1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Redis stream id from list_dlq."New value: +"Dead-letter entry id from list_dlq."
3 tool updates
- Changed
create_endpoint1 field changed- added
Input schema / properties / endpoint / properties / targets / items / properties / callbackURLAdded value: +{ + "description": "Pushed once this target's delivery reaches a terminal status — see get_receipts' callbackState. Must be https. Meaningful for async targets only — refused on sync/stream. Cannot point back into this project (the same relay-loop rule as targetUrl) and must be inside the project's outbound host allowlist when one is set. Unset = the customer polls the receipt instead.", + "format": "uri", + "type": "string" +}
- Changed
dry_run_endpoint1 field changed- added
Input schema / properties / endpoint / properties / targets / items / properties / callbackURLAdded value: +{ + "description": "Pushed once this target's delivery reaches a terminal status — see get_receipts' callbackState. Must be https. Meaningful for async targets only — refused on sync/stream. Cannot point back into this project (the same relay-loop rule as targetUrl) and must be inside the project's outbound host allowlist when one is set. Unset = the customer polls the receipt instead.", + "format": "uri", + "type": "string" +}
- Changed
update_endpoint1 field changed- added
Input schema / properties / patch / properties / targets / items / properties / callbackURLAdded value: +{ + "description": "Pushed once this target's delivery reaches a terminal status — see get_receipts' callbackState. Must be https. Meaningful for async targets only — refused on sync/stream. Cannot point back into this project (the same relay-loop rule as targetUrl) and must be inside the project's outbound host allowlist when one is set. Unset = the customer polls the receipt instead.", + "format": "uri", + "type": "string" +}
1 tool update
- Added
generate_line_draft
3 tool updates
- Changed
create_endpoint1 field changed- changed
Input schema / properties / endpoint / properties / targets / items / properties / answerVariants / descriptionPrevious value: -"The conditional form of answerMapping, for a target whose answers do not all share one shape: one mapping per reply instead of one for every reply. Requires \"distinguishBy\" naming the single thing that tells them apart ({\"source\":\"status\"}, {\"source\":\"header\",\"name\":…} or {\"source\":\"bodyField\",\"path\":…}), \"variants\" as an object keyed by the value it matches — an exact status like \"429\", a class like \"4XX\", or \"default\" — each holding a tree in the same grammar as answerMapping, and \"onNoMatch\", which has no default and must be either \"passthrough\" (hand the vendor's answer back untouched) or \"fail\" (answer 422 naming the value that matched nothing). Mutually exclusive with answerMapping on this target, and refused on a stream target for the same reason answerMapping is. A variant whose tree does not compile is refused when the line is published, not silently dropped. null = no reshaping."New value: +"The conditional form of answerMapping, for a target whose answers do not all share one shape: one mapping per reply instead of one for every reply. Requires \"distinguishBy\" naming the single thing that tells them apart ({\"source\":\"status\"}, {\"source\":\"header\",\"name\":…} or {\"source\":\"bodyField\",\"path\":…}), \"variants\" as an object keyed by the value it matches — an exact status like \"429\", a class like \"4XX\", or \"default\" — each holding a tree in the same grammar as answerMapping — or, where the caller should be answered with a status of your own, an object {\"mapping\": <tree>, \"replyStatus\": 402} — and \"onNoMatch\", which has no default and must be either \"passthrough\" (hand the vendor's answer back untouched) or \"fail\" (answer 422 naming the value that matched nothing). A replyStatus is what the caller sees and never what the delivery is measured or charged as; it must be a status that can carry a body (200–599, excluding 204, 205 and redirects), and setting one drops the vendor's own response headers, which describe the answer it replaced. A variant keyed on a status that carries no body (204, 205, 304) is reachable only when it sets one. Mutually exclusive with answerMapping on this target, and refused on a stream target for the same reason answerMapping is. A variant whose tree does not compile is refused when the line is published, not silently dropped. null = no reshaping."
- Changed
dry_run_endpoint1 field changed- changed
Input schema / properties / endpoint / properties / targets / items / properties / answerVariants / descriptionPrevious value: -"The conditional form of answerMapping, for a target whose answers do not all share one shape: one mapping per reply instead of one for every reply. Requires \"distinguishBy\" naming the single thing that tells them apart ({\"source\":\"status\"}, {\"source\":\"header\",\"name\":…} or {\"source\":\"bodyField\",\"path\":…}), \"variants\" as an object keyed by the value it matches — an exact status like \"429\", a class like \"4XX\", or \"default\" — each holding a tree in the same grammar as answerMapping, and \"onNoMatch\", which has no default and must be either \"passthrough\" (hand the vendor's answer back untouched) or \"fail\" (answer 422 naming the value that matched nothing). Mutually exclusive with answerMapping on this target, and refused on a stream target for the same reason answerMapping is. A variant whose tree does not compile is refused when the line is published, not silently dropped. null = no reshaping."New value: +"The conditional form of answerMapping, for a target whose answers do not all share one shape: one mapping per reply instead of one for every reply. Requires \"distinguishBy\" naming the single thing that tells them apart ({\"source\":\"status\"}, {\"source\":\"header\",\"name\":…} or {\"source\":\"bodyField\",\"path\":…}), \"variants\" as an object keyed by the value it matches — an exact status like \"429\", a class like \"4XX\", or \"default\" — each holding a tree in the same grammar as answerMapping — or, where the caller should be answered with a status of your own, an object {\"mapping\": <tree>, \"replyStatus\": 402} — and \"onNoMatch\", which has no default and must be either \"passthrough\" (hand the vendor's answer back untouched) or \"fail\" (answer 422 naming the value that matched nothing). A replyStatus is what the caller sees and never what the delivery is measured or charged as; it must be a status that can carry a body (200–599, excluding 204, 205 and redirects), and setting one drops the vendor's own response headers, which describe the answer it replaced. A variant keyed on a status that carries no body (204, 205, 304) is reachable only when it sets one. Mutually exclusive with answerMapping on this target, and refused on a stream target for the same reason answerMapping is. A variant whose tree does not compile is refused when the line is published, not silently dropped. null = no reshaping."
- Changed
update_endpoint1 field changed- changed
Input schema / properties / patch / properties / targets / items / properties / answerVariants / descriptionPrevious value: -"The conditional form of answerMapping, for a target whose answers do not all share one shape: one mapping per reply instead of one for every reply. Requires \"distinguishBy\" naming the single thing that tells them apart ({\"source\":\"status\"}, {\"source\":\"header\",\"name\":…} or {\"source\":\"bodyField\",\"path\":…}), \"variants\" as an object keyed by the value it matches — an exact status like \"429\", a class like \"4XX\", or \"default\" — each holding a tree in the same grammar as answerMapping, and \"onNoMatch\", which has no default and must be either \"passthrough\" (hand the vendor's answer back untouched) or \"fail\" (answer 422 naming the value that matched nothing). Mutually exclusive with answerMapping on this target, and refused on a stream target for the same reason answerMapping is. A variant whose tree does not compile is refused when the line is published, not silently dropped. null = no reshaping."New value: +"The conditional form of answerMapping, for a target whose answers do not all share one shape: one mapping per reply instead of one for every reply. Requires \"distinguishBy\" naming the single thing that tells them apart ({\"source\":\"status\"}, {\"source\":\"header\",\"name\":…} or {\"source\":\"bodyField\",\"path\":…}), \"variants\" as an object keyed by the value it matches — an exact status like \"429\", a class like \"4XX\", or \"default\" — each holding a tree in the same grammar as answerMapping — or, where the caller should be answered with a status of your own, an object {\"mapping\": <tree>, \"replyStatus\": 402} — and \"onNoMatch\", which has no default and must be either \"passthrough\" (hand the vendor's answer back untouched) or \"fail\" (answer 422 naming the value that matched nothing). A replyStatus is what the caller sees and never what the delivery is measured or charged as; it must be a status that can carry a body (200–599, excluding 204, 205 and redirects), and setting one drops the vendor's own response headers, which describe the answer it replaced. A variant keyed on a status that carries no body (204, 205, 304) is reachable only when it sets one. Mutually exclusive with answerMapping on this target, and refused on a stream target for the same reason answerMapping is. A variant whose tree does not compile is refused when the line is published, not silently dropped. null = no reshaping."
1 tool update
- Added
get_receipts
3 tool updates
- Changed
create_endpoint1 field changed- added
Input schema / properties / endpoint / properties / attributes / items / properties / forwardingAdded value: +{ + "description": "Only meaningful for in=query or in=path. blocked (default): validated, never sent to the target. forwardInPlace: sent to the target in the same location — a query attribute as a query parameter, a path attribute as a path segment. A path attribute forwards only when its name is its own zero-based segment position (\"0\" for the first segment after the endpoint URL, \"1\" for the next, …) — path segments are matched positionally, not by name. To carry a value into the body or a header instead, leave this blocked and add a field mapping on the target sourced from this attribute.", + "enum": [ + "blocked", + "forwardInPlace" + ], + "type": "string" +}
- Changed
dry_run_endpoint1 field changed- added
Input schema / properties / endpoint / properties / attributes / items / properties / forwardingAdded value: +{ + "description": "Only meaningful for in=query or in=path. blocked (default): validated, never sent to the target. forwardInPlace: sent to the target in the same location — a query attribute as a query parameter, a path attribute as a path segment. A path attribute forwards only when its name is its own zero-based segment position (\"0\" for the first segment after the endpoint URL, \"1\" for the next, …) — path segments are matched positionally, not by name. To carry a value into the body or a header instead, leave this blocked and add a field mapping on the target sourced from this attribute.", + "enum": [ + "blocked", + "forwardInPlace" + ], + "type": "string" +}
- Changed
update_endpoint1 field changed- added
Input schema / properties / patch / properties / attributes / items / properties / forwardingAdded value: +{ + "description": "Only meaningful for in=query or in=path. blocked (default): validated, never sent to the target. forwardInPlace: sent to the target in the same location — a query attribute as a query parameter, a path attribute as a path segment. A path attribute forwards only when its name is its own zero-based segment position (\"0\" for the first segment after the endpoint URL, \"1\" for the next, …) — path segments are matched positionally, not by name. To carry a value into the body or a header instead, leave this blocked and add a field mapping on the target sourced from this attribute.", + "enum": [ + "blocked", + "forwardInPlace" + ], + "type": "string" +}
3 tool updates
- Changed
create_endpoint1 field changed- added
Input schema / properties / endpoint / properties / targets / items / properties / answerVariantsAdded value: +{ + "description": "The conditional form of answerMapping, for a target whose answers do not all share one shape: one mapping per reply instead of one for every reply. Requires \"distinguishBy\" naming the single thing that tells them apart ({\"source\":\"status\"}, {\"source\":\"header\",\"name\":…} or {\"source\":\"bodyField\",\"path\":…}), \"variants\" as an object keyed by the value it matches — an exact status like \"429\", a class like \"4XX\", or \"default\" — each holding a tree in the same grammar as answerMapping, and \"onNoMatch\", which has no default and must be either \"passthrough\" (hand the vendor's answer back untouched) or \"fail\" (answer 422 naming the value that matched nothing). Mutually exclusive with answerMapping on this target, and refused on a stream target for the same reason answerMapping is. A variant whose tree does not compile is refused when the line is published, not silently dropped. null = no reshaping.", + "type": [ + "object", + "null" + ] +}
- Changed
dry_run_endpoint1 field changed- added
Input schema / properties / endpoint / properties / targets / items / properties / answerVariantsAdded value: +{ + "description": "The conditional form of answerMapping, for a target whose answers do not all share one shape: one mapping per reply instead of one for every reply. Requires \"distinguishBy\" naming the single thing that tells them apart ({\"source\":\"status\"}, {\"source\":\"header\",\"name\":…} or {\"source\":\"bodyField\",\"path\":…}), \"variants\" as an object keyed by the value it matches — an exact status like \"429\", a class like \"4XX\", or \"default\" — each holding a tree in the same grammar as answerMapping, and \"onNoMatch\", which has no default and must be either \"passthrough\" (hand the vendor's answer back untouched) or \"fail\" (answer 422 naming the value that matched nothing). Mutually exclusive with answerMapping on this target, and refused on a stream target for the same reason answerMapping is. A variant whose tree does not compile is refused when the line is published, not silently dropped. null = no reshaping.", + "type": [ + "object", + "null" + ] +}
- Changed
update_endpoint1 field changed- added
Input schema / properties / patch / properties / targets / items / properties / answerVariantsAdded value: +{ + "description": "The conditional form of answerMapping, for a target whose answers do not all share one shape: one mapping per reply instead of one for every reply. Requires \"distinguishBy\" naming the single thing that tells them apart ({\"source\":\"status\"}, {\"source\":\"header\",\"name\":…} or {\"source\":\"bodyField\",\"path\":…}), \"variants\" as an object keyed by the value it matches — an exact status like \"429\", a class like \"4XX\", or \"default\" — each holding a tree in the same grammar as answerMapping, and \"onNoMatch\", which has no default and must be either \"passthrough\" (hand the vendor's answer back untouched) or \"fail\" (answer 422 naming the value that matched nothing). Mutually exclusive with answerMapping on this target, and refused on a stream target for the same reason answerMapping is. A variant whose tree does not compile is refused when the line is published, not silently dropped. null = no reshaping.", + "type": [ + "object", + "null" + ] +}
1 tool update
- Changed
dry_run_endpoint2 fields changed- added
Input schema / properties / answerSampleAdded value: +{ + "description": "Optional: an answer payload, shaped as one a target would actually return. Drives answerMapping the same way, as answerMappingEvaluation. It cannot be inferred from sample — the two travel in opposite directions.", + "type": [ + "object", + "array", + "string", + "number", + "boolean", + "null" + ] +} - added
Input schema / properties / sampleAdded value: +{ + "description": "Optional: a request payload, shaped as one a caller would actually send, passed as JSON rather than as a string containing JSON. Every target carrying an outgoingMapping is evaluated against it and the verdict is attached to that target as outgoingMappingEvaluation.", + "type": [ + "object", + "array", + "string", + "number", + "boolean", + "null" + ] +}
3 tool updates
- Changed
create_endpoint2 fields changed- added
Input schema / properties / endpoint / properties / targets / items / properties / answerMappingAdded value: +{ + "description": "Reshapes this target's answer into what the caller receives — a tree of typed nodes conforming to the same published grammar as outgoingMapping. Refused on a stream target (deliveryMode=stream) — a stream's response is proxied straight through and never reshaped. null = no reshaping, the answer reaches the caller verbatim; paths, types and cycles are checked server-side.", + "type": [ + "object", + "null" + ] +} - added
Input schema / properties / endpoint / properties / targets / items / properties / outgoingMappingAdded value: +{ + "description": "Reshapes the request into what this target expects — a tree of typed nodes conforming to the published grammar at \"https://schemas.echorelay.dev/transform/mapping/v1.json\" (its own $schema key must name that value). Mutually exclusive with mapping and transformers on this target, and with the endpoint's own transformers — the write is rejected if both are set. null = no reshaping (today's behaviour, and the only value this schema itself can validate; paths, types and cycles are checked server-side).", + "type": [ + "object", + "null" + ] +}
- Changed
dry_run_endpoint2 fields changed- added
Input schema / properties / endpoint / properties / targets / items / properties / answerMappingAdded value: +{ + "description": "Reshapes this target's answer into what the caller receives — a tree of typed nodes conforming to the same published grammar as outgoingMapping. Refused on a stream target (deliveryMode=stream) — a stream's response is proxied straight through and never reshaped. null = no reshaping, the answer reaches the caller verbatim; paths, types and cycles are checked server-side.", + "type": [ + "object", + "null" + ] +} - added
Input schema / properties / endpoint / properties / targets / items / properties / outgoingMappingAdded value: +{ + "description": "Reshapes the request into what this target expects — a tree of typed nodes conforming to the published grammar at \"https://schemas.echorelay.dev/transform/mapping/v1.json\" (its own $schema key must name that value). Mutually exclusive with mapping and transformers on this target, and with the endpoint's own transformers — the write is rejected if both are set. null = no reshaping (today's behaviour, and the only value this schema itself can validate; paths, types and cycles are checked server-side).", + "type": [ + "object", + "null" + ] +}
- Changed
update_endpoint2 fields changed- added
Input schema / properties / patch / properties / targets / items / properties / answerMappingAdded value: +{ + "description": "Reshapes this target's answer into what the caller receives — a tree of typed nodes conforming to the same published grammar as outgoingMapping. Refused on a stream target (deliveryMode=stream) — a stream's response is proxied straight through and never reshaped. null = no reshaping, the answer reaches the caller verbatim; paths, types and cycles are checked server-side.", + "type": [ + "object", + "null" + ] +} - added
Input schema / properties / patch / properties / targets / items / properties / outgoingMappingAdded value: +{ + "description": "Reshapes the request into what this target expects — a tree of typed nodes conforming to the published grammar at \"https://schemas.echorelay.dev/transform/mapping/v1.json\" (its own $schema key must name that value). Mutually exclusive with mapping and transformers on this target, and with the endpoint's own transformers — the write is rejected if both are set. null = no reshaping (today's behaviour, and the only value this schema itself can validate; paths, types and cycles are checked server-side).", + "type": [ + "object", + "null" + ] +}
3 tool updates
- Changed
create_endpoint4 fields changed- changed
Input schema / properties / endpoint / properties / targets / items / properties / retryPolicy / descriptionPrevious value: -"Async retry policy. Ignored unless deliveryMode=async. Leave it unset (null) and the platform's own default ladder applies instead — it is not expressible through this schema and runs considerably longer than any maxAttempts you can set here, so a target left on defaults can sit quietly for a long time before anything reaches the DLQ. Set it explicitly — a low maxAttempts included — for a retry ladder you can predict and observe. get_endpoint reports which is in effect: this object when set, null when the platform default applies."New value: +"Async retry policy. Ignored unless deliveryMode=async. Leave it unset (null) and the platform default applies, which behaves the same as maxAttempts at its maximum. get_endpoint reports which is in effect: this object when set, null when the platform default applies." - added
Input schema / properties / endpoint / properties / targets / items / properties / retryPolicy / properties / backoffMultiplier / descriptionAdded value: +"How sharply the gap between tries widens. Higher spends the same attempts over a longer stretch. Defaults to 2.0." - changed
Input schema / properties / endpoint / properties / targets / items / properties / retryPolicy / properties / maxAttempts / descriptionPrevious value: -"Including the initial attempt. Only takes effect when retryPolicy itself is set — see its description for what an unset retryPolicy uses instead."New value: +"Total delivery attempts, counting the first. 1 fails fast: one try, then the dead-letter queue. Higher values keep retrying with a widening gap between tries — at the default backoffMultiplier, roughly under a minute at 4, a few minutes at 7, about an hour at 10, a few hours at 14. Anything still undelivered lands in the dead-letter queue. Defaults to 14." - changed
Input schema / properties / endpoint / properties / targets / items / properties / retryPolicy / properties / maxAttempts / maximumPrevious value: -10New value: +14
- Changed
dry_run_endpoint4 fields changed- changed
Input schema / properties / endpoint / properties / targets / items / properties / retryPolicy / descriptionPrevious value: -"Async retry policy. Ignored unless deliveryMode=async. Leave it unset (null) and the platform's own default ladder applies instead — it is not expressible through this schema and runs considerably longer than any maxAttempts you can set here, so a target left on defaults can sit quietly for a long time before anything reaches the DLQ. Set it explicitly — a low maxAttempts included — for a retry ladder you can predict and observe. get_endpoint reports which is in effect: this object when set, null when the platform default applies."New value: +"Async retry policy. Ignored unless deliveryMode=async. Leave it unset (null) and the platform default applies, which behaves the same as maxAttempts at its maximum. get_endpoint reports which is in effect: this object when set, null when the platform default applies." - added
Input schema / properties / endpoint / properties / targets / items / properties / retryPolicy / properties / backoffMultiplier / descriptionAdded value: +"How sharply the gap between tries widens. Higher spends the same attempts over a longer stretch. Defaults to 2.0." - changed
Input schema / properties / endpoint / properties / targets / items / properties / retryPolicy / properties / maxAttempts / descriptionPrevious value: -"Including the initial attempt. Only takes effect when retryPolicy itself is set — see its description for what an unset retryPolicy uses instead."New value: +"Total delivery attempts, counting the first. 1 fails fast: one try, then the dead-letter queue. Higher values keep retrying with a widening gap between tries — at the default backoffMultiplier, roughly under a minute at 4, a few minutes at 7, about an hour at 10, a few hours at 14. Anything still undelivered lands in the dead-letter queue. Defaults to 14." - changed
Input schema / properties / endpoint / properties / targets / items / properties / retryPolicy / properties / maxAttempts / maximumPrevious value: -10New value: +14
- Changed
update_endpoint4 fields changed- changed
Input schema / properties / patch / properties / targets / items / properties / retryPolicy / descriptionPrevious value: -"Async retry policy. Ignored unless deliveryMode=async. Leave it unset (null) and the platform's own default ladder applies instead — it is not expressible through this schema and runs considerably longer than any maxAttempts you can set here, so a target left on defaults can sit quietly for a long time before anything reaches the DLQ. Set it explicitly — a low maxAttempts included — for a retry ladder you can predict and observe. get_endpoint reports which is in effect: this object when set, null when the platform default applies."New value: +"Async retry policy. Ignored unless deliveryMode=async. Leave it unset (null) and the platform default applies, which behaves the same as maxAttempts at its maximum. get_endpoint reports which is in effect: this object when set, null when the platform default applies." - added
Input schema / properties / patch / properties / targets / items / properties / retryPolicy / properties / backoffMultiplier / descriptionAdded value: +"How sharply the gap between tries widens. Higher spends the same attempts over a longer stretch. Defaults to 2.0." - changed
Input schema / properties / patch / properties / targets / items / properties / retryPolicy / properties / maxAttempts / descriptionPrevious value: -"Including the initial attempt. Only takes effect when retryPolicy itself is set — see its description for what an unset retryPolicy uses instead."New value: +"Total delivery attempts, counting the first. 1 fails fast: one try, then the dead-letter queue. Higher values keep retrying with a widening gap between tries — at the default backoffMultiplier, roughly under a minute at 4, a few minutes at 7, about an hour at 10, a few hours at 14. Anything still undelivered lands in the dead-letter queue. Defaults to 14." - changed
Input schema / properties / patch / properties / targets / items / properties / retryPolicy / properties / maxAttempts / maximumPrevious value: -10New value: +14
Related MCP Connectors
Remote MCP for 1,500+ APIs. Vault-managed credentials; OAuth or API key. Search, load, and execute.
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
- OneOAuthai.withone
Search, document and execute authenticated API calls across 700+ apps via one MCP server
APIs.guru MCP — keyless directory of 2,500+ public APIs and their OpenAPI specs.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables connecting multiple business tools behind a single managed MCP endpoint with per-connector permissions, dispatch, and audit records.MIT
- FlicenseNot gradedqualityCmaintenanceLive OpenAPI runtime proxy that enables calling any REST API from MCP clients without writing wrapper code, by pointing at any OpenAPI spec URL.-
- AlicenseNot gradedqualityBmaintenanceEnables importing OpenAPI, Swagger, Google Discovery, GraphQL, and HTTP MCP definitions and generating typed agent tools whose calls map to HTTP endpoints under explicit execution policies such as allow, approval, or block. A hosted runtime adds credentials, OAuth scopes, request validation, approvals, and execution traces for safely exposing those endpoints to agents.4MIT
- AlicenseAqualityBmaintenanceAziel Runtime is a node-meshed MCP software orchestration suite for digital forensics, auditing, provenance, research, intelligence-support, and secure agent workflows, with a single gated execution path, compartmentalized engines, verifiable receipts, temporal integrity, and explicit capability refusal. It is not merely an API aggregator or generic tool router.10362Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.